07.子查询
1. 子查询概述
1.1 定义
- 概念:出现在 其他语句内部 的 select 语句,称为 子查询或内查询
- 内部嵌套其他 select 语句 的查询,称为 外查询或主查询
1.2 分类
(1)按结果集的行列数不同
- 标量子查询(结果集只有一行一列)
- 列子查询(结果集只有一列多行)
- 行子查询(结果集有一行多列)
- 表子查询(结果集一般为多行多列)
(2)按子查询出现的位置
- select 后面:仅仅支持标量子查询
- from 后面:支持表子查询
- where 或 having 后面:
- 标量子查询(单行)
- 列子查询(多行)
- 行子查询
- exists 后面(相关子查询):表子查询
1.3 子查询的使用
(1)放在 where 或 having 后面
- 标量子查询(单行子查询)
- 列子查询(多行子查询)
- 行子查询(多列多行)
① 标量子查询
子查询特点:
- 子查询放在 小括号内
- 子查询一般放在 条件的右侧
- 标量子查询,一般搭配着 单行操作符 使用
><>=<= =< <>
- 列子查询,一般搭配着多行操作符使用
IN、ANY/ SOME、ALL
- 子查询的执行 优先于主查询执行,因为主查询的条件需要使用子查询的结果
② 多行子查询
- 返回多行
- 使用多行操作比较操作符
操作符 含义 IN/NOT IN 等于列表中 任意一个 ANY/SOME 和子查询返回的 某一个值 比较 ALL+ 和子查询返回的 所有值 比较
③ 行子查询
行子查询:结果为一行多列或多行多列。(不常用)