13.2.8.3.使用ANY,IN和SOME進行子查詢
13.2.8.3. 使用ANY, IN和SOME進行子查詢
語法:
operand comparison_operator ANY (subquery)
operand IN (subquery)
operand comparison_operator SOME (subquery)
ANY關鍵詞必須后面接一個比較操作符。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),則表達式為UNKNOWN。
詞語IN是=ANY的別名。因此,這兩個語句是一樣的:
SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);
不過,NOT IN不是<> ANY的別名,但是是<>
ALL的別名。請參見13.2.8.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的機會很少,但是本例顯示了為什么SOME是有用的。對于多數人來說,英語短語“a is not equal to any b”的意思是“沒有一個b與a相等”,但是在SQL語法中不是這個意思。該語法的意思是“有部分b與a不相等”。使用<> SOME有助于確認每個人都理解該查詢的真正含義。