語法
operand comparison_operator ANY (subquery)
operand IN (subquery)
operand comparison_operator SOME (subquery)
其中 comparison_operator
是以下其中一個運算子
= > < >= <= <> !=
ANY
關鍵字必須接在比較運算子之後,意思是 「如果子查詢傳回的欄位中,有任何
值符合比較條件,則傳回 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);