帶有 ANY、IN 或 SOME 的子查詢html
1. operand comparison_operator ANY (subquery) 2. operand IN (subquery) 3. operand comparison_operator SOME (subquery)
其中 comparison_operator 是如下運算符之一:mysql
1. = > < >= <= <> !=
ANY 關鍵字必須跟在比較運算符以後,表示「若是子查詢返回的列中的任何值的比較結果爲真,則返回 TRUE」。例如:sql
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)。ide
與子查詢一塊兒使用時,IN 是 = ANY 的別名。所以,這兩個語句是相同的:code
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 不能。htm
NOT IN 不是 <> ANY 的別名,而是 <> ALL 的別名。get
SOME 是 ANY 的別名。所以,這兩種說法是相同的:it
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 能夠幫助確保每一個人都理解查詢的真正含義。class
從 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);
官方網址:
https://dev.mysql.com/doc/refman/8.0/en/any-in-some-subqueries.html