子查询分为两类:标准子查询和相关子查询。

一、标准子查询:子查询先于主查询独立执行,返回明确结果供主查询使用。

  子查询只执行一次,不依赖于主查询。

例如:

  其中子查询能够返回结果:2450。所以断定其为标准子查询。

1、单行子查询(子查询返回的结果是单行单列)

  WHERE子句中使用单行子查询时,可以使用单行比较运算符(=,>,>=,<,<=,<>),将子查询的返回结果当做单一数值来使用。

  需要小心的是子查询返回的结果的不确定定,即返回空值或多值。具体分为三种情况:

(1)返回单行:即为单行子查询。

(2)未返回任何行:如果子查询未返回任何行(相当于返回NULL),则主查询将不再执行,所以主查询也不会返回任何结果。

(3)返回多行:是多行子查询,此时不允许使用单行比较运算符,否则出错。

2、多行子查询(子查询返回多行单列)

  在WHERE子句中使用多行子查询时,可以使用多行比较运算符(IN,ALL,ANY),将子查询的返回结果当做数值集合来使用。其中,ALL和ANY运算符必须与单行比较运算符(=,>,>=,<,<=,<>)结合使用。例如WHERE sal>ALL(子查询)。

  IN:等于任何一个

  ALL:和子查询返回的所有值比较。例如:sal>ALL(1,2,3)等价于sal>3,即大于所有。

  ANY:和子查询返回的任意一个值比较。例如:sal>ANY(1,2,3)等价于sal>1,即大于任意一个就可以。

  EXISTS:判断子查询是否有返回结果(不关心具体行数和内容),如果返回则为TRUE,否则为FALSE。(常用于相关子查询)

3、多列子查询(子查询返回多列,可以是单行、多行或者不返回任何结果)

  在WHERE子句中使用多列子查询时,

a.如果返回结果是单行多列,则可以使用单行比较运算符;例如

b.如果返回结果是多行多列,则只能使用多行比较运算符(IN,ALL,ANY);例如:

c.如果未返回结果,则主查询也不返回结果。

二、相关子查询:子查询不能提前运行以得到明确结果。

  子查询执行过程中需要用到主查询的相关结果,即子查询在主查询返回的结果集上执行(针对主查询的每一行结果,子查询都要执行一次)。子查询和主查询在执行过程中相互依赖。

例1:SELECT字段列表中使用子查询

  其中,只看子查询,发现emp.deptno=dept.deptno中的emp并不存在与子查询的FROM语句中,而是存在于外层的主查询中,所以断定其为相关子查询。

等价于:

  可见,等价后的WHERE中增加了一个条件。

例2:WHERE子句中使用子查询

等价于:

  可见,等价后的WHERE子句中增加了一个条件。

例3:WHERE子句中使用EXISTS(子查询)

等价于:

  注意这里使用DISTINCT的原因。第一个查询是从dept中查出的,所有不会重复,但第二个查询是连接查询,会有重复的内容(emp表中的不同员工可能属于同一部门,即一个部门可能有超过一名员工),所以要用DISTINCT去重。

ORACLE复杂查询之子查询的更多相关文章

  1. .Net程序员学用Oracle系列(14):子查询、集合查询

    1.子查询 1.1.子查询简介 1.2.WITH 子查询 2.集合查询 2.1.UNION 和 UNION ALL 2.2.MINUS 2.3.INTERSECT 2.4.集合运算与 ORDER BY ...

  2. oracle多表关联查询和子查询

    oracle多表关联查询和子查询 一.多表关联查询 例子: SQL> create table student1 ( sid ), sname ), sage )); Table created ...

  3. Oracle 自连接 / 外连接 / 子查询

    --连接查询的三种格式 select ename, deptno,dname from emp natural join dept; select ename, deptno,dname from e ...

  4. oracle 之 统计函数、子查询、操作符

    统计函数 COUNT():查询表中的数据记录 AVG():求出平均值 SUM():求和 MAX():求出最大值 MIN():Q求出最小值 子查询   [单行多列] select * from a wh ...

  5. Oracle学习(六):子查询

    1.知识点:能够对比以下的录屏进行阅读 SQL> --子查询所要解决的问题:问题不能一步求解 SQL> --查询工资比SCOTT高的员工信息 SQL> --(1)使用普通方法 SQL ...

  6. Oracle系列八 高级子查询

    子查询 子查询 (内查询) 在主查询执行之前执行 主查询(外查询)使用子查询的结果 多列子查询 主查询与子查询返回的多个列进行比较 多列子查询中的比较分为两种: 成对比较 问题:查询与141号或174 ...

  7. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

  8. mysql的查询、子查询及连接查询

    >>>>>>>>>> 一.mysql查询的五种子句         where(条件查询).having(筛选).group by(分组). ...

  9. SQL编程之高级查询(子查询)以及注意事项

    SQL编程之高级查询(子查询)以及注意事项   1.什么是子查询? 当一个查询是另一个查询的条件时,称之为子查询.子查询可以使用几个简单命令构造功能强大的复合命令.子查询最常用于SELECT-SQL命 ...

随机推荐

  1. Java基础面试题集(二)

    Java程序员面试题集(1-50) 一.Java基础部分 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象 ...

  2. Spring 中如何自动创建代理(spring中的三种自动代理创建器)

    Spring 提供了自动代理机制,可以让容器自动生成代理,从而把开发人员从繁琐的配置中解脱出来 . 具体是使用 BeanPostProcessor 来实现这项功能. 这三种自动代理创建器 为:Bean ...

  3. unable to compile class for jsp解决方案

    今天遇到了一个错误,纠结了两天,百度很多经验,结果都不太起效.通过比较自己之前不报错的项目,发现以下解决方案. 报错: 解决方案: 1.先将jar 包复制到lib目录下. 2.将lib目录下的jar包 ...

  4. 2D轮播图

    目录结构 index.html <!DOCTYPE html><html lang="en"><head> <meta charset=& ...

  5. 【神经网络与深度学习】学习笔记:AlexNet&Imagenet学习笔记

    学习笔记:AlexNet&Imagenet学习笔记 ImageNet(http://www.image-net.org)是李菲菲组的图像库,和WordNet 可以结合使用 (毕业于Caltec ...

  6. [转帖]Linux杂谈: 树形显示多级目录--tree

    Linux杂谈: 树形显示多级目录--tree https://www.cnblogs.com/tp1226/p/8456539.html tree -L 最近写博客的时候偶尔会需要将文件目录结构直观 ...

  7. [.net core]10.请求静态文件, 自定义默认文件名

    何谓静态文件,文件系统上的文件,  css, javascript , image. html  这些都属于静态文件, .net core web app 默认是不处理文件请求的.  我们来做一个实验 ...

  8. Yii2实现命名范围scope的自定义查询

    Yii中存在scope命名范围这个概念,Yii2里已经废弃了,在实际的项目开发情景中,我们有时需要用到命名范围这种自定义查询 使用场景: cate为栏目分类表,现在需要查询出栏目分类列表中所有的顶级分 ...

  9. java实现spark常用算子之cogroup

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spa ...

  10. jsp页面中JSTL如何处理日期格式

    引入fmt标签 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 格 ...