MySQL的SQL語句 - 資料操作語句(13)- 子查詢(4)
阿新 • • 發佈:2020-12-04
帶有 ANY、IN 或 SOME 的子查詢
1. operand comparison_operator ANY (subquery)
2. operand IN (subquery)
3. operand comparison_operator SOME (subquery)
其中 comparison_operator 是以下運算子之一:
1. = > < >= <= <> !=
ANY 關鍵字必須跟在比較運算子之後,表示“如果子查詢返回的列中的任何值的比較結果為真,則返回 TRUE”。例如:
1. SELECT s1 FROM t1 WHERE s1 > ANY (SELECT s1 FROM t2);
假設表 t1 中有一行包含 (10)。如果表 t2 包含 (21,14,7),則表示式為真,因為 t2 中的值 7 小於 10。如果表 t2 包含 (20,10),或者表 t2 為空,則表示式為 FALSE。如果表 t2 包含 (NULL,NULL,NULL),則表示式是未知的(即 NULL)。
與子查詢一起使用時,IN 是 = ANY 的別名。因此,這兩個語句是相同的:
1. SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);
2.SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);
與表示式列表一起使用時,IN 和 = ANY 不是同義詞。IN 可以接受表示式列表,但是 = ANY 不能。
NOT IN 不是 <> ANY 的別名,而是 <> ALL 的別名。
SOME 是 ANY 的別名。因此,這兩種說法是相同的:
1. SELECT s1 FROM t1 WHERE s1 <> ANY (SELECT s1 FROM t2);
2. SELECT s1 FROM t1 WHERE s1 <> SOME (SELECT s1 FROM t2);
SOME 這個詞很少用,但這個例子說明了它可能有用的原因。對大多數人來說,英語短語“a 不等於任何 b”的意思是“沒有 b 等於 a”,但這不是 SQL 語法的意思。語法的意思是“有一些 b 與 a 不相等”。使用 <> SOME 可以幫助確保每個人都理解查詢的真正含義。
從 MySQL 8.0.19 開始,只要表只包含一個列,就可以在標量 IN、ANY 或 SOME 子查詢中使用 TABLE 語句。如果 t2 只有一列,則本節前面所示的語句可以按如下所示編寫,在每種情況下,用 TABLE t2 代替 SELECT s1 FROM t2:
1.SELECT s1 FROM t1 WHERE s1 > ANY (TABLE t2);
2.SELECT s1 FROM t1 WHERE s1 = ANY (TABLE t2);
3.SELECT s1 FROM t1 WHERE s1 IN (TABLE t2);
4.SELECT s1 FROM t1 WHERE s1 <> ANY (TABLE t2);
5.SELECT s1 FROM t1 WHERE s1 <> SOME (TABLE t2);
官方網址: