文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  搭配 ALL 的子查詢

15.2.15.4 搭配 ALL 的子查詢

語法

operand comparison_operator ALL (subquery)

必須接在比較運算子之後的 ALL 這個詞表示 如果子查詢傳回的欄中「所有」值都符合比較的條件,則傳回 TRUE 例如

SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);

假設資料表 t1 中有一列包含 (10)。如果資料表 t2 包含 (-5,0,+5),則這個運算式為 TRUE,因為 10 大於 t2 中的所有三個值。如果資料表 t2 包含 (12,6,NULL,-100),則這個運算式為 FALSE,因為資料表 t2 中有一個值 12 大於 10。如果資料表 t2 包含 (0,NULL,1),則這個運算式為未知 (也就是 NULL)。

最後,如果表格 t2 為空,則表達式為 TRUE。因此,當表格 t2 為空時,以下表達式為 TRUE

SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);

但當表格 t2 為空時,此表達式為 NULL

SELECT * FROM t1 WHERE 1 > (SELECT s1 FROM t2);

此外,當表格 t2 為空時,以下表達式為 NULL

SELECT * FROM t1 WHERE 1 > ALL (SELECT MAX(s1) FROM t2);

一般而言,包含 NULL 值的表格空表格 都是 邊緣情況」。 在編寫子查詢時,請務必考慮是否已將這兩種可能性納入考量。

NOT IN<> ALL 的別名。因此,這兩個語句是相同的

SELECT s1 FROM t1 WHERE s1 <> ALL (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 NOT IN (SELECT s1 FROM t2);

INANYSOME 一樣,您可以將 TABLEALLNOT IN 一起使用,前提是滿足以下兩個條件

  • 子查詢中的表格僅包含一個欄位

  • 子查詢不依賴於欄位表達式

例如,假設表格 t2 僅包含一個欄位,則先前顯示的最後兩個語句可以使用 TABLE t2 這樣編寫

SELECT s1 FROM t1 WHERE s1 <> ALL (TABLE t2);
SELECT s1 FROM t1 WHERE s1 NOT IN (TABLE t2);

諸如 SELECT * FROM t1 WHERE 1 > ALL (SELECT MAX(s1) FROM t2); 之類的查詢不能使用 TABLE t2 編寫,因為子查詢依賴於欄位表達式。