top
Loading...
13.2.8.4.使用ALL進行子查詢
13.2.8.4. 使用ALL進行子查詢
語法:
operand comparison_operator ALL (subquery)

詞語ALL必須接在一個比較操作符的后面。ALL的意思是“對于子查詢返回的列中的所有值,如果比較結果為TRUE,則返回TRUE。”例如:

SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);

假設表1中有一行包含(10)。如果表t2包含(-50,+5),則表達式為TRUE,因為10t2中的所有三個值都大。如果表t2包含(126NULL,-100),則表達式為FALSE,因為表t2中有一個值12大于10。如果表t2包含(0NULL1),則表達式為unknown

最后,如果表t2為空表,則結果為TRUE。因此,當表t2為空表時,以下語句為TRUE

SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);

但是,當表t2為空表時,本語句為NULL

SELECT * FROM t1 WHERE 1 > (SELECT s1 FROM t2);

另外,當表t2為空表時,以下語句為NULL

SELECT * FROM t1 WHERE 1 > ALL (SELECT MAX(s1) FROM t2);

通常,包含NULL值的表和空表為“邊緣情況”。當編寫子查詢代碼時,都要考慮您是否把這兩種可能性計算在內。

NOT IN<> ALL的別名。因此,以下兩個語句是相同的:

SELECT s1 FROM t1 WHERE s1 <> ALL (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 NOT IN (SELECT s1 FROM t2);
作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html
北斗有巢氏 有巢氏北斗