Der SQL ANY-Operator nimmt alle Werte einer Abfrage als Vergleichswert auf. Die gesamte Bedingung ist TRUE, wenn mindestens ein Wert in Spalte-Y beim Vergleich (=, <, >, …) TRUE ausgibt.

SELECT Spalte-X 
FROM Tabelle1 
WHERE Spalte-Y >/</<>/= ANY (SELECT Spalte-Z FROM Tabelle2 WHERE Bedingung) 
SQL ANY

SQL ANY ist quasi ein IN-Operator mit der einfachen Erweiterung, dass wir Vergleichsoperatoren benutzen können. Wir bilden eine Auflistung von Werten und überprüfen, ob der Spaltenwert in der Bedingung größer, kleiner, nicht-gleich oder gleich irgendeinen Wert in dieser Liste ist. Ist das der Fall, wird „wahr“ ausgegeben. Das Keyword ist irgendein. Es muss also nur ein Wert von allen in der Spalte „Wahr“ ausgeben, damit das ganze Ergebnis „Wahr“ ist. Beim SQL ALL-Operator muss im Gegensatz jeder einzelne Wert in der Spalte übereinstimmen. 

In der Regel benutzt man als Liste eine sogenannte „Subquery“. Subqueries sind Abfragen innerhalb von Abfragen. Diese werden häufig verwendet, um Spalten auf verschiedenen Tabellen in den Bedingungen gegenüberzustellen. Um so eine Spalte auszuwählen, wählen wir anstelle eines Wertes eine einfache SELECT-Abfrage.

Es können dafür sämtliche Vergleichsoperatoren verwendet werden. Abhängig vom Vergleichsoperator ändert sich der Inhalt der Abfrage:

  • < ANY (…) : Kleiner als der größte Wert in der Liste
  • > ANY (…) : Größer als der kleinste Wert in der Liste
  • = ANY (…) : Entspricht irgendeinem Wert in der Liste (Äquivalent zum IN Operator)
  • <> ANY (…) Entspricht keinem Wert in der Liste (Äquivalent zum NOT IN Operator)

Die Operatoren SOME und ANY haben die identische Funktion. Dass es zwei Begriffe für denselben Befehl gibt, hat historische Gründe.

SQL ANY - Beispiel (Größer-Als)

SQL ANY Größer
SELECT Vorname, Nachname, Gehalt 
FROM Firma-A 
WHERE Gehalt > ANY (SELECT Gehalt FROM Firma-B); 

Hier werden alle Mitarbeiter aus Firma-A samt ihrem Gehalt wiedergegeben, die mehr verdienen als irgendein anderer Mitarbeiter aus Firma-B. Der ANY Operator setzt alle Gehälter aus Firma-B in eine Liste und die Spalte Gehalt in Firma-A wird mit allen Werten in dieser Liste abgeglichen. Letztlich muss nur der Minimum-Wert der Liste überschritten werden, damit das Ergebnis „Wahr“ ausgibt.

SQL ANY - Beispiel (Kleiner-Als)

SQL ANY Kleiner
SELECT Vorname, Nachname, Gehalt 
FROM Firma-A 
WHERE Gehalt < ANY (SELECT Gehalt FROM Firma-B); 

Hier werden alle Mitarbeiter aus Firma-A samt ihrem Gehalt wiedergegeben, die weniger verdienen als irgendein anderer Mitarbeiter aus Firma-B. Letztlich muss nur der Maximum-Wert der Liste unterschritten werden, damit das Ergebnis „Wahr“ ausgibt.

SQL ANY - Beispiel (Nicht-Gleich)

SQL ANY Ungleich
SELECT Vorname, Nachname, Gehalt 
FROM Firma-A 
WHERE Gehalt = ANY (SELECT Gehalt FROM Firma-B); 

Hier werden alle Mitarbeiter aus Firma-A samt ihrem Gehalt wiedergegeben, die nicht genau gleich viel verdienen wie irgendein anderer Mitarbeiter aus Firma-B.

SQL ANY - Beispiel (Ist-Gleich)

SQL ANY
SELECT Vorname, Nachname, Gehalt 
FROM Firma-A 
WHERE Gehalt <> ANY (SELECT Gehalt FROM Firma-B); 

Hier werden alle Mitarbeiter aus Firma-A samt ihrem Gehalt wiedergegeben, die genau gleich viel verdienen wie irgendein anderer Mitarbeiter aus Firma-B.

ARTIKEL TEILEN

Hast du Fragen? Hinterlasse einen Kommentar!