Der SQL ALL Operator nimmt alle Werte in einer Spalte als Vergleichswert auf.
SELECT Spalte-A
FROM Tabelle1
WHERE Spalte-B > / < / <> / = ALL (SELECT Spalte-C FROM Tabelle2 WHERE Bedingung);
SQL ALL ist wie ein IN-Operator mit dem Zusatz, dass wir Vergleichsoperatoren benutzen können. Wir listen Werte auf und überprüfen, ob der Spaltenwert in der Bedingung größer, kleiner, nicht-gleich oder gleich alle Werte in dieser Liste ist. Ist das der Fall, wird „wahr“ ausgegeben.
Im Fokus steht, dass alle Werte der Spalte verglichen werden. Es reicht also nicht aus, dass ein Wert TRUE ausgibt. Jedes Ergebnis muss TRUE ausgeben, damit das ganze Ergebnis TRUE ist. Beim SQL ANY-Operator muss im Gegensatz nur irgendein 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, schreiben wir anstelle eines Wertes eine einfache SELECT-Abfrage.
Abhängig vom Vergleichsoperator ändert sich der Inhalt der Abfrage
- < ALL (…) : Kleiner als der kleinste Wert in der Liste
- > ALL (…) : Größer als der größte Wert in der Liste
- <> ALL (…) : Entspricht keinem Wert in der Liste (Äquivalent zu NOT IN Operator)
- = ALL (…) : Entspricht allen Werten in der Liste – Dieser Verhältnisoperator ist praktisch selten anwendbar, da „falsch“ ausgegeben wird, sobald die Liste zwei verschiedene Werte enthält.
SQL ALL - Beispiel (Größer-Als)
SELECT Vorname, Nachname, Gehalt
FROM Firma-A
WHERE Gehalt > ALL (SELECT Gehalt FROM Firma-B);
Hier werden alle Mitarbeiter aus Firma-A mit ihrem Gehalt ausgegeben, die mehr verdienen als jeder andere Mitarbeiter aus Firma-B. Der ALL Operator setzt alle Gehälter aus Firma-B in eine Liste und gleicht die Spalte Gehalt in Firma-A mit allen Werten in dieser Liste ab. Eigentlich muss nur der Maximum-Wert der Liste überschritten werden, damit das Ergebnis „Wahr“ ausgibt.
SQL ALL - Beispiel (Kleiner-Als)
SELECT Vorname, Nachname, Gehalt
FROM Firma-A
WHERE Gehalt < ALL (SELECT Gehalt FROM Firma-B);
Alle Mitarbeiter aus Firma-A und ihr Gehalt werden ausgegeben, die weniger verdienen als jeder andere Mitarbeiter aus Firma-B. Es muss nur der Minimum-Wert der Liste überschritten werden, damit das Ergebnis „Wahr“ ausgibt.
SQL ALL - Beispiel (Nicht-Gleich)
SELECT Vorname, Nachname, Gehalt
FROM Firma-A
WHERE Gehalt <> ALL (SELECT Gehalt FROM Firma-B);
Hier werden alle Mitarbeiter aus Firma-A mit ihrem Gehalt ausgegeben, die nicht dasselbe verdienen wie jeder andere Mitarbeiter aus Firma-B.