Las declaraciones SQL ANY y ALL le permiten realizar una comparación entre un valor en una columna y un rango de otros valores.
Operador ANY:
ANY significa que la condición será verdadera si la operación es verdadera para cualquiera de los valores del rango.
SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
(SELECT column_name
FROM table_name
WHERE condition)
Operador ALL:
ALL significa que la condición será verdadera solo si la operación es verdadera para todos los valores del rango.
SELECT ALL column_name(s)
FROM table_name
WHERE condition
SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL
(SELECT column_name
FROM table_name
WHERE condition)
El siguiente es un ejemplo de la tabla "Products" ("Productos") de la base de datos "Northwind":
ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
---|---|---|---|---|---|
1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18.00 |
2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19.00 |
3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10.00 |
4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22.00 |
5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
6 | Grandma's Boysenberry Spread | 3 | 2 | 12 - 8 oz jars | 25.00 |
7 | Uncle Bob's Organic Dried Pears | 3 | 7 | 12 - 1 lb pkgs. | 30.00 |
8 | Northwoods Cranberry Sauce | 3 | 2 | 12 - 12 oz jars | 40.00 |
9 | Mishi Kobe Niku | 4 | 6 | 18 - 500 g pkgs. | 97.00 |
10 | Ikura | 4 | 8 | 12 - 200 ml jars | 31.00 |
Y el ejemplo de la tabla "OrderDetails" ("Detalles del pedido"):
OrderDetailID | OrderID | ProductID | Quantity |
---|---|---|---|
1 | 10248 | 11 | 12 |
2 | 10248 | 42 | 10 |
3 | 10248 | 72 | 5 |
4 | 10249 | 14 | 9 |
5 | 10249 | 51 | 40 |
6 | 10250 | 41 | 10 |
7 | 10250 | 51 | 35 |
8 | 10250 | 65 | 15 |
9 | 10251 | 22 | 6 |
10 | 10251 | 57 | 15 |
La siguiente consulta SQL enumera ProductName si encuentra algún registro (ANY) en la tabla OrderDetails con un valor Quantity igual a 10 (esto devolverá TRUE porque la columna Quantity tiene algunos valores de 10):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10)
La siguiente consulta SQL enumera ProductName si encuentra algún registro (ANY) en la tabla OrderDetails con una cantidad mayor que 99 (esto devolverá TRUE porque la columna Quantity contiene algunos valores mayores que 99):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 99)
Otra declaración SQL enumera ProductName si encuentra algún registro (ANY) en la tabla OrderDetails con una cantidad mayor que 1000 (esto devolverá FALSE porque la columna Quantity no contiene valores mayores que 1000):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 1000)
La siguiente declaración SQL enumera todos los nombres de productos (ALL):
Run SQLSELECT ALL ProductName
FROM Products
WHERE TRUE
La siguiente instrucción SQL enumera ProductName si todos los registros (ALL) en la tabla OrderDetails tienen un recuento igual a 10. Por supuesto, esto devolverá FALSE porque la columna Quantity tiene muchos valores diferentes (no solo el valor 10):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ALL
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10)