MySQL 4.1+ 完整支持標準 SQL 子查詢。本文通過 5 類經典實例,演示 FROM 衍生表、行構造符、EXISTS/NOT EXISTS、多層關聯條件,並總結支持子查詢的 SQL 類型與關鍵字。
語法:SELECT ... FROM (subquery) AS alias ...。
示例:對聚合結果再求平均:
SELECT AVG(sum_column1) FROM (SELECT SUM(column1) AS sum_column1 FROM t1 GROUP BY column1) AS t1;
解決「不能對聚合結果直接再聚合」的限制。
返回單行多列,配合 ROW() 構造符整行比較:
SELECT * FROM t1 WHERE ROW(1,2) = (SELECT column1, column2 FROM t2);
存在性檢查,子查詢返回至少一行即 TRUE。
例 1:SELECT DISTINCT store_type FROM Stores WHERE EXISTS (SELECT * FROM Cities_Stores WHERE Cities_Stores.store_type = Stores.store_type);
例 2:NOT EXISTS 反向篩選。
例 3:雙層 NOT EXISTS 實現關係除法(找出在所有城市都有分店的店型)。
子查詢引用外層表別名,逐行計算:
SELECT column1 FROM t1 AS x WHERE x.column1 = (SELECT column1 FROM t2 AS x WHERE x.column1 = (SELECT column1 FROM t3 WHERE x.column2 = t3.column1));
SELECT (SELECT s1 FROM t2) FROM t1; SELECT (SELECT s2 FROM t1);
SELECT, INSERT, UPDATE, DELETE, SET, DODISTINCT, GROUP BY, LIMIT, ORDER BY, UNION, ALL<, >, <=, >=, =, <>、集合操作 ANY, IN, SOME