文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美國信紙尺寸) - 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 參考手冊  /  ...  /  使用 ANY、IN 或 SOME 的子查詢

15.2.15.3 使用 ANY、IN 或 SOME 的子查詢

語法

operand comparison_operator ANY (subquery)
operand IN (subquery)
operand comparison_operator SOME (subquery)

其中 comparison_operator 是下列運算子之一

=  >  <  >=  <=  <>  !=

ANY 關鍵字必須接在比較運算子之後,表示「如果子查詢傳回的欄中的任何值,比較結果為TRUE,則傳回TRUE。」 例如

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

假設資料表 t1 中有一列包含 (10)。如果資料表 t2 包含 (21,14,7),則此運算式為 TRUE,因為 t2 中有一個值 7 小於 10。如果資料表 t2 包含 (20,10),或如果資料表 t2 為空,則此運算式為 FALSE。如果資料表 t2 包含 (NULL,NULL,NULL),則此運算式為未知(即 NULL)。

當與子查詢一起使用時,關鍵字 IN= ANY 的別名。因此,這兩個敘述是相同的。

SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 IN    (SELECT s1 FROM t2);

當與運算式清單一起使用時,IN= ANY 並非同義詞。IN 可以接受運算式清單,但是 = ANY 不行。請參閱第 14.4.2 節「比較函數和運算子」

NOT IN 不是 <> ANY 的別名,而是 <> ALL 的別名。請參閱第 15.2.15.4 節「使用 ALL 的子查詢」

關鍵字 SOMEANY 的別名。因此,這兩個敘述是相同的。

SELECT s1 FROM t1 WHERE s1 <> ANY  (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 <> SOME (SELECT s1 FROM t2);

關鍵字 SOME 的使用很少見,但是這個範例說明了它為什麼可能有用。對大多數人來說,英文短語「a 不等於任何 b」表示「沒有任何 b 等於 a」,但這不是 SQL 語法所表達的意思。該語法表示「有一些 b 不等於 a。」使用 <> SOME 取代有助於確保每個人都了解查詢的真正含義。

您可以在純量 INANYSOME 子查詢中使用 TABLE,前提是該資料表僅包含單一欄位。如果 t2 只有一個欄位,則本節前面顯示的敘述可以如此處所示編寫,在每種情況下將 TABLE t2 替換為 SELECT s1 FROM t2

SELECT s1 FROM t1 WHERE s1 > ANY (TABLE t2);

SELECT s1 FROM t1 WHERE s1 = ANY (TABLE t2);

SELECT s1 FROM t1 WHERE s1 IN (TABLE t2);

SELECT s1 FROM t1 WHERE s1 <> ANY  (TABLE t2);

SELECT s1 FROM t1 WHERE s1 <> SOME (TABLE t2);