Mehr über Unteranfragen

Eine andere Anwendung von Unteranfragen bringt Operatoren in Spiel, um WHERE-Klauseln die Einbindung von SELECT Ausgaben von Unteranfrage zu erlauben. Zuerst werden die Käufer ausgegeben die etwas teures gekauft haben (der Preis ist um 100 größer als der Durschnittkaufpreis):


\begin{code}
SELECT KÄUFERID
FROM ANTIQUITÄTEN
WHERE codeIS \textgreater{}
(SELECT AVG(codeIS) + 100
FROM ANTIQUITÄTEN);
\end{code}

Die Unteranfrage ermittelt den Durschnittspreis um 100 erhöht, dank dieses Werts wird jeder Käufer ausgegeben der einen Kauf mit einem Wert über jenem getätigt hat. Es könnte noch DISTINCT KÄUFERID benützt werden um Duplikate zu vermeiden.

Auflistung nur der Namen welche in AntiquitätenBesitzer sind und etwas gekauft haben:


\begin{code}
SELECT BESITZERNACHNAME
FROM ANTIQUITÄTENBESITZER
WHERE BESITZERID IN
(SELECT DISTINCT KÄUFERID
FROM ANTIQUITÄTEN);
\end{code}

Die Unteranfrage gibt eine Liste der Käufer zurück, der Name einer Besitzers wird dann ausgegeben wenn dessen ID in dieser Liste vorhanden ist (Manche Datanbanken erlauben in diesem Fall auf die Benutzung von '=' anstelle von IN, aber aus Lesbarkeitsgründen, nehmen wir hiervon Anstand).

Ein Beispiel für eine Auffrischung: Die Person die das Bücherregal gekauft hat, wurde uneter einem falschen Vornamen eingetragen, dieser sollte an sich John sein:


\begin{code}
UPDATE ANTIQUITÄTENBESITZER
SET BESITZERVORNAME = 'John' WHERE B...
...CT KÄUFERID
FROM ANTIQUITÄTEN WHERE GEGENSTAND = 'Bücherregal');
\end{code}

Die Unteranfrage findet die KäuferID der Person(nen) welche ein Bücherregal gekauft haben, die äußere Anfrage ändert deren Vornamen.

Merke: Befindet sich eine Unteranfrage in einer WHERE-Klausel, muß die SELECT-Klausel der Unteranfrage die Anzahl und den Typ Spalten zurückgeben, welche von der WHERE-Klausel erwartet werden.