Die häufigste Form einer Unterabfrage hat das folgende Aussehen:
non_subquery_operand
comparison_operator
(subquery
)
Hierbei ist comparison_operator
einer der folgenden Operatoren:
= > < >= <= <>
Zum Beispiel:
... 'a' = (SELECT column1 FROM t1)
Früher befand sich der einzige zulässige Ort für eine Unterabfrage auf der rechten Seite eines Vergleichs; einige wenige alte Datenbanksysteme halten nach wie vor an dieser Regel fest.
Hier ein Beispiel für einen Unterabfragenvergleich in der
gängigen Form, den Sie mit einem Join nicht durchführen
können. Hierbei werden alle Werte in Tabelle
t1
gefunden, die einem Maximalwert in
Tabelle t2
entsprechen:
SELECT column1 FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2);
Es folgt ein weiteres Beispiel, welches ebenfalls mit einem
Join nicht zu realisieren ist, da für eine der Tabellen eine
Zusammenfassung erfolgt. Gefunden werden hier alle Datensätze
in der Tabelle t1
, die einen Wert
enthalten, der in einer gegebenen Spalte zweimal auftritt:
SELECT * FROM t1 AS t WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);
Bei einem Vergleich, der mit einem dieser Operatoren
durchgeführt wird, muss die Unterabfrage einen Skalar
zurückgeben. Eine Ausnahme besteht lediglich darin, dass
=
mit Datensatzunterabfragen verwendet
werden kann. Siehe auch Abschnitt 13.2.8.5, „Zeilenunterabfragen“.
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.