相关子查询

相关子查询不是独立的,而是引用父查询中的列。

例如,查询 "查找乳制品销售额占总销售额 10%以上的所有商店 "可以用 SQL 语句写成
SELECT StoreID FROM Stores S
WHERE S.TotalSales*0.1 <
(SELECT SUM(1.Price) FROM Item i
WHERE S.StoreID = I.StoreId and I.ItemType = "Dairy");

该查询是一个相关子查询,因为内部查询使用父查询中商店表的外部列StoreID来计算特定商店的乳品总量。

在许多情况下,您也可以将相关查询写成 JOINS。 例如,可以在 Stores 表和 Items 表子查询之间使用 JOIN 重写示例。
SELECT S.StoreId FROM Stores S,
(SELECT I.StoreId, Sum(Price) DairySales FROM Items I
WHERE I.ItemType = "Dairy" GROUP BY I.StoreId) D
WHERE S.StoreId = D.StoreId AND S.TotalSales *0.1 < D.DairySales;

在这个版本中,子查询创建了一个结果表,作为外层 FROM 子句的一部分,然后与 "商店 "表连接,以便执行乳制品销售测试。