Syntax:
operand
comparison_operator
ALL (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.