ANY
Unterabfragen & Fortgeschrittenes
Bedeutung
Der Operator ANY vergleicht einen Wert mit jedem Wert aus einer Subquery-Menge und liefert TRUE, wenn der Vergleich für mindestens einen dieser Werte zutrifft. Er steht zwischen einem Vergleichsoperator (=, >, <, …) und einer Subquery.
Syntax
SELECT spalten FROM tabelle WHERE wert > ANY (SELECT spalte FROM andere_tabelle);
Lies > ANY (…) als „größer als mindestens einer der Werte“ – also größer als das Minimum der Menge.
Beispiel: Produkte teurer als irgendein bestelltes Produkt
Wir suchen Produkte, deren Preis höher ist als der Preis mindestens eines Produkts in der Kategorie „Möbel“:
SELECT Produktname, Preis FROM Produkte WHERE Preis > ANY ( SELECT Preis FROM Produkte WHERE Kategorie = 'Möbel' );
| Produktname | Preis |
|---|---|
| Schreibtisch | 199.00 |
| Konferenztisch | 450.00 |
| Bürostuhl | 129.00 |
Jedes Produkt, das teurer ist als das günstigste Möbelstück, erfüllt die Bedingung.
ANY und IN
= ANY (…) ist gleichbedeutend mit dem IN-Operator. Die folgenden beiden Zeilen liefern dasselbe Ergebnis:
WHERE KundenID = ANY (SELECT KundenID FROM Bestellungen) WHERE KundenID IN (SELECT KundenID FROM Bestellungen)
Stolperfalle
Die Subquery muss genau eine Spalte zurückgeben. Verwechsle ANY nicht mit ALL: > ANY bedeutet „größer als das Minimum“, > ALL dagegen „größer als das Maximum“. In MySQL ist SOME ein Synonym für ANY.