第11课 使用子查询
- 这一课学习了什么是子查询,如何使用它们。
- 子查询常用于
WHERE
子句的IN
操作符中,以及用来填充计算列。
11.1 子查询 subquery
- 将一个查询块嵌套在另一查询块的
where
子句或from
子句的查询称为一个子查询。 - 一个
select-from-where
语句称为一个查询块。
11.2 利用子查询进行过滤
-
在
SELECT
语句中,子查询总是从内向外处理。 -
格式化
SQL
:把子查询分解为多行并进行适当的缩进,能极大简化子查询的使用。 -
对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询。
-
只能是单列:作为子查询的
SELECT
语句只能查询单个列。企图检索多个列将返回错误。
子查询类别:
- 标量子查询:返回单一值的标量,最简单的形式。
- 列子查询:返回的结果集是N行一列。
- 行子查询:返回的结果集是一行N列。
- 表子查询:返回的结果集是N行N列。
子查询前的关键字:
=
Any、All
In、Not In
Exist、Not Exist
11.3 作为计算字段使用子查询
- 用一个句点分割表名和列名,在有可能混淆列名时必须使用这种语法。
- 完全限定列名:有时候,由于出现冲突列名而导致的歧义性,会引起DBMS抛出错误信息。如果在SELECT语句中操作多个表,就应使用完全限定列名来避免歧义。
优点
- 逻辑清晰
- 组织灵活
不足
- 要创建临时表,撤销临时表,额外开销。
- 数据量大时效率受影响。
子查询 -> 联表查询
参考资料
- 《SQL必知必会》第11课