MySQL的SQL語句 - 數據操做語句(13)- 子查詢(4)

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

相關文章
相關標籤/搜索