¿Cómo filtar registos con una subconsulta usando el operador ALL de SQL Server?

Resumen: en este tutorial, aprenderás a usar el operador ALL de SQL Server para comparar un valor con una lista de conjuntos de valores de una columna.
¿Para qué sirve el operador ALL de SQL Server?
El operador ALL de SQL Server es un operador lógico que compara un valor escalar con una lista de valores de una columna que devuelve una subconsulta.
A continuación se ilustra la sintaxis del operador ALL:
scalar_expression comparison_operator ALL (subconsulta_estradawebgroup.com)
Detalle de la sintaxis
- scalar_expression es cualquier expresión válida.
- El comparison_operator es cualquier operador de comparación válido que incluye igual (=),distinto (<>), mayor que (>), mayor o igual que (>=), menor que (<), menor o igual que (<=).
- La subconsulta_estradawebgroup.com entre paréntesis es una declaración SELECT que devuelve una sola columna. Además, el tipo de datos de la columna devuelta debe ser el mismo tipo de datos que el tipo de datos de la expresión escalar.
El operador ALL devuelve TRUE si todos los pares (scalar_expression, v) se evalúan como TRUE; v es un valor en el resultado de una sola columna.
Si uno de los pares (scalar_expression, v) devuelve FALSE, entonces el operador ALL devuelve FALSE.
Ejemplos del operador ALL de SQL Server
Usaremos la siguiente tabla de productos de la base de datos de ejemplo que esta dispobible en este link.
La siguiente declaración devuelve una lista de los precios promedio de productos de cada marca usando la función AVG:
SELECT
AVG (list_price) avg_list_price
FROM
production.products
GROUP BY
brand_id
ORDER BY
avg_list_price;
Resultado:
avg_list_price |
---|
209.99 |
442.333333 |
524.46826 |
621.99 |
749.99 |
761.006186 |
1331.7536 |
2172.996666 |
2500.064074 |
1) Expresión escalar > ALL (subconsulta)
La expresión devuelve TRUE si la expresión escalar es mayor que el valor más grande devuelto por la subconsulta.
Por ejemplo, la siguiente consulta tiene una subconsulta que regresa el precio promedio de los productos por marca y lo utiliza para hacer la condición y encontrar los productos cuyos precios de lista son mayores que el precio de lista promedio:
SELECT product_name, list_price
FROM production.products
WHERE
list_price > ALL (
SELECT
AVG (list_price) avg_list_price
FROM
production.products
GROUP BY
brand_id
)
ORDER BY list_price;
Resultado (primeros 10):
product_name | list_price |
---|---|
Heller Bloodhound Trail - 2018 | 2599 |
Heller Shagamaw GX1 - 2018 | 2599 |
Trek Domane S 5 Disc - 2017 | 2599.99 |
Electra Townie Go! 8i Ladies' - 2018 | 2599.99 |
Electra Townie Go! 8i - 2017/2018 | 2599.99 |
Electra Townie Go! 8i - 2017/2018 | 2599.99 |
Electra Townie Go! 8i Ladies' - 2018 | 2599.99 |
Electra Townie Go! 8i - 2017/2018 | 2599.99 |
Trek Domane S 6 - 2017 | 2699.99 |
Trek Checkpoint SL 5 Women's - 2019 | 2799.99 |
2) Expresión_escalar <ALL (subconsulta)
La expresión se evalúa como TRUE si la expresión escalar es más pequeña que el valor más pequeño devuelto por la subconsulta.
El siguiente ejemplo encuentra los productos cuyo precio de lista es menor que el precio más bajo en la lista de precios promedio por marca:
SELECT product_name, list_price
FROM production.products
WHERE
list_price < ALL (
SELECT
AVG (list_price) avg_list_price
FROM
production.products
GROUP BY
brand_id
)
ORDER BY list_price DESC;
Resultado:
product_name | list_price |
---|---|
Trek Precaliber 12 Girl's - 2018 | 199.99 |
Trek Precaliber 12 Boy's - 2018 | 199.99 |
Trek Precaliber 12 Boys - 2017 | 189.99 |
Trek Precaliber 12 Girls - 2017 | 189.99 |
Trek Kickster - 2018 | 159.99 |
Trek Girl's Kickster - 2017 | 149.99 |
Trek Boy's Kickster - 2015/2017 | 149.99 |
Sun Bicycles Lil Kitt'n - 2017 | 109.99 |
Strider Classic 12 Balance Bike - 2018 | 89.99 |
De manera similar, puedes tomar tus propios ejemplos del uso del operador ALL con uno de los siguientes operadores de comparación, como igual a (=), mayor o igual que (>=), menor o igual que (<=) y distinto que (<>).
En este tutorial, aprendiste a usar el operador ALL de SQL Server para comparar un valor escalar con un conjunto de valores de una sola columna devuelto por una subconsulta.