定义:将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询
查询块:一个SELECT-FROM-WHERE语句
一些概念:外层查询/父查询,内层查询/子查询
小提示:子查询不能使用ORDER BY语句,ORDER BY语句只能对最终结果进行排序
select sno, Sname
from student
where sno in (select sno
from sc
where Cno='2');
1 带有IN谓词的子查询
子查询的查询条件不依赖于父查询,叫不相关子查询
子查询的查询条件依赖于父查询,叫相关子查询,整条查询语句叫相关嵌套查询
有些嵌套查询可以被连接查询替代,有些不能
2 带有比较运算符的子查询——子查询返回单值
定义:查询结果是父查询与子查询用比较运算符连接的结果
当用户知道子查询结果为某个值时,可以用比较运算符
3 带有ANY(SOME)或ALL谓词的子查询——子查询返回多值
/*语法
>ANY 大于子查询结果中的某个值
>ALL 大于子查询结果中的所有值
<ANY 小于子查询结果中的某个值
<ALL 小于子查询结果中的所有值
>=ANY <=ANY =ANY !=ANY
>=ALL <=ALL =ALL !=ALL
*/聚焦函数效率较高
4 带有EXISTS谓词的子查询(NOT EXISTS)
不返回任何数据,只产生逻辑的真假
由EXISTS引出的子查询,目标列表达式通常用*,因为EXISTS的子查询只返回逻辑真假
一些EXISTS谓词的子查询不能被其他子查询等价替代,但所有带有IN、比较运算符、ANY、ALL的子查询都能用EXISTS谓词的子查询等价替代