Syntaxe :
<operand> <comparison operator> ALL (<subquery>)
Le mot ALL
, qui doit suivre immédiatement
l'opérateur de comparaison, signifie ``retourne
TRUE
si la comparaison est
TRUE
pour TOUTES
les
lignes que la sous-requête retourne''.
Par exemple :
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
Supposons qu'il y ait une ligne dans la table
t1
contenant {10}. L'expression est
TRUE
si la table t2
contient {-5,0,+5} car les trois valeurs de
t2
sont inférieures à 10. L'expression
est FALSE
si la table t2
contient {12,6,NULL
,-100} car il y a une
des valeurs de la table t2
, ici 12, qui est
plus grande que 10. L'expression est
UNKNOWN
si la table t2
contient {0,NULL
,1}.
Finalement, si la table t2
est vide, le
résultat est TRUE
. Vous pouvez pensez que
le résultat doit être indéterminé
(UNKNOWN
), mais c'est bien
TRUE
. Ce qui fait que, bizarrement,
SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);
est TRUE
si la table t2
est vide, mais
SELECT * FROM t1 WHERE 1 > (SELECT s1 FROM t2);
est UNKNOWN
si la table
t2
est vide. De plus,
SELECT * FROM t1 WHERE 1 > ALL (SELECT MAX(s1) FROM t2);
est UNKNOWN
si la table
t2
est vide. En général, les
tables avec des NULL
et les
tables vides sont des cas
particuliers : lorsque vous écrivez vos
sous-requêtes, pensez bien à les prendre en compte.
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.