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.
