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.