一、子查询的概述
1、理解:可以理解为嵌套查询,查询的内部进行查询
2、称谓规范:外查询(主查询)、内查询(子查询),这种称呼是相对的。
子查询(内查询)在主查询之前一次执行完成。
子查询的结果被主查询(外查询)使用。
3、注意事项:
子查询要包含在括号内。
将子查询放在比较条件的右侧。
单行操作符对应单行子查询,多行操作符对应多行子查询。
4、子查询分类
角度1:从内查询结果返回的条目数
单行子查询与多行子查询
单行子查询:内查询只有一个结果
多行子查询:内查询返回多个结果
角度2:内查询是否被执行多次
相关子查询:内查询根据外查询的变化而变化
不相关子查询:无论外查询如何变化,内查询只返回固定的数据
二、单行子查询
1、单行子查询操作符
=、>=、<=、<>、<、>
2、举例
三、多行子查询
1、理解:内查询返回不止一个数据
2、多行比较操作符
IN 等于列表中的任意一个
ANY 和单行比较操作符一起使用,和子查询返回的某个值进行比较
ALL 和子查询返回的所有值比较
SOME ANY的别名
3、举例
此处<ANY 的用法可以理解为小于子查询中的最大值。
4、多层子查询
因为聚合函数不能嵌套使用,有时需要进行多层的查询。
所以写为:
或者
4.多行子查询空值问题:
多行子查询时要注意,子查询中的值应当不含NULL空值,否则可能导致结果有误。
三、相关子查询
如果子查询的执行依赖于外部查询,通常情况下是因为主查询中的表用到了外部的表,并进行了条件关联,因此,每执行一次外部查询,子查询都要重新计算一次,这样的子查询称之为关联子查询。
1、EXISTS关键字
四、小tip总结