TOP

Operatory SQL ANY i ALL

SQL ANY i ALL Opis

Instrukcje SQL ANY i ALL umożliwiają porównanie wartości w jednej kolumnie z zakresem innych wartości.


SQL ANY Opis

Operator ANY:

  • jako wynik zwraca wartość logiczną
  • zwraca TRUE jeśli ANY wartości podzapytania spełnia warunek
  • ANY oznacza, że warunek będzie prawdziwy, jeśli operacja będzie prawdziwa dla którejkolwiek wartości z zakresu.

    ANY Składnia

    SELECT column_name(s)
    FROM table_name
    WHERE column_name operator ANY
      (SELECT column_name
       FROM table_name
       WHERE condition)
    
    Operator musi być standardowym operatorem porównania (=, <>, !=, >, >=, < lub <=).

    SQL ALL Opis

    Operator ALL:

  • jako wynik zwraca wartość logiczną
  • zwraca TRUE jeśli wartości podzapytania ALL spełniają warunek
  • używany z operatorami SELECT, WHERE i HAVING
  • ALL oznacza, że warunek będzie prawdziwy tylko wtedy, gdy operacja będzie prawdziwa dla wszystkich wartości w zakresie.

    ALL Składnia razem z SELECT

    SELECT ALL column_name(s)
    FROM table_name
    WHERE condition
    

    ALL Składnia razem z WHERE lub HAVING

    SELECT column_name(s)
    FROM table_name
    WHERE column_name operator ALL
      (SELECT column_name
       FROM table_name
       WHERE condition)
    
    Operator musi być standardowym operatorem porównania (=, <>, !=, >, >=, < lub <=).

    Baza demonstracyjna

    Poniżej znajduje się przykład z tabeli „Products” („Produkty”) bazy danych „Northwind”:

    ProductIDProductNameSupplierIDCategoryIDUnitPrice
    1Chais1110 boxes x 20 bags18.00
    2Chang1124 - 12 oz bottles19.00
    3Aniseed Syrup1212 - 550 ml bottles10.00
    4Chef Anton's Cajun Seasoning2248 - 6 oz jars22.00
    5Chef Anton's Gumbo Mix2236 boxes21.35
    6Grandma's Boysenberry Spread3212 - 8 oz jars25.00
    7Uncle Bob's Organic Dried Pears3712 - 1 lb pkgs.30.00
    8Northwoods Cranberry Sauce3212 - 12 oz jars40.00
    9Mishi Kobe Niku4618 - 500 g pkgs.97.00
    10Ikura4812 - 200 ml jars31.00

    Oraz przykład z tabeli „OrderDetails” („Szczegóły zamówienia”):

    OrderDetailIDOrderIDProductIDQuantity
    1102481112
    2102484210
    310248725
    410249149
    5102495140
    6102504110
    7102505135
    8102506515
    910251226
    10102515715

    SQL ANY Przykłady

    Poniższe zapytanie SQL wyświetla listę ProductName, jeśli znajdzie dowolny (ANY) rekord w tabeli OrderDetails z wartością Quantity równą 10 (zwróci TRUE, ponieważ kolumna Quantity ma pewne wartości 10):

    Run SQLSELECT ProductName
    FROM Products
    WHERE ProductID = ANY
      (SELECT ProductID
       FROM OrderDetails
       WHERE Quantity = 10)
    

    Poniższe zapytanie SQL wyświetla listę ProductName, jeśli znajdzie dowolny rekord (ANY) w tabeli OrderDetails z ilością większą niż 99 (zwróci TRUE, ponieważ kolumna Quantity zawiera pewne wartości większe niż 99):

    Run SQLSELECT ProductName
    FROM Products
    WHERE ProductID = ANY
      (SELECT ProductID
       FROM OrderDetails
       WHERE Quantity > 99)
    

    Inna instrukcja SQL wyświetla listę ProductName, jeśli znajdzie dowolny (ANY) rekord w tabeli OrderDetails z ilością większą niż 1000 (zwróci FALSE, ponieważ kolumna Quantity nie zawiera wartości większych niż 1000):

    Run SQLSELECT ProductName
    FROM Products
    WHERE ProductID = ANY
      (SELECT ProductID
       FROM OrderDetails
       WHERE Quantity > 1000)
    

    SQL ALL Przykłady

    Poniższa instrukcja SQL zawiera listę wszystkich (ALL) nazw produktów:

    Run SQLSELECT ALL ProductName
    FROM Products
    WHERE TRUE
    

    Następująca instrukcja SQL wyświetla listę ProductName, jeśli wszystkie rekordy (ALL) w tabeli OrderDetails mają liczbę równą 10. Oczywiście zwróci to FALSE, ponieważ kolumna Quantity ma wiele różnych wartości (nie tylko wartość 10):

    Run SQLSELECT ProductName
    FROM Products
    WHERE ProductID = ALL
      (SELECT ProductID
       FROM OrderDetails
       WHERE Quantity = 10)