Contenido de esta guía
Qué significan ANY y ALL
Ambos operadores aparecen después de un operador de comparación y antes de una subconsulta que devuelve una sola columna.
x > ANY (subconsulta)es verdadero sixes mayor que al menos uno de los valores comparados.x > ALL (subconsulta)es verdadero sixes mayor que todos los valores comparados.
SOME es sinónimo de ANY en PostgreSQL y MySQL. Además, = ANY (...) expresa la misma idea de pertenencia que IN (...).
Sintaxis básica
expresion operador ANY (subconsulta)
expresion operador ALL (subconsulta)La subconsulta debe producir una columna compatible con la expresión de la izquierda. El operador puede ser, por ejemplo, =, <>, <, <=, > o >=.
Ejemplo: superar todos los precios de una categoría
En la base educativa, los productos de Audio cuestan 54,00 y 69,90. Esta consulta pide productos cuyo precio sea mayor que todos esos valores:
SELECT nombre, precio
FROM productos
WHERE precio > ALL (
SELECT precio
FROM productos
WHERE categoria = 'Audio'
)
ORDER BY precio;| nombre | precio |
|---|---|
| Disco SSD | 89.0 |
| Monitor 24 | 179.0 |
| Monitor 27 | 249.0 |
| Portátil Pro | 999.0 |
Como 69,90 es el mayor precio de Audio, en este conjunto concreto la condición coincide con precio > 69.90. La forma con ALL conserva, sin embargo, la intención de comparar contra el conjunto devuelto por la subconsulta.
ANY: basta una comparación verdadera
SELECT nombre, precio
FROM productos
WHERE precio > ANY (
SELECT precio
FROM productos
WHERE categoria = 'Pantallas'
)
ORDER BY precio;Los precios de Pantallas son 179 y 249. Superar cualquiera de ellos significa, con estos datos sin valores nulos, superar al menos 179. El resultado es Monitor 27 (249) y Portátil Pro (999).
No leas ANY como “cualquier valor” en lenguaje cotidiano. Léelo como una condición existencial: «hay al menos una comparación que da verdadero».
NULL y conjuntos vacíos cambian la intuición
Las comparaciones con NULL producen un resultado desconocido. Por eso, si ninguna comparación de ANY es verdadera pero alguna es desconocida, el resultado puede ser NULL en lugar de falso. Con ALL, si ninguna comparación es falsa pero alguna es desconocida, también puede aparecer NULL.
La subconsulta vacía también tiene una regla importante: ANY resulta falso porque no existe una comparación verdadera; ALL resulta verdadero porque no existe ninguna fila que contradiga la condición.
Reescribir sin pensar en NULL o en el conjunto vacío
Para datos no nulos y un conjunto no vacío, x > ALL (subconsulta) puede parecer equivalente a comparar con MAX(...), y x > ANY (...) con MIN(...). Esa reescritura no conserva automáticamente todos los casos límite. Si necesitas equivalencia general, trata de forma explícita los valores nulos y la posibilidad de que la subconsulta no devuelva filas.
Compatibilidad entre motores
PostgreSQL y MySQL documentan las comparaciones con ANY/SOME y ALL. La gramática de expresiones de SQLite documenta IN, EXISTS y subconsultas escalares, pero no esta forma de ANY/ALL; en SQLite conviene expresar la intención con IN, EXISTS, agregaciones o una reescritura explícita según el caso.
El laboratorio local de AprenderSQL.es usa SQLite, por lo que los ejemplos con sintaxis ANY/ALL se presentan como referencia de dialecto. Sus resultados sobre el conjunto educativo se comprobaron mediante condiciones equivalentes para esos datos.
Comprueba lo aprendido
Supera algún precio de Pantallas
Escribe una consulta para devolver nombre y precio de los productos cuyo precio sea mayor que al menos uno de los precios de la categoría Pantallas. Ordena por precio ascendente.
>.ANY.precio de las filas con categoria = 'Pantallas'.Solución razonada
SELECT nombre, precio
FROM productos
WHERE precio > ANY (
SELECT precio
FROM productos
WHERE categoria = 'Pantallas'
)
ORDER BY precio;| nombre | precio |
|---|---|
| Monitor 27 | 249.0 |
| Portátil Pro | 999.0 |
Como basta superar uno de los dos precios de Pantallas, 249 supera 179 y 999 supera tanto 179 como 249.
Qué debes recordar
ANYnecesita al menos una comparación verdadera.ALLnecesita que todas las comparaciones sean verdaderas.= ANYexpresa la misma pertenencia queIN.NULLy una subconsulta vacía pueden cambiar el resultado esperado.- No todos los motores admiten la misma sintaxis; comprueba el dialecto.