Databases Reference
In-Depth Information
Datenbank-Managementsysteme nicht EXCEPT , dafür aber
EXISTS unterstützen.
Es wurden die Gattungen gesucht, die im Gehege mit der
Nummer 2, aber nicht im Gehege mit der Nummer 3 vorkom-
men. Diese Anfrage kann wie folgt formuliert werden.
SELECT T1.Gattung
FROM Tier T1
WHERE T1.Gnr=2
AND NOT EXISTS (SELECT *
FROM Tier T2
WHERE T2.Gnr=3
AND T1.Gattung=T2.Gattung)
Als Ergebnis wird wie erwartet keine Zeile ausgegeben. Da hier
zweimal der Bezug zur Tabelle Tier aufgebaut wird, müssen
die Tabellen lokal umbenannt werden. Damit kann wieder in
der inneren Teilanfrage ein Bezug zur Tier-Information der äu-
ßeren Anfrage aufgebaut werden.
Mit der nächsten Anfrage werden die Namen der Gehege aus-
gegeben, in denen nur eine Gattung lebt.
SELECT Gehege.Gname
FROM Gehege, Tier T1
WHERE Gehege.Gnr=T1.Gnr
AND NOT EXISTS (SELECT *
FROM Tier T2
WHERE T2.Gnr=T1.Gnr
AND T1.Gattung<>T2.Gattung)
Der Aufbau der Anfrage mag zunächst leicht irritieren. Es hat
eine logische Umformung stattgefunden. Konkret wird nach
Gehegen gesucht, bei denen für alle Tiere im Gehege gilt, dass
sie die gleiche Gattung haben. Dies ist aber gleichwertig zu der
Suche nach Gehegen, in denen es kein Tier gibt, das eine andere
Gattung wie ein anderes Tier dieses Geheges hat. Diese etwas
verschachtelte Umformulierung wurde zur Erstellung der An-
frage genutzt.
Doppelte Ver-
neinungen und
EXISTS-
Nutzung
Das Ergebnis der Anfrage lautet
GNAME
------
Wald
Wald
[*] Leser der Erklärung der letzten Anfrage mit einer Grundla-
genausbildung in Mathematik oder Logik werden den Zu-
sammenhang des EXISTS -Operators in SQL mit dem Exis-
208
Search WWH ::




Custom Search