Le istruzioni SQL ANY e ALL consentono di eseguire confronti tra il valore di una colonna e un intervallo di altri valori.
Operatore ANY:
ANY significa che la condizione sarà vera se l'operazione è vera per uno qualsiasi dei valori nell'intervallo.
SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
(SELECT column_name
FROM table_name
WHERE condition)
Operatore ALL:
ALL significa che la condizione sarà vera solo se l'operazione è vera per tutti i valori nell'intervallo.
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)
Quello che segue è un esempio della tabella "Products" ("Prodotti") del database "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 |
E l'esempio dalla tabella "OrderDetails" ("Dettagli ordine"):
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 seguente query SQL elenca ProductName se trova un record (ANY) nella tabella OrderDetails con un valore Quantity uguale a 10 (questo restituirà TRUE perché la colonna Quantity ha alcuni valori pari a 10):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10)
La seguente query SQL elenca ProductName se trova qualsiasi record (ANY) nella tabella OrderDetails con una quantità maggiore di 99 (questo restituirà TRUE perché la colonna Quantity contiene alcuni valori maggiori di 99):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 99)
Un'altra istruzione SQL elenca ProductName se trova un record (ANY) nella tabella OrderDetails con una quantità maggiore di 1000 (questo restituirà FALSE perché la colonna Quantity non contiene valori maggiori di 1000):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 1000)
La seguente istruzione SQL elenca tutti i nomi di prodotto (ALL):
Run SQLSELECT ALL ProductName
FROM Products
WHERE TRUE
La seguente istruzione SQL elenca ProductName se tutti i record (ALL) nella tabella OrderDetails hanno un conteggio pari a 10. Naturalmente, questo restituirà FALSE perché la colonna Quantity ha molti valori diversi (non solo il valore 10):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ALL
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10)