|
VII. SUBQUERY's
(Unterabfragen)
|
|
|
|
1.
Das Konzept der Unterabfragen
|
| |
| Wir kennen bereits die Verwendung der WHERE-Klausel
für die Definition der benÖtig- ten Daten- Teilmengen.
Dabei haben wir SOL bisher dazu verwendet, einen Spaltenwert mit
einer Konstanten oder mit einer Reihe von Konstanten zu vergleichen.
|
| Wie würden Sie jedoch vorgehen, wenn die Spaltenwerte
unbekannt wären? Wenn Sie z.B. die Namen jener Mitarbeiter
wissen wollen, deren Gehalt über dem Durchschnitt liegt ? Sie
könnten zuerst mit folgender Anweisung das Durchschnittsgehalt
herausfinden: |
SELECT AVG(sal) FROM emp;
|
| Dieses Ergebnis müßten Sie vor Eingabe
der folgenden Anweisung notieren: |
SELECT ename FROM emp WHERE sal > 2073.214;
|
| Die Lösung scheint nicht besonders gelungen,
und man kann sich gut vorstellen, daß diese Methode in manchen
Fällen nicht durchführbar ist. |
| Eine wesentlich effektivere Methode ist das Einbinden
einer vollständigen SELECT -Anweisung in eine WHERE-Klausel
(SUBQUERY/Unterabfrage). Die beiden obigen Anweisungen können
leicht zu einer einzigen zusammengefaßt werden: |
SELECT ename FROM emp WHERE sal > (SELECT AVG(sal)
FROM emp);
|
Die untergeordnete Abfrage, d.h. die in Klammem gesetzte
SELECT -Anweisung, wird zuerst und nur einmal ausgeführt. Daraufhin
wird der Ausgabewert (bzw .die Ausgabewertemenge) in die übergeordnete
Abfrage "eingebaut".
Als Vergleichswert kann ein einzelner Wert oder eine Menge von Werten
eingesetzt werden, der bzw. die von einer SELECT -Anweisung abgefragt
werden.
Die zweite SELECT -Anweisung wird verschachtelte Unterabfrage genannt.
Eine Unterabfrage kann so strukturiert werden, daß sie bei
einmaligen Einsatz in der Abfrageoperation einen Wert oder eine
Menge von Werten erzeugt, die als Vergleichswerte in einer WHERE-
Klausel verwendet werden. |
| |
| Eine verschachtelte SELECT-Anweisung kann eine andere
verschachtelte SELECT-Anweisung enthalten. Bis zu 255 untergeordnete
Abfragen können ineinander verschachtelt werden. |
|
|