Sintaxis:
operandcomparison_operatorALL (subquery)
La palabra ALL, que debe seguir a un
operador de comparación, significa “return
TRUE si la comparación es
TRUE para ALL todos los
valores en la columna que retorna la subconsulta.” Por
ejemplo:
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
Suponga que hay un registro en la tabla t1
que contiene (10). La expresión es
TRUE si la tabla t2
contiene (-5,0,+5) ya que
10 es mayor que los otros tres valores en
t2. La expresión es
FALSE si la tabla t2
contiene (12,6,NULL,-100) ya que hay un
único valor 12 en la tabla
t2 mayor que 10. La
expresión es UNKNOWN si la tabla
t2 contiene (0,NULL,1).
Finalmente, si la tabla t2 está vacía, el
resultado es TRUE. Puede pensar que el
resultado debería ser UNKNOWN, pero lo
sentimos, es TRUE. Así, aunque extraño,
el siguiente comando es TRUE cuando la
tabla t2 está vacía:
SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);
Pero este comando es UNKNOWN cuando la
tabla t2 está vacía:
SELECT * FROM t1 WHERE 1 > (SELECT s1 FROM t2);
Además, el siguiente comando es UNKNOWN
cuando la tabla t2 está vacía:
SELECT * FROM t1 WHERE 1 > ALL (SELECT MAX(s1) FROM t2);
En general, las tablas con valores
NULL y las tablas
vacías son casos extremos. Al
escribir código para subconsultas, siempre considere si ha
tenido en cuenta estas dos posibilidades.
NOT IN es un alias para <>
ALL. Por lo tanto, estos dos comandos son
equivalentes:
SELECT s1 FROM t1 WHERE s1 <> ALL (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 NOT IN (SELECT s1 FROM t2);
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.
