本文使用到的是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 多行、多列子查询相关推荐

  1. oracle 条件查询,比较运算符,逻辑运算符,特殊运算符,判断空值,大小写敏感,多行,多列子查询...

    oracle 条件查询,比较运算符,逻辑运算符,特殊运算符,判断空值,大小写敏感,多行,多列子查询博客分类: oracle OracleSQL 比较运算符 >,<:大于,小于 >=. ...

  2. Oracle数据库多表连接查询操作以及查询操作的补充

    文章目录 一.查询语句概述 1.查询语句基本语法格式 2.伪表和伪劣 二.单表查询 1.select子句 2.FROM子句 3.WHERE子句 4.DISTINCT关键字 5.GROUP BY子句与聚 ...

  3. mysql子查询教行子查询_MySQL中列子查询与行子查询操作的学习教程

    MysqL 列子查询及 IN.ANY.SOME 和 ALL 操作符的使用MysqL 列子查询 列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回. 一个列子查询的例子如 ...

  4. 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)

    三.MySQL子查询学习笔记 7:子查询 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询:在外面的查询语句,称为主查询或外查询 分类: 一 ...

  5. 子查询及其分类(标量子查询+列子查询+行子查询+表子查询)

    子查询 什么是子查询 子查询概念 子查询:sub query 子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块.当一个查询是另一个查询的条件时,称之为子查询. 子查询:指在一 ...

  6. mysql子查询:标量子查询,行子查询,列子查询

    子查询 子查询或内查询 分类 按结果集的行列数不同 按子查询出现的位置 where或having后 标量子查询 列子查询(多行子查询) 行子查询 放在select后:仅仅支持标量子查询 放在from后 ...

  7. 子查询:单行子查询,多行子查询,多列子查询

    #子查询 子查询使用规则: 子查询放在圆括号中 子查询放在比较条件右边(非强制) 子查询中不需要ORDER BY 子句 在单行子查询中使用单行运算符,在多行子查询中用多行运算符. 单行运算符:子查询结 ...

  8. 《Oracle编程自学与面试指南》17-03:多列子查询

    内容导航 多列子查询,即一个子查询中同时返回多个查询的列. 案例代码: /* 作者:AT阿宝哥 日期:2016年9月18日 愿景:参考官方资料,做最好的课程,成就更多职业人! 邮箱:12264104@ ...

  9. oracle sql 全是子查询查询速度太慢如何优化_如果面试官问你如何优化mysql分页查询,请把这篇文章甩给他!...

    在我们日常开发中,分页查询是必不可少的,可以说每干后端程序猿大部分时间都是CURD,所以分页的查询也接触的不少,你们都是怎么实现的呢?前不久的一段时间,我的一个同事突然找我寻求帮助,他说他写的sql查 ...

最新文章

  1. Ansible 入门指南 - ansible-playbook 命令
  2. Volley 源码解析之图片请求
  3. JAVA SE学习day_01:API、文档注释规范、String字符串的常用API
  4. Angular里ngClass的一个使用例子
  5. DMN结合bpmn简化流程_07
  6. 学习笔记_vnpy实战培训day04
  7. 写爬虫时遇到的问题及解决方法
  8. 2. PHP 编译安装
  9. 旋转音乐html,css3可控旋转音乐播放按钮
  10. 编程基本功:正常运行的代码,你看明白能做什么?不如解决几个简单BUG
  11. Go语言编程(旧读书笔记)
  12. opencv 二值化处理
  13. 英语语法---形容词详解
  14. 正余弦信号的DFT频谱分析
  15. matlab学习心得(一)
  16. Google SketchUp Cookbook: (Chapter 4) Advanced Intersect and Follow Me Techniques
  17. 带翻转特效的会员登录注册html页面源码
  18. 【问题篇】Springboot解决报错“java.sql.SQLException: Unable to load authentication plugin ‘caching_sha2_passw”
  19. frustum pointnets训练代码学习笔记——kitti_object.py
  20. SecurityContextHolder.getContext().getAuthentication()正常请求有时候获取authentioncation为空异常问题

热门文章

  1. oracle12版本无scott解决,Oracle12C中scott账户与表问题
  2. python网页请求_python用post请求网页
  3. 第21天学习Java的笔记-数学工具类Arrays,Math
  4. C语言程序的基本结构
  5. Python-OpenCV--直线提取
  6. 目标检测--吴恩达深度学习记录
  7. Teechart动态设计方法
  8. 重新认识二级指针(Pointers to Pointers)
  9. ios 自动缩小字体_小字体紫筑B丸85%中粗体文件+deb双版本
  10. 第四范式裴沵思出席绿公司年会:传统企业要尽快完成在线化武装