語法
operand comparison_operator ANY (subquery)
operand IN (subquery)
operand comparison_operator SOME (subquery)
其中 comparison_operator
是下列運算子之一
= > < >= <= <> !=
ANY
關鍵字必須接在比較運算子之後,表示「如果子查詢傳回的欄中的任何值,比較結果為TRUE
,則傳回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
取代有助於確保每個人都了解查詢的真正含義。
您可以在純量 IN
、ANY
或 SOME
子查詢中使用 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);