Databases Reference
In-Depth Information
der inneren Anfrage wird eine Liste aller in der Tabelle Tier
vorkommenden Gattungen berechnet. Durch den IN -Operator
wird geprüft, ob Hase in dieser Liste vorkommt, was der Fall
ist. In der äußeren Anfrage wird somit für jedes Gehege ge-
prüft, ob ein Hase in der Liste aller Tiere vorkommt. Der Zu-
sammenhang zwischen dem in der äußeren Anfrage konkret
betrachtetem Gehege und der inneren Anfrage ist völlig verlo-
ren gegangen. Damit ist die Antwort Wald auch korrekt, da in
der WHERE -Bedingung überhaupt nur überprüft wird, ob es Ha-
sen in der Tabelle Tier gibt.
Zur Vervollständigung sei erwähnt, dass man in diesem Fall
auch ohne den IN -Operator auskommen kann. Die alternative
korrekte Anfrage mit dem gleichen Ergebnis ist:
SELECT DISTINCT Gehege.Gname
FROM Gehege, Tier
WHERE Gehege.Gnr=Tier.Gnr
AND Tier.Gattung='Hase'
Abhängig von der SQL-Implementierung des Datenbank-
Managementsystems können nicht nur einfache Attribute mit
IN gesucht werden, sondern auch Paare von Attributen, dabei
muss die Anzahl der Attribute auf der linken Seite mit der Spal-
tenanzahl des Ergebnisses der Teilanfrage übereinstimmen. Ein
Beispiel ist die Anfrage nach den Namen der Gehege, in denen
ein Schaf namens Harald vorkommt.
SELECT Gehege.Gname
FROM Gehege
WHERE ('Harald','Schaf') IN
(SELECT Tier.Tname, Tier.Gattung
FROM Tier
WHERE Gehege.Gnr=Tier.Gnr)
Diese Anfrage kann natürlich auch ohne Anfragenschachtelung
gestellt werden. Sie lautet dann:
SELECT Gehege.Gname
FROM Gehege, Tier
WHERE Gehege.Gnr=Tier.Gnr
AND Tier.Tname='Harald'
AND Tier.Gattung='Schaf'
Das Ergebnis der beiden letzten Anfragen ist:
Analyse einer
funktionieren-
den, aber sinnlo-
sen Anfrage
Möglichkeit, die
Kombination
von Attributen
mit IN zu prüfen
GNAME
------
Feld
206
Search WWH ::




Custom Search