查询中可以使用子查询的位置包括:
·在用于列投影的SELECT列表中
·在FROM子句中 (嵌套的深度没有限制)
·在WHERE子句中 (只能嵌套255)
·在HAVING子句中
·所有的DML语句
子查询可以出现在一个比较操作符的两边。A subquery can appear on either side of a comparison operator.
可检索零行或者多行。A subquery can retrieve zero or more rows.
子查询可以包括GROUP BY子句和ORDER BY子句。
主查询和子查询可以从不同的表中获取数据。
多列或表达式可以在主查询和子查询之间进行比较。
单行子查询——适用的比较运算符:=,>,<,>=,<=,<>,!=
多行子查询——适用的比较运算符:IN,NOT IN ,ALL , ANY
——可以继续包含一个子查询,可以返回多列、多行,可以包括分组函数、GROUP BY、HAVING子句。
关联子查询
集合运算符:
UNION :返回两个查询的合并行,排序,删除重复行。
UNION ALL :返回两个查询的合并行,不排序,也不删除重复行。
INTERSECT :只返回同时出现在两个查询的结果集中的行,排序这些行并删除重复行。
MINUS:只返回第一个结果集中的行,这些行没有出现在第二个结果集中,排序这些行并删除重复行。
所有集合运算符都通过合并两个或者更多查询的结果集来生成复合查询。
组成复合查询的查询中的列可以有不同的名称,但输出结果集使用第一个查询中列的名称。
组成复合查询的查询中,相关列必须是相同的数据类型组。
复合查询会默认返回按所有列排序(从左到右)的行。唯一例外的是UNION ALL,在这种情况下不会对行进行排序。唯一允许使用ORDER BY子句的位置是在复合查询的结尾。