文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  使用 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 例如

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 的子查詢」

SOME 這個詞是 ANY 的別名。因此,以下兩個陳述式是相同的

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);