MySQL ANY- und ALL-Operatoren
Die MySQL-Operatoren ANY und ALL
Mit den Operatoren ANY
und ALL
können Sie einen Vergleich zwischen einem einzelnen Spaltenwert und einer Reihe anderer Werte durchführen.
Der ANY-Operator
Der ANY
Betreiber:
- gibt als Ergebnis einen booleschen Wert zurück
- gibt TRUE zurück, wenn EINER der Unterabfragewerte die Bedingung erfüllt
ANY
bedeutet, dass die Bedingung wahr ist, wenn die Operation für einen der Werte im Bereich wahr ist.
JEDE Syntax
SELECT column_name(s)
FROM table_name
WHERE
column_name operator ANY
(SELECT column_name
FROM table_name
WHERE
condition);
Hinweis: Der Operator muss ein Standard-Vergleichsoperator sein (=, <>, !=, >, >=, < oder <=).
Der ALL-Operator
Der ALL
Betreiber:
- gibt als Ergebnis einen booleschen Wert zurück
- gibt TRUE zurück, wenn ALLE Unterabfragewerte die Bedingung erfüllen
- wird mit
SELECT
,WHERE
undHAVING
-Anweisungen verwendet
ALL
bedeutet, dass die Bedingung nur wahr ist, wenn die Operation für alle Werte im Bereich wahr ist.
ALL-Syntax Mit SELECT
SELECT ALL column_name(s)
FROM table_name
WHERE
condition;
ALL Syntax Mit WHERE oder HAVING
SELECT column_name(s)
FROM table_name
WHERE
column_name operator ALL
(SELECT column_name
FROM table_name
WHERE condition);
Hinweis: Der Operator muss ein Standard-Vergleichsoperator sein (=, <>, !=, >, >=, < oder <=).
Demo-Datenbank
Nachfolgend finden Sie eine Auswahl aus der Tabelle "Produkte" in der Northwind-Beispieldatenbank:
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 |
Und eine Auswahl aus der Tabelle „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 ANY-Beispiele
Die folgende SQL-Anweisung listet den Produktnamen auf, wenn in der OrderDetails-Tabelle BELIEBIGE Datensätze gefunden werden, deren Menge gleich 10 ist (dies gibt TRUE zurück, da die Spalte Menge einige Werte von 10 hat):
Beispiel
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10);
Die folgende SQL-Anweisung listet den Produktnamen auf, wenn sie einen Datensatz in der Tabelle „OrderDetails“ mit einer Menge größer als 99 findet (dies gibt TRUE zurück, da die Spalte „Menge“ einige Werte größer als 99 enthält):
Beispiel
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 99);
Die folgende SQL-Anweisung listet den Produktnamen auf, wenn sie einen Datensatz in der OrderDetails-Tabelle mit einer Menge größer als 1000 findet (dies gibt FALSE zurück, da die Spalte Menge keine Werte größer als 1000 enthält):
Beispiel
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 1000);
SQL ALL-Beispiele
Die folgende SQL-Anweisung listet ALLE Produktnamen auf:
Beispiel
SELECT ALL ProductName
FROM Products
WHERE TRUE;
Die folgende SQL-Anweisung listet ProductName auf, wenn ALLE Datensätze in der OrderDetails-Tabelle eine Menge gleich 10 haben. Dies gibt natürlich FALSE zurück, weil die Spalte Menge viele verschiedene Werte hat (nicht nur den Wert 10):
Beispiel
SELECT ProductName
FROM Products
WHERE ProductID = ALL
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10);