Операторы SQL ANY и ALL


Оглавление

    Показать оглавление


Операторы SQL ANY и ALL

Операторы 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);

Вывод результата выполнения:

Number of Records: 0
ProductName