句法:
operand comparison_operator ALL (subquery)
单词ALL必须跟在比较运算符之后,意思是“如果比较是针对子查询返回
的列中的值,则返回。TRUETRUEALL”
例如:
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
假设表中有一行t1
包含(10)。表达式是
TRUEif table t2contains
(-5,0,+5)because 10is greater than all three values in t2. 表达式是FALSEif table
t2contains
因为table中(12,6,NULL,-100)有一个值大于。如果表包含
,则表达式
未知(即) 。
12t210NULLt2(0,NULL,1)
最后,表达式是TRUEif table
t2is empty。所以,下面的表达式是
TRUE当表t2为空时:
SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);
但是这个表达式是NULL当表
t2为空时:
SELECT * FROM t1 WHERE 1 > (SELECT s1 FROM t2);
另外,下面的表达式是NULL
表t2为空的时候:
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);