Syntax:
operandcomparison_operatorALL (subquery)
Das Wort ALL, das einem Vergleichsoperator
folgen muss, bedeutet „Gib TRUE
zurück, wenn der Vergleich für jeden beliebigen Wert in der
Spalte, die die Unterabfrage zurückgibt, wahr ist“.
Zum Beispiel:
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
Nehmen wir an, dass die Tabelle t1 einen
Datensatz mit dem Inhalt (10) umfasst. Der
Ausdruck ist wahr, wenn Tabelle t2
(-5,0,+5) enthält, weil
10 größer als alle drei Werte in
t2 ist. Der Ausdruck ist hingegen falsch,
wenn Tabelle t2
(12,6,NULL,-100) enthält, weil es einen
Wert (12) in Tabelle t2
gibt, der größer als 10 ist. Der Ausdruck
ist unbekannt (d. h.
NULL), wenn Tabelle t2
(0,NULL,1) enthält.
Schließlich ist, wenn Tabelle t2 leer ist,
das Ergebnis wahr. Aufgrund dessen ist die folgende Anweisung
wahr, wenn Tabelle t2 leer ist:
SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);
Folgende Anweisung ist hingegen NULL, wenn
Tabelle t2 leer ist:
SELECT * FROM t1 WHERE 1 > (SELECT s1 FROM t2);
Ferner ist auch folgende Anweisung NULL,
wenn Tabelle t2 leer ist:
SELECT * FROM t1 WHERE 1 > ALL (SELECT MAX(s1) FROM t2);
Generell sind Tabellen, die
NULL-Werte enthalten, und
leere Tabellen Grenzfälle. Wenn Sie
Unterabfragencode formulieren, vergewissern Sie sich immer,
dass Sie diese beiden Fälle berücksichtigt haben.
NOT IN ist ein Alias für <>
ALL. Insofern sind die folgenden beiden Anweisungen
gleichwertig:
SELECT s1 FROM t1 WHERE s1 <> ALL (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 NOT IN (SELECT s1 FROM t2);
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.
