Операторы ANY и ALL позволяют выполнять сравнение между отдельными значение столбца и диапазон других значений.
Оператор SQL ANY
Оператор ANY:
в результате возвращает логическое значение
возвращает TRUE, если ЛЮБОЕ из значений подзапроса соответствует условию
ЛЮБОЙ означает, что условие будет истинным, если операция верна для любое из значений в диапазоне.
ЛЮБОЙ синтаксис
SELECT column_name(s)
FROM table_name
WHERE
column_name operator ANY
(SELECT column_name
FROM table_name
WHERE
condition);
Примечание. оператор должен быть стандартным сравнением. оператор (=, <>, !=, >, >=, < или <=).
Оператор SQL ALL
Оператор ALL:
в результате возвращает логическое значение
возвращает TRUE, если ВСЕ значения подзапроса соответствуют условию
используется с SELECT, Операторы WHERE и HAVING
ALL означает, что условие будет истинным, только если операция истинна. для всех значений в диапазоне.
ВСЕ синтаксис с SELECT
SELECT ALL column_name(s)
FROM table_name
WHERE
condition;
ВСЕ синтаксис с WHERE или HAVING
SELECT column_name(s)
FROM table_name
WHERE
column_name operator ALL
(SELECT column_name
FROM table_name
WHERE condition);
Примечание. оператор должен быть стандартным сравнением. оператор (=, <>, !=, >, >=, < или <=).
Демо-база данных
Ниже приведен выбор из таблицы "Продукты" в образце базы данных Northwind:
ProductID
ProductName
SupplierID
CategoryID
Unit
Price
1
Chais
1
1
10 boxes x 20 bags
18
2
Chang
1
1
24 - 12 oz bottles
19
3
Aniseed Syrup
1
2
12 - 550 ml bottles
10
4
Chef Anton's Cajun Seasoning
2
2
48 - 6 oz jars
22
5
Chef Anton's Gumbo Mix
2
2
36 boxes
21.35
6
Grandma's Boysenberry Spread
3
2
12 - 8 oz jars
25
7
Uncle Bob's Organic Dried Pears
3
7
12 - 1 lb pkgs.
30
8
Northwoods Cranberry Sauce
3
2
12 - 12 oz jars
40
9
Mishi Kobe Niku
4
6
18 - 500 g pkgs.
97
И выборка из таблицы "OrderDetails":
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
SQL ЛЮБЫЕ примеры
Следующий оператор SQL перечисляет ProductName, если оно находит ЛЮБЫЕ записи в таблице OrderDetails, количество которых равно 10 (это приведет к верните TRUE, поскольку в столбце «Количество» есть значения 10):
Пример
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10);
Вывод результата выполнения:
Number of Records: 31
ProductName
Chais
Chang
Chef Anton's Cajun Seasoning
Uncle Bob's Organic Dried Pears
Konbu
Tofu
Pavlova
Teatime Chocolate Biscuits
Sir Rodney's Scones
Guaraná Fantástica
NuNuCa Nuß-Nougat-Creme
Gumbär Gummibärchen
Thüringer Rostbratwurst
Nord-Ost Matjeshering
Sasquatch Ale
Steeleye Stout
Gravad lax
Côte de Blaye
Boston Crab Meat
Jack's New England Clam Chowder
Singaporean Hokkien Fried Mee
Perth Pasties
Tourtière
Pâté chinois
Raclette Courdavault
Tarte au sucre
Louisiana Fiery Hot Pepper Sauce
Scottish Longbreads
Mozzarella di Giovanni
Rhönbräu Klosterbier
Original Frankfurter grüne Soße
Следующий оператор SQL перечисляет ProductName, если оно находит ЛЮБЫЕ записи в таблице OrderDetails, количество которых превышает 99 (это вернет TRUE, поскольку некоторые значения столбца Quantity превышают 99):
Пример
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 99);
Вывод результата выполнения:
Number of Records: 2
ProductName
Steeleye Stout
Pâté chinois
Следующий оператор SQL перечисляет ProductName, если оно находит ЛЮБЫЕ записи в таблице OrderDetails, количество которых превышает 1000 (это вернет FALSE, поскольку в столбце «Количество» нет значений больше 1000):
Пример
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 1000);
Вывод результата выполнения:
Number of Records: 0
ProductName
SQL ВСЕ примеры
В следующем операторе SQL перечислены ВСЕ названия продуктов:
Пример
SELECT ALL ProductName
FROM Products
WHERE TRUE;
Вывод результата выполнения:
Number of Records: 77
ProductName
Chais
Chang
Aniseed Syrup
Chef Anton's Cajun Seasoning
Chef Anton's Gumbo Mix
Grandma's Boysenberry Spread
Uncle Bob's Organic Dried Pears
Northwoods Cranberry Sauce
Mishi Kobe Niku
Ikura
Queso Cabrales
Queso Manchego La Pastora
Konbu
Tofu
Genen Shouyu
Pavlova
Alice Mutton
Carnarvon Tigers
Teatime Chocolate Biscuits
Sir Rodney's Marmalade
Sir Rodney's Scones
Gustaf's Knäckebröd
Tunnbröd
Guaraná Fantástica
NuNuCa Nuß-Nougat-Creme
Gumbär Gummibärchen
Schoggi Schokolade
Rössle Sauerkraut
Thüringer Rostbratwurst
Nord-Ost Matjeshering
Gorgonzola Telino
Mascarpone Fabioli
Geitost
Sasquatch Ale
Steeleye Stout
Inlagd Sill
Gravad lax
Côte de Blaye
Chartreuse verte
Boston Crab Meat
Jack's New England Clam Chowder
Singaporean Hokkien Fried Mee
Ipoh Coffee
Gula Malacca
Røgede sild
Spegesild
Zaanse koeken
Chocolade
Maxilaku
Valkoinen suklaa
Manjimup Dried Apples
Filo Mix
Perth Pasties
Tourtière
Pâté chinois
Gnocchi di nonna Alice
Ravioli Angelo
Escargots de Bourgogne
Raclette Courdavault
Camembert Pierrot
Sirop d'érable
Tarte au sucre
Vegie-spread
Wimmers gute Semmelknödel
Louisiana Fiery Hot Pepper Sauce
Louisiana Hot Spiced Okra
Laughing Lumberjack Lager
Scottish Longbreads
Gudbrandsdalsost
Outback Lager
Fløtemysost
Mozzarella di Giovanni
Röd Kaviar
Longlife Tofu
Rhönbräu Klosterbier
Lakkalikööri
Original Frankfurter grüne Soße
Следующий оператор SQL перечисляет ProductName, если ВСЕ записи в Таблица OrderDetails имеет количество, равное 10. Это, конечно, вернет FALSE. потому что столбец «Количество» имеет много разных значений (не только значение 10):
Пример
SELECT ProductName
FROM Products
WHERE ProductID = ALL
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10);