<< >> Up Title Contents Index

EXCEPT

Die EXCEPT-Klausel stellt die Möglichkeit bereit, Ergebnisse aus einer Ergebnistabelle von einer anderen abzuziehen.

Gewünscht seien zunächst alle Orte, die in der Tabelle 'hotel' gefunden werden, aber nicht in der Ergebnistabelle von 'kunde' enthalten sind.

SELECT ort
       FROM hotel
       WHERE plz > '7'
       EXCEPT
SELECT ort
       FROM kunde
       WHERE plz > '7'

Die Reihenfolge der SELECT-Anweisungen ist hier nicht - wie bei UNION und INTERSECT - beliebig.

Sind alle Ergebniszeilen gesucht, die in 'kunde', aber nicht in 'hotel' enthalten sind, wird die Meldung 'Zeile nicht gefunden' geliefert. Die Orte Stuttgart und München haben ein Pendant in der Hoteltabelle, werden also nicht als Ergebnis geliefert. Es spielt hierbei keine Rolle, daß die Kundentabelle einen 'München'-Eintrag mehr enthält als 'hotel'.

Bevor das EXCEPT wirksam wird, wird implizit ein DISTINCT auf die Tabellen abgesetzt.

Möchte man erreichen, daß auch die Anzahl der in den einzelnen Ergebnistabellen gefundenen Zeilen in Betracht gezogen wird, muß mit EXCEPT ALL gearbeitet werden.

SELECT ort
       FROM kunde
       WHERE plz > '7'
       EXCEPT ALL
SELECT ort
       FROM hotel
       WHERE plz > '7'

Wir sehen hier, daß das 'ALL' die Anwendung von DISTINCT verhindert hat. Da 'München' in der Kundentabelle einmal häufiger vorkommt als in 'hotel', bleibt dieser Wert als Ergebnis erhalten.

Anschaulich gesehen bedeutet das, daß man die jeweils übereinstimmenden Werte der beiden Tabellen "wegstreicht"; die verbleibenden Werte der ersten Tabelle bleiben als Ergebnis stehen.

In unserem Beispiel:

Zwei der Einträge 'München' sowie 'Stuttgart' "heben sich auf".


<< >> Up Title Contents Index