Sintaxis:
operand
comparison_operator
ALL (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.