Databases Reference
In-Depth Information
Abfragen mit ALL können durch Umkehrung der logischen Bedingung immer auch
mit ANY formuliert werden und umgekehrt. Beispielsweise ist die Aussage
vergleichswert > ALL (Unterabfrage)
logisch äquivalent zu der Aussage:
NOT vergleichswert <= ANY(Unterabfrage)
Die letzte Abfrage ist im Übrigen auch ohne ANY und ALL formulierbar. Wenn ein
Artikel teurer ist als alle Artikel von Lager 5, dann ist sein Listenpreis größer als
der größte Listenpreis von Artikeln aus Lager 5.
SELECT artikel_nr, listenpreis
FROM artikel
WHERE listenpreis >
(SELECT MAX(listenpreis)
FROM artikel
WHERE lagerplatz = 5)
Abfragen unter Verwendung von Unterabfragen können also meist auf verschie-
dene Weise formuliert werden. Im Allgemeinen wird man die kürzere Formulie-
rung bevorzugen, die meist auch die verständlichere ist. Unterschiede ergeben sich
aber auch im Antwortverhalten. Bedingungen, die erfüllt sind, wenn die Unterab-
frage bereits eine einzige Zeile erbringt, werden in der Regel schneller bearbeitet
als Bedingungen, für die jeweils die Ergebnistabelle der Unterabfrage geprüft wer-
den muss.
Im obigen Beispiel mit der WHERE-Klausel
WHERE listenpreis > ALL
(SELECT listenpreis
FROM artikel
WHERE lagerplatz = 5)
müssen in der Unterabfrage alle Artikel mit lagerplatz = 5 gelesen werden, denn
der in der Hauptabfrage geprüfte Artikel muss teurer sein als alle Artikel aus
Lager 5.
Im nächsten Beispiel reicht es aus, wenn die Unterabfrage einen Artikel liefert, des-
sen Listenpreis kleiner oder gleich ist als der betrachtete.
WHERE listenpreis > ANY
(SELECT listenpreis
FROM artikel
WHERE lagerplatz = 2)
Im günstigsten Fall ist schon bei der ersten Zeile der Unterabfrage die Bedingung
erfüllt.
Search WWH ::




Custom Search