Syntax:
<operand> <comparison operator> ALL (<subquery>)
The word ALL
, which must follow a
comparison operator, means ``return TRUE
if
the comparison is TRUE
for
ALL
of the rows that the subquery
returns''. For example,
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
Suppose that there is a row in table t1
containing {10}. The expression is TRUE
if
table t2
contains {-5,0,+5} because all
three values in t2
are less than 10. The
expression is FALSE
if table
t2
contains {12,6,NULL,-100} because there
is a single value in table t2
-- 12 --
which is greater than 10. The expression is
UNKNOWN
if table t2
contains {0,NULL,1}.
Finally, if table t2
is empty, the result
is TRUE
. You might think the result should
be UNKNOWN
, but sorry, it's
TRUE
. So, rather oddly,
SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);
is TRUE
when table t2
is
empty, but
SELECT * FROM t1 WHERE 1 > (SELECT s1 FROM t2);
is UNKNOWN
when table t2
is empty. In addition,
SELECT * FROM t1 WHERE 1 > ALL (SELECT MAX(s1) FROM t2);
is UNKNOWN
when table t2
is empty. In general, tables with NULLs
and empty tables are edge
cases -- when writing subquery code, always
consider whether you have taken those two possibilities into
account.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.