Databases Reference
In-Depth Information
Um die select -Beispiele nicht unnötig aufzublähen, verwenden wir zunächst in
diesem Kapitel für unsere Alben wieder die Daten aus Tabelle 10.1.
14.2
Vorsicht bei Mengen
Das Ergebnis der Unterabfrage aus Listing 14.1 können wir auf Gleichheit mit
den Werten der Spalte jahr prüfen, weil es aus genau einem Wert besteht. Liefert
die Unterabfrage mehrere Datensätze als Ergebnis, können wir es nicht einfach
über den = -Operator mit Werten aus der Spalte jahr vergleichen. Die folgende
Anweisung schlägt also fehl, sobald es mehr als ein Asterix-Album in unserer
Tabelle gibt.
Listing 14.3: Eine fehlerhafte geschachtelte Abfrage
select titel
from alben
where jahr = (
select jahr from alben
where reihe='Asterix')
Die SQL-Anweisung sollte eigentlich alle Albentitel finden, die im gleichen Jahr
wie irgendein Asterix-Album erschienen sind. Dabei haben wir aber für jedes Al-
bum den Wert der Spalte jahr mit einer Menge verglichen. Da für unsere Bei-
spieldaten die Unterabfrage die Menge f1968, 1974, 1980, nullg liefert, ergeben
sich sinnlose Ausdrücke wie 1973=f1968, 1974, 1980, nullg. Das gleiche Pro-
blem ergibt sich bei der folgenden - ebenfalls fehlerhaften - Abfrage:
Listing 14.4: Noch eine fehlerhafte geschachtelte Abfrage
select titel
from alben
where preis = (
select min(preis)
from alben
group by reihe)
Die geschachtelte Abfrage soll uns die günstigsten Preise aller Alben einer Reihe
liefern. Wir wollten vielleicht prüfen, ob Werte der Spalte preis aus der überge-
ordneten Abfrage in dieser Menge enthalten sind, haben dazu aber die falsche Syn-
tax verwendet. In dieser Abfrage ist ebenso wie in der aus Listing 14.3 die Verwen-
dung des in -Operators erforderlich. Wir erinnern uns (siehe etwa Abschnitt 10.3):
Ein Ausdruck wie
jahr in (1969, 1974, 1980)
Search WWH ::




Custom Search