EXISTS und ALL

EXISTS benutzt eine Unterabfrage als Bedingung und gibt wahr zurück wenn die Unterabfrage Datensätze zurückgibt, sonst falsch. Die ist eine nicht seh intuitive Funktionalität mit ein paar sehr spezialisierten Anwendungen. Nichts destotrotz falls ein sehr vorsichtiger Benutzer erst testen will ob ein Geschäft mit Stühlen handelt before er die Liste mit Sthuleignern anfordert:


\begin{code}
SELECT BESITZERVORNAME, BESITZERNACHNAME
FROM ANTIQUITÄTENBESITZ...
... EXISTS
(SELECT *
FROM ANTIQUITÄTEN
WHERE GEGENSTAND = 'Stuhl');
\end{code}

Falls irgenein Stuhl in der ANTIQUITÄTEN-Tabelle wird die Unterabfrage einen oder mehrere Datensätze zurückgeben und damit die EXISTS-Klausel mit wahr abschließen, die Datenbank dazu bringend die Liste der Antiquitätenbesitzer auszugeben.

Entsprechend unüblich ist die ALL-Klausel, da diese Art der Anfrage auch anders gemacht werden kann, mit eigentlich einfacheren Mitteln. Nehmen wir ein Beispiel:


\begin{code}
SELECT BESITZERID, GEGENSTAND
FROM ANTIQUITÄTEN
WHERE codeIS \t...
...LL
(SELECT codeIS
FROM ANTIQUITÄTEN
WHERE GEGENSTAND = 'Stuhl');
\end{code}

Diese Anfrage will den teuersten Artikel und dessen Käufer ausgeben. Die Unterabfrage gibt eine Liste von allen Preisen in der Tabelle Antiquitäten zurück. Falls ein Preis größer oder gleich allen anderen (oder ALL) ist, wird er aufgelistet. Das größer gleich kommt daher, da der Preis der größste ist er aber auch in der Liste vorkommt.