Tabellen untereinander hängen mit UNION

Beim UNION geht es darum, die Vereinigungsmenge von zwei Tabellen zu bilden. Bildlich gesprochen wollen wir die beiden Tabellen untereinander hängen. Voraussetzung dafür ist natürlich, dass die beiden Tabellen die gleiche Anzahl von Spalten haben.

Das Ergebnis in dem Beispiel auf der rechten Seite könnte mit der folgenden Abfrage entstanden sein:

SELECT docnr, 
       'INV' AS type, 
       amount, 
       curr, 
       customer
  FROM invoice

UNION 

SELECT docnr, 
       'ORD' AS type, 
       amount, 
       curr, 
       customer
  FROM order;

Das Schlüsselwort UNION verbindet also das Ergebnis zweier Abfragen miteinander. Diese beteiligten Abfragen müssen nicht immer eine Zeile liefern. Sie können auch leer sein, eine Zeile oder beliebig viele Zeilen liefern.

Beispiel für die Vereinigungsmenge mit UNION

UNION und UNION ALL

Eine wichtige Nebenwirkung von UNION konnten wir in dem Beispiel leider nicht sehen: Es werden alle doppelten Zeilen entfernt. Das ist häufig nicht nötig, in dem obigen Beispiel kann man Duplikate sogar ausschließen. Dieses Verhalten des UNION Operators liegt daran, dass er die Tabellen als Mengen im mathematischen Sinne versteht. Und in einer Menge kann ein Element (=Zeile) nur einmal enthalten sein.

Wenn wir wissen, dass keine doppelten Daten in unseren Tabellen sind oder wenn es egal ist, ob doppelte Datensätze im Ergebnis sind, verwenden wir deshalb lieber den UNION ALL Operator. Dieser ist erheblich schneller als UNION, da der Aufwand für das Eliminieren von (vermeintlichen) Duplikaten entfällt. Der Unterschied der Laufzeit ist je nach Datenvolumen zum Teil erheblich.