Unterabfragen sind in der FROM
-Klausel
einer SELECT
-Anweisung zulässig. Die
eigentliche Syntax lautet:
SELECT ... FROM (subquery
) [AS]name
...
Die [AS]
-Klausel ist
obligatorisch, weil jede Tabelle in einer
name
FROM
-Klausel einen Namen haben muss. Alle
Spalten, die in der
subquery
-Auswahlliste aufgeführt
sind, benötigen eindeutige Namen. Sie finden diese Syntax an
anderer Stelle in diesem Handbuch beschrieben. Dort wird der
Begriff „abgeleitete Tabellen“ verwendet.
Zur Veranschaulichung nehmen wir an, dass Sie folgende Tabelle haben:
CREATE TABLE t1 (s1 INT, s2 CHAR(5), s3 FLOAT);
Eine Unterabfrage in der FROM
-Klausel
verwenden Sie bei der Beispieltabelle wie folgt:
INSERT INTO t1 VALUES (1,'1',1.0); INSERT INTO t1 VALUES (2,'2',2.0); SELECT sb1,sb2,sb3 FROM (SELECT s1 AS sb1, s2 AS sb2, s3*2 AS sb3 FROM t1) AS sb WHERE sb1 > 1;
Ergebnis: 2, '2', 4.0
.
Es folgt ein weiteres Beispiel: Nehmen wir an, Sie wollen den Durchschnitt einer Anzahl von Summen für eine gruppierte Tabelle ermitteln. Folgendes funktioniert nicht:
SELECT AVG(SUM(column1)) FROM t1 GROUP BY column1;
Die nächste Abfrage dagegen übermittelt die gewünschte Information:
SELECT AVG(sum_column1) FROM (SELECT SUM(column1) AS sum_column1 FROM t1 GROUP BY column1) AS t1;
Beachten Sie, dass der Spaltenname, der in der Unterabfrage
verwendet wird (sum_column1
), in der
äußeren Abfrage erkannt wird.
Unterabfragen in der FROM
-Klausel können
einen Skalar, eine Spalte, einen Datensatz oder eine Tabelle
zurückgeben. Unterabfragen in der
FROM
-Klausel dürfen keine korrelierten
Unterabfragen sein.
Unterabfragen in der FROM
-Klausel werden
auch für die EXPLAIN
-Anweisung ausgeführt
(d. h., es werden abgeleitete Temporärtabellen erstellt).
Grund hierfür ist, dass Abfragen höherer Ebenen während der
Optimierungsphase Informationen zu allen Tabellen benötigen.
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.