Oracle 多行、多列子查询
本文使用到的是oracle数据库scott方案所带的表,scott是oracle数据库自带的方案,使用前请确保其解锁
一、多行子查询
多行子查询子查询是嵌入在其他Sql语句中的select语句,Oracle子查询分为两种:一种是单行子查询,一种是多行子查询
1、单行子查询
单行子查询的select语句只返回一行数据,也就是说嵌入在其他Sql语句中的那个select查询值返回一行数据。
例:查询emp表中,与Smith同一部门的所有员工
select * from emp where deptno= (select deptno from emp where ENAME='SMITH');--这里的select查询只返回一行数据
所以,我们把子查询的嵌入的select语句至返回一行数据的这类子查询,称为单行子查询
2、多行子查询
了解了单行子查询的原理,那么多行子查询自然而然的就知道了,多行子查询就是嵌入在其他Sql语句中的select查询返回多行数据
例:查询所有员工中工作和部门10的工作一样的员工信息
select * from emp where job in (select distinct job from emp where deptno=10) --这里的select查询返回多行记录
注意左图红框中的关键字只能用in,不能使用'=','='号表示一对一,in表示处于一个范围(用来处理子查询返回多行记录),如果这里使用'='号,也就是执行如下语句:
select * from emp where job = (select distinct job from emp where deptno=10) --这里的select查询返回多行记录
3、多行子查询中的特殊操作符
虽然in能解决多行子查询中的=的问题,但是如果要和子查询的结果集中的字段比较大小呢?显然用in是不够用的!!!ok,下面即将使用的操作符,就是来解决这个问题的.
3.1、多行子查询中的all操作符
例:查询比部门30所有员工的工资都要高度员工信息
select * from emp where sal> (select sal from emp where deptno=30) --这里的select查询返回多行记录
执行sql之后发现和=是一样的问题,因为'>'表示一对一的关系,而子查询返回多个结果集,所以报错了,那怎么办呢?总不可能用in吧!这里就要使用all了,如下代码:
select * from emp where sal> all (select sal from emp where deptno=30) --这里的select查询返回多行记录
在子查询前面加上all关键字,表示当检索emp表时,只检索出哪些比(子查询结果集中最大的还要大)的数据行
所以上面的代码也可以这样表示:
select * from emp where sal> (select max(sal) from emp where deptno=30)
3.2、多行子查询中的any操作符
在了解了all操作符之后,any操作符也就好理解了。
select * from emp where sal> any (select sal from emp where deptno=30) --这里的select查询返回多行记录
这段代码表示:检索出emp表,只检索那些(只要比子查询的结果集的任意一行大)就行的数据行,所以上面的代码也相当于:
select * from emp where sal> (select min(sal) from emp where deptno=30) --这里的select查询返回多行记录
二、多列子查询
例1:查询与smith部门和岗位完全相同的员工
1、首先使用多行子查询来解决这个问题
select * from emp where deptno= (select deptno from emp where ename='SMITH') and job= (select job from emp where ename='SMITH')
2、使用多列子查询来解决这个问题
select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH') --列的顺序一定要相同
加入换了列的顺序,代码如下:
select * from emp where (job,deptno)=(select deptno,job from emp where ename='SMITH') --列的顺序一定要相同
例2:查询高于自己部门平均工资的员工信息
select * from emp a,(select deptno,ceil(avg(sal)) as avgsal from emp group by deptno) b where a.deptno=b.deptno and a.sal>b.avgsal
解决思路:通过分组函数求出各个部门的平均薪水,然后将平均薪水通过deptno和emp进行连表查询,然后比较薪水和平均值,得出结果集。
转载于:https://www.cnblogs.com/GreenLeaves/p/6634310.html
Oracle 多行、多列子查询相关推荐
- oracle 条件查询,比较运算符,逻辑运算符,特殊运算符,判断空值,大小写敏感,多行,多列子查询...
oracle 条件查询,比较运算符,逻辑运算符,特殊运算符,判断空值,大小写敏感,多行,多列子查询博客分类: oracle OracleSQL 比较运算符 >,<:大于,小于 >=. ...
- Oracle数据库多表连接查询操作以及查询操作的补充
文章目录 一.查询语句概述 1.查询语句基本语法格式 2.伪表和伪劣 二.单表查询 1.select子句 2.FROM子句 3.WHERE子句 4.DISTINCT关键字 5.GROUP BY子句与聚 ...
- mysql子查询教行子查询_MySQL中列子查询与行子查询操作的学习教程
MysqL 列子查询及 IN.ANY.SOME 和 ALL 操作符的使用MysqL 列子查询 列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回. 一个列子查询的例子如 ...
- 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)
三.MySQL子查询学习笔记 7:子查询 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询:在外面的查询语句,称为主查询或外查询 分类: 一 ...
- 子查询及其分类(标量子查询+列子查询+行子查询+表子查询)
子查询 什么是子查询 子查询概念 子查询:sub query 子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块.当一个查询是另一个查询的条件时,称之为子查询. 子查询:指在一 ...
- mysql子查询:标量子查询,行子查询,列子查询
子查询 子查询或内查询 分类 按结果集的行列数不同 按子查询出现的位置 where或having后 标量子查询 列子查询(多行子查询) 行子查询 放在select后:仅仅支持标量子查询 放在from后 ...
- 子查询:单行子查询,多行子查询,多列子查询
#子查询 子查询使用规则: 子查询放在圆括号中 子查询放在比较条件右边(非强制) 子查询中不需要ORDER BY 子句 在单行子查询中使用单行运算符,在多行子查询中用多行运算符. 单行运算符:子查询结 ...
- 《Oracle编程自学与面试指南》17-03:多列子查询
内容导航 多列子查询,即一个子查询中同时返回多个查询的列. 案例代码: /* 作者:AT阿宝哥 日期:2016年9月18日 愿景:参考官方资料,做最好的课程,成就更多职业人! 邮箱:12264104@ ...
- oracle sql 全是子查询查询速度太慢如何优化_如果面试官问你如何优化mysql分页查询,请把这篇文章甩给他!...
在我们日常开发中,分页查询是必不可少的,可以说每干后端程序猿大部分时间都是CURD,所以分页的查询也接触的不少,你们都是怎么实现的呢?前不久的一段时间,我的一个同事突然找我寻求帮助,他说他写的sql查 ...
最新文章
- Ansible 入门指南 - ansible-playbook 命令
- Volley 源码解析之图片请求
- JAVA SE学习day_01:API、文档注释规范、String字符串的常用API
- Angular里ngClass的一个使用例子
- DMN结合bpmn简化流程_07
- 学习笔记_vnpy实战培训day04
- 写爬虫时遇到的问题及解决方法
- 2. PHP 编译安装
- 旋转音乐html,css3可控旋转音乐播放按钮
- 编程基本功:正常运行的代码,你看明白能做什么?不如解决几个简单BUG
- Go语言编程(旧读书笔记)
- opencv 二值化处理
- 英语语法---形容词详解
- 正余弦信号的DFT频谱分析
- matlab学习心得(一)
- Google SketchUp Cookbook: (Chapter 4) Advanced Intersect and Follow Me Techniques
- 带翻转特效的会员登录注册html页面源码
- 【问题篇】Springboot解决报错“java.sql.SQLException: Unable to load authentication plugin ‘caching_sha2_passw”
- frustum pointnets训练代码学习笔记——kitti_object.py
- SecurityContextHolder.getContext().getAuthentication()正常请求有时候获取authentioncation为空异常问题