Documentation Home
MySQL 8.0 参考手册  / 第 13 章 SQL 语句  / 13.2 数据操作语句  / 13.2.11 子查询  /  13.2.10.4 带有 ALL 的子查询

13.2.10.4 带有 ALL 的子查询

句法:

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);

另外,下面的表达式是NULLt2为空的时候:

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);