<< >> Up Title Contents Index

UNION

Die UNION-Anweisung erlaubt es dem Benutzer, aus zwei oder mehreren SELECTs eine Vereinigungsmenge der einzelnen Ergebnistabellen zu erzeugen.

Im einfachsten Fall können auf diese Weise zwei Ergebnistabellen, die aus der gleichen Basistabelle gebildet wurden, miteinander verknüpft werden.

Sind beispielsweise alle Kunden, wohnhaft in Berlin oder München, gesucht, so läßt sich das unter Benutzung von UNION folgendermaßen darstellen:

SELECT anrede, vorname, name, ort
       FROM kunde
       WHERE ort = 'Berlin'
       UNION
SELECT anrede, vorname, name, ort
       FROM kunde
       WHERE ort = 'München'

Dieses Ergebnis wäre jedoch auch mit einem einfachen SELECT unter Zuhilfenahme von OR zu erhalten gewesen:

SELECT anrede, vorname, name, ort
       FROM kunde
       WHERE ort = 'Berlin' OR ort = 'München'

Die UNION-Anweisung erlaubt es darüber hinaus, Ergebnistabellen zu kombinieren, die aus unterschiedlichen Tabellen gebildet wurden.

Es muß dabei jedoch gewährleistet sein, daß die Datentypen der jeweiligen i-ten Ausgabespalten vergleichbar sind. Eine Gleichheit ist nicht erforderlich, da gegebenenfalls die maximale Länge genutzt wird. Eine Kombination aus CHAR (10) und CHAR (15) Spalten ist also möglich, da die Länge automatisch auf CHAR (15) ausgeweitet wird.

Die Wirkungsweise von UNION, INTERSECT und EXCEPT jeweils mit und ohne ALL-Klausel wird anhand der Ortsspalten der beiden Tabellen 'hotel' und 'kunde' dargestellt.

Um eine bessere Übersicht über die gefundenen Ergebnisse zu erzielen, sollen sich die Beispiele nur auf den süddeutschen Raum beziehen, d. h. die Postleitzahl sei größer/gleich 70000.

(Die Abfrage wurde in der folgenden Weise formuliert, da die Postleitzahl nicht als Zahl, sondern als Zeichenfolge definiert ist.)

Die Ausgangsbasis bilden die beiden folgenden Ergebnistabellen:

SELECT kundenorte = ort
       FROM kunde
       WHERE plz > '7'

SELECT hotelorte = ort
       FROM hotel
       WHERE plz > '7'


Gesucht seien die Städte, aus denen die Kunden stammen, sowie die Hotelstandorte. Dafür wird eine Vereinigungsmenge über die Tabellen 'kunde' und 'hotel' gebildet.

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

Es wird hier deutlich, daß mehrmals auftauchende Orte nur einmal angezeigt werden. Die Datenbank setzt bei Verwendung von UNION implizit ein DISTINCT ab.

Um nun alle Orte in der Häufigkeit ihres Auftretens zu erhalten, wird die Anweisung UNION ALL bereitgestellt.

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


<< >> Up Title Contents Index