Skip to content

subquery / 子查询

子查询就是一张一次性 View。

sql
SELECT name, size
FROM (
  SELECT name, count(inventory) as size
  FROM Shop
  Group By name
) AS AsTableName;

原则上,都应该给子查询一个合适的名字。
Oracle 命名不需要 AS 。

子查询可以嵌套子查询,无限嵌套。

scalar subquery / 标量子查询

必须返回只有 1 行 1 列 的结果。如:“七彩虹”,“4090”

标量子查询 像 常数 一样,所以也可以出现在任何位置,无论是 WHERE 还是 SELECT。

correlated subquery / 关联子查询

sql
SELECT name, type, price
FROM Product AS P1
WHERE price > (
                SELECT AVG(price)
                FROM Product AS P2
                WHERE p1.type = p2.type
              )

注意子查询的作用域,p1.type = p2.type 只能放在 子查询中!