Databases Reference
In-Depth Information
Das hätten wir in diesem Fall auch einfacher haben können:
Listing 14.9:
Eine einfache Abfrage, die eine geschachtelte ersetzt.
select reihe
from alben
group by reihe
having count(distinct preis)=1
14.3.2
any
Wir können
any
in Verbindung mit dem
=
-Operator nutzen. Das Prädikat
jahr = any (1968,1972,1980,null)
ist gleichwertig mit
jahr=1968 or jahr=1972 or jahr=1980 or jahr=null
Der Ausdruck liefert genau dann
true
, wenn
jahr
gleich einem der Werte 1968,
1972 oder 1980 ist. Der Vergleich mit
null
ergibt zwar
null
, doch bleibt
null
bei
or
-Verknüpfungen wirkungslos (siehe Abschnitt 10.2). An dieser Stelle macht
null
ausnahmsweise keine Probleme.
Am folgenden Beispiel
jahr in (1968,1972,1980,null)
sehen wir, dass
=any
auch nichts wirklich Neues, sondern das Gleiche wie
in
ist.
Man überzeugt sich aber schnell davon, dass die beiden Prädikate
jahr not in (1968,1972,1980,null)
und
jahr !=any (1968,1972,1980,null)
nicht das gleiche Ergebnis haben:
Für
jahr=1968
ist das erste Prädikat beispielsweise falsch, das zweite aber nicht,
da etwa
1968!=1972
gilt. Bei genauerer Betrachtung ist das zweite Prädikat für
jeden Wert von
jahr
wahr. Falsch kann es nur werden, wenn die rechte Seite aus
einer einelementigen Menge besteht.
Auch wenn man auf den ersten Blick
not in
und
!=any
für äquivalent hält,
zeigt dieses Beispiel, dass dies nicht der Fall ist.