Databases Reference
In-Depth Information
Bei der Arbeit mit den Operatoren any , all und exists sollten wir einige Be-
sonderheiten beachten, die wir in den folgenden Abschnitten entdecken werden.
14.3.1 all
In den meisten Fällen wird all in Kombination mit < oder > verwendet.
Listing 14.6: Eine Abfrage mit einem erstaunlichen Ergebnis
select titel
from alben
where jahr > all ( select jahr
from alben
where reihe='Asterix')
Die Abfrage soll uns als Ergebnis alle Alben liefern, die nach dem neuesten
Asterix-Album erschienen sind. Auf den ersten Blick mag man glauben, dass das
Gleiche wie bei der folgenden Abfrage herauskommt.
Listing 14.7: Alben, die jünger als alle Asterix-Alben sind
select titel
from alben
where jahr > (select max(jahr)
from alben
where reihe='Asterix')
Wenn wir das Ergebnis dieser Abfrage in Tabelle 14.3 mit dem Datenbestand un-
serer Beispieltabelle 10.1 abgleichen, sehen wir, dass die Abfrage korrekte Daten
geliefert hat. Führen wir dagegen die scheinbar gleichwertige Abfrage aus Lis-
ting 14.6 aus, erhalten wir eine leere Ergebnistabelle. Die beiden Abfragen sind
daher nicht gleichwertig; die Syntax der Abfrage aus Listing 14.6 ist zwar korrekt,
ihre Semantik muss aber falsch sein.
Tabelle 14.3: Ergebnis der Abfrage aus Listing 14.7
titel
Das Kriminalmuseum
Das Meisterwerk
An Phänomenen wie diesem kann man lange knobeln; die Ursache ist auch hier
der Wert null . In den Beispieldaten sind vier der Asterixalben in den Jahren 1968,
1974 und 1980 erschienen. Bei „Asterix als Legionär“ repräsentiert null das uns
unbekannte Erscheinungsjahr. Da Aggregate bekanntlich null -Werte ignorieren
(siehe Abschnitt 11.4), hat die Unterabfrage aus Listing 14.7 den Wert 1980 zum
Ergebnis.
 
Search WWH ::




Custom Search