目录
- 概念
- 应用
1.概念
嵌套在SELECT,INSERT,UPDATE,DELETE等语句中,充当中间结果集。
子查询也称内部查询或内部选择,包含子查询的语句称为外部查询或外部选择。
按返回值数量分为标量子查询和多值子查询;按子查询对外部的依赖分为独立子查询和相关子查询;按比较运算符可分为EXISTS,IN,SOME,ALL,ANY等多种形式。
注:
- 根据可用内存和查询中的其它限制,一般可以嵌套32层。
- 凡是可以使用表达式的地方都可以使用子查询(须返回单值)。
2.应用
2.1 用在选择列表中
标量子查询(单值)
对比子查询与联接:许多子查询都可以使用联接,但在一些必须检查存在性的情况中,联接性更佳。
2.2 含IN和EXISTS
1)IN引入的子查询结果是包含0个或多个值的列表,表示的是一种值的“等于”关系;
2)EXISTS引入的子查询不产生任何数据,只返回TRUE/FALSE,表示**“存在”行为**。
3)所有IN或由ANY | ALL修改的比较运算符的查询都可以用EXISTS表示。
2.3 NOT IN | NOT EXISTS
含有NULL值时,NOT EXISTS的执行效率更佳。
2.4 含比较运算符的子查询
必须返回单值,否则出错。
2.5 批量比较:ANY、SOME或ALL
修改引入子查询的比较运算符(eg. =ALL/=ANY)。
SOME是与ANY等效的ISO标准。
ALL:WHERE表达式中,子查询返回的结果必须全部满足条件。
ANY:WHERE表达式中,子查询返回的结果至少有一个满足条件。
2.6 多层嵌套
3.补充
1)ntext,text,image数据类型不能用于子查询的选择列表中。
2)未修改的比较运算符相入子查询时,不能使用GROUP BY + HAVING子句。
3)除非指定了TOP,否则ORDER BY子句不能用于子查询中。