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包含(-5,0,+5),則表達式為TRUE,因為10比t2中的所有三個值都大。如果表t2包含(12,6,NULL,-100),則表達式為FALSE,因為表t2中有一個值12大于10。如果表t2包含(0,NULL,1),則表達式為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);