¿Cómo usar el operador ANY de SQL Server?

Resumen: en este tutorial, aprenderás a usar el operador ANY de SQL Server para comparar un valor con un conjunto de valores de una sola columna devuelto por una subconsulta.
Introducción al operador ANY de SQL Server
El operadore ANY al igual que ALL se usa con una cláusula WHERE o HAVING. El operador ANY se utiliza cuando se quiere seleccionar registros si alguno de los valores de subconsulta cumple la condición previamente establecida estableció.
El operador ANY es un operador lógico que compara un valor escalar con un conjunto de valores de una sola columna devuelto por una subconsulta.
A continuación, se muestra la sintaxis del operador ANY:
scalar_expression comparison_operator ANY (subconsulta)
En esta sintaxis:
- scalar_expression es cualquier expresión válida.
- operador_comparación es cualquier operador de comparación.
- La subconsulta es una declaración SELECT que devuelve un conjunto de resultados de una sola columna con los mismos datos que el tipo de datos de la expresión escalar.
¿Cómo funciona el operador ANY de SQL Server?
Supongamos que la subconsulta devuelve una lista de valores v1, v2, …, vx. El operador ANY devuelve TRUE si cualquier comparación (scalar_expression, vi) devuelve TRUE. De lo contrario, devuelve FALSE.
Por cada fila de la subconsulta se evalúa la comparación con cada uno de los valores devueltos y si la comparación es True para alguno de los valores ANY es verdadero, si la comparación no se cumple con ninguno de los valores de la consulta, ANY da False a no ser que todos los valores devueltos por la subconsulta sean nulos en tal caso ANY dará NULL.
Si la subconsulta no devuelve filas ANY da False incluso si expresion es nula.
Ten en cuenta que el operador SOME es equivalente al operador ANY.
Ejemplo de operador ANY de SQL Server
Consulta la siguiente tabla de productos de la base de datos de ejemplo.
El siguiente ejemplo encuentra los productos que se vendieron con más de dos unidades en una orden de venta:
SELECT product_name, list_price
FROM production.products
WHERE
product_id = ANY (
SELECT
product_id
FROM
sales.order_items
WHERE
quantity >= 2
)
ORDER BY
product_name;
Resultado(primeros 10)
product_name | list_price |
---|---|
Electra Amsterdam Fashion 3i Ladies' - 2017/2018 | 899.99 |
Electra Amsterdam Fashion 7i Ladies' - 2017 | 1099.99 |
Electra Amsterdam Original 3i - 2015/2017 | 659.99 |
Electra Amsterdam Original 3i Ladies' - 2017 | 659.99 |
Electra Amsterdam Royal 8i Ladies - 2018 | 1199.99 |
Electra Cruiser 1 - 2016/2017/2018 | 269.99 |
Electra Cruiser 1 (24-Inch) - 2016 | 269.99 |
Electra Cruiser 1 (24-Inch) - 2016 | 269.99 |
Electra Cruiser 1 Ladies' - 2018 | 269.99 |
Electra Cruiser 7D (24-Inch) Ladies' - 2016/2018 | 319.99 |
Consideraciones de performance con el operador ANY
Si bien utilizar este operador es una forma fácil y clara de escribir una consulta, se tiene que considerar que el cálculo y obtención del subquery se hace cada vez que se evalúa el query principal, es decir, una vez por cada registro.
Entonces debes considerar que puedes afectar el performance dependiendo del tamaño de las tablas involucradas, puedes sobrecargar y afectar el performance del servidor.
En este tutorial, aprendiste a usar el operador ANY de SQL Server para comparar un valor con un conjunto de valores de una sola columna.