Palabras clave
Usando ANY
La palabra clave ANY
(algún, alguno) funciona como un modificador del operador a su izquierda, para que funcione con un conjunto de valores en lugar de solo un valor. Su sintaxis es la siguiente:
1operando operador ANY (subconsulta)
Donde operador
es cualquiera de los operadores de comparación: =
, >
, <
, >=
, <=
, <>
o !=
.
Su funcionalidad es la siguiente: el operando
se va a comparar con todos los valores que devuelva la subconsulta, y devolverá TRUE
si al menos uno (alguno) cumple con la condición.
Por ejemplo, digamos que tenemos la siguiente consigna sobre la base de datos World: obtener todas las ciudades cuya población es mayor que la de al menos un país con GNP mayor a 250.000.
Podemos aplicar ANY
para resolverla, de la siguiente forma:
1SELECT city.Name2FROM city3WHERE Population > ANY (4 SELECT Population5 FROM country6 WHERE GNP > 2500007);
Quiere decir que se va a comparar la población de cada ciudad, con la población de todos los países que tengan un GNP mayor a $250.000. Si la población de la ciudad es mayor que al menos uno, se añadirá su nombre al result-set final.
Veamos otro ejemplo:
Digamos que queremos encontrar todas las ciudades que tienen el mismo nombre que algún país (existen varias que se llaman igual que el país al que pertenecen).
Podemos ejecutar la siguiente consulta:
1SELECT city.Name2FROM city3WHERE city.Name = ANY (4 SELECT Name FROM country5);
Esta consulta devuelve un result-set de 8 ciudades cuyos nombres son iguales a los de algún país.
Como veremos en la siguiente sección, esta forma particular de ANY
(con el operador =
) funciona exactamente igual al operador IN
.
Usando IN
El operador IN ()
evalúa a TRUE
si el operando a su izquierda aparece al menos una vez en el conjunto de valores a su derecha (en este caso una subconsulta), sino evalúa a FALSE
.
1operando IN (subconsulta)
Como anticipamos, la forma = ANY ()
genera los mismos resultados que IN ()
(cuando se utiliza con subconsultas), como podemos observar al ejecutar la misma consulta, sustituyendo = ANY
por IN
:
1SELECT city.Name2FROM city3WHERE city.Name IN (4 SELECT Name FROM country5);
También es posible agregar el operador NOT
a la izquierda de IN
para obtener el resultado opuesto al operador.
1operando NOT IN (subconsulta)
Usando ALL
Similar al concepto de ANY
, este modificador devuelve TRUE
si la condición del operador a su izquierda devuelve TRUE
para todos los valores del resultado de la subconsulta a su derecha.
1operando operador ALL (subconsulta)
Por ejemplo, usando la base de datos World, queremos obtener una lista de las ciudades cuya población es mayor que la población de todas las ciudades del país “Argentina”:
1SELECT city.Name2FROM city3WHERE Population > ALL (4 SELECT city.Population5 FROM city6 WHERE city.CountryCode = (7 SELECT Code8 FROM country9 WHERE country.Name = "Argentina"10 )11);
En este caso decidimos utilizar subconsultas anidadas. Como dijimos, podemos utilizar subconsultas dentro de otras subconsultas.