与子查询类似的是子连接,出现在 FROM 关键字后的子句是子查询语句,出现在 WHERE/ON 等约束条件中或投影中的子句是子连接语句,不过大多数时候,二者并不会分的那么细。
其中,子查询又可以细分为相关子查询和非相关子查询,顾名思义,,相关子查询会导致外层表每获得一个元组,子查询就需要重新执行一次;而非相关子查询是指在子查询语句是独立的,和外层的表没有直接的关联,子查询可以单独执行一次,外层表可以重复利用子查询的执行结果。这一段话听起来和标量子查询很类似,不过标量子查询返回的是单个值,通常出现在 SELECT 列表中,对于标量子查询的改写就那么一个套路,使用 LEFT JOIN,如果关联字段是主外键的关系,那么就使用 INNER JOIN 进行改写。关于标量子查询的案例,可以参照 DB Killer?原来是标量子查询!