Databases Reference
In-Depth Information
Aufgabe 5.39
Welche Bestellungen sind nicht von Kunden aus Kayhude?
Aufgabe 5.40
Welche Artikel haben einen höheren Listenpreis als alle Artikel, deren artikel_nr
mit 'G' anfängt?
Hinweis: Verwenden Sie in der Bedingung der Unterabfrage den Operator LIKE .
Aufgabe 5.41
Welche Artikel sind schon irgendwann einmal bestellt worden? Welche sind noch
nie bestellt worden? Geben Sie jeweils die Artikel_nr und die Bezeichnung an.
Aufgabe 5.42
Welche Kunden haben kein Girokonto?
5.4.5 EXISTS versus IN
Abfragen mit EXISTS lassen sich grundsätzlich in Abfragen mit IN umwandeln.
Vorsicht ist aber geboten, da Bedingungen mit EXISTS grundsätzlich nur die Wahr-
heitswerte TRUE und FALSE ergeben, Bedingungen mit IN können auch UNKNOWN
zurückgeben. Das spielt dann eine Rolle, wenn Bedingungen mit NOT verneint wer-
den, da NOT FALSE = TRUE und NOT UNKNOWN = UNKNOWN ist. Ein Tupel wird aber dann in
die Ergebnisrelation übernommen, wenn die Bedingung auf TRUE evaluiert, bei
UNKNOWN und FALSE fällt es heraus. 25
An folgendem Beispiel erläutern wir den Unterschied: Gesucht sind die Bestellun-
gen, bei denen keine Position mit der Liefermenge 11 auftritt.
SELECT * FROM bestellung AS b
WHERE NOT 11 in
(SELECT liefermenge FROM position AS p
WHERE b.bestell_nr = p.bestell_nr);
bestell_nr kunden_nr bestelldatum lieferdatum rechnungsbetrag
=========== ========= ============ =========== ===============
151 101 2000-04-28 2000-05-02 196.75
152 103 2000-04-30 2000-05-02 2270.86
Bei den Positionen, in denen die Liefermenge noch gar keinen Wert enthält, ergibt
die Bedingung » 11 IN (SELECT liefermenge ... « den Wahrheitswert UNKNOWN .
Daran ändert auch die Verneinung mit NOT nichts. Anders bei der nächsten
Abfrage. Dort wird die Bedingung » EXISTS (SELECT liefermenge ... WHERE ...
25 Eine ausführliche Darstellung dieses Problems findet sich in [Date90a S. 339ff].
 
Search WWH ::




Custom Search