1. 程式人生 > 資料庫 >MySQL的SQL語句 - 資料操作語句(13)- 子查詢(4)

MySQL的SQL語句 - 資料操作語句(13)- 子查詢(4)

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

官方網址: