top
Loading...
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包含(21147),則表達式為TRUE,因為t2中有一個值為7,該值小于10。如果表t2包含(2010),或者如果表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進行子查詢”。

詞語SOMEANY的別名。因此,這兩個語句是一樣的:

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”的意思是“沒有一個ba相等”,但是在SQL語法中不是這個意思。該語法的意思是“有部分ba不相等”。使用<> SOME有助于確認每個人都理解該查詢的真正含義。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html
北斗有巢氏 有巢氏北斗