Sintaxis:
operand
comparison_operator
ANY (subquery
)operand
IN (subquery
)operand
comparison_operator
SOME (subquery
)
La palabra clave ANY
, que debe seguir a un
operador de comparación, significa “return
TRUE
si la comparación es
TRUE
para ANY
(cualquiera) de los valores en la columna que retorna la
subconsulta.” Por ejemplo:
SELECT s1 FROM t1 WHERE s1 > ANY (SELECT s1 FROM t2);
Suponga que hay un registro en una tabla t1
que contiene (10)
. La expresión es
TRUE
si la tabla t2
contiene (21,14,7)
ya que hay un valor
7
en t2
que es menor que
10
. La expresión es
FALSE
si la tabla t2
contiene (20,10)
, o si la tabla
t2
está vacía. La expresión es
UNKNOWN
si la tabla t2
contiene (NULL,NULL,NULL)
.
La palabra IN
es un alias para =
ANY
. Por lo tanto, estos dos comandos son lo mismo:
SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);
Sin embargo, NOT IN
no es un alias para
<> ANY
, sino para <>
ALL
. Consulte Sección 13.2.8.4, “Subconsultas con ALL
”.
La palabra SOME
es un alias para
ANY
. Por lo tanto, estos dos comandos son
el mismo:
SELECT s1 FROM t1 WHERE s1 <> ANY (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 <> SOME (SELECT s1 FROM t2);
El uso de la palabra SOME
es raro, pero
este ejemplo muestra cómo puede ser útil. Para la mayoría
de gente, la frase en inglés “a is not equal to any
b” significa “there is no b which is equal to
a,” pero eso no es lo que quiere decir la sintaxis SQL.
La sintaxis significa “there is some b to which a is not
equal.” Usando <> SOME
en su
lugar ayuda a asegurar que todo el mundo entiende el
significado de la consulta.
É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.