Das Ergebnis einer SELECT-Anweisung kann als Wert in einer anderen Anweisung verwendet werden. Die Anweisung
SELECT region FROM bbc WHERE name = 'Brazil' liefert bspw. den Wert 'Americas'. Dieser Wert kann verwendet werden, um eine Liste aller Länder in der gleichen Region wie 'Brazil' zu erhalten.
| 1 |
Eine verschachtelte SELECT-Anweisung mit =
|
|---|
Eine verschachtelte SELECT-Anweisung ist nicht das Gleiche wie ein Join!
Oft wird die verschachtelte Anweisung mit einem einzigen Wert verglichen, wie im obigen Beispiel. Die Anweisung
SELECT region FROM bbc WHERE name = 'Brazil'
sollte genau eine Region zurückliefern, nämlich 'Americas'. Aber was würde geschehen, wenn z.B. ein neues europäisches Land gegründet wird, daß sich Brazil nennt?
Das Ergebnis wäre ein Laufzeitfehler. Die Syntax der SQL-Anweisung ist korrekt und das DBMS würde versuchen, die Anweisung auszuführen. Der Fehler tritt dann beim Ausführen der äußeren Anweisung auf. Denn obige Anweisung bedeutet das Gleiche wie die Anweisung
SELECT name FROM bbc WHERE region = ('Americas', 'Europe').
Der Fehler würde auch auftreten, wenn es in der Tabelle kein Land gäbe, das Brazil heißt.
Beim Vergleich auf Brazil würde die Abfrage mit einer Fehlermeldung abbrechen. In dem Fall wäre es aber sinnvoll (und korrekt), wenn eine leere Tabelle zurückgeliefert wird.
Es gibt viele Anwendungsfälle, in denen der Vergleich mit einer Werteliste erforderlich ist. So prüft der "IN"-Operator einen einzelnen Wert gegen eine Werteliste. Das folgende Beispiel wird fehlerfrei ausgeführt, egal wie wiele Brazils es gibt.
| 2 |
Eine verschachtele SELECT-Anweisung mit IN
|
|---|
Es gibt weitere Operatoren wie "ALL" und "ANY", die in ähnlichen Fällen verwendet werden.