UNION-Abfrage in SQL

Wie ermittelt man die Vereinigungsmenge, Schnittmenge, usw. aus zwei Tabellen ?
Ein zweckmäßiges Werkzeug ist die UNION-Abfrage. Damit kann man mehrere Abfragen hintereinander ausführen und das Ergebnis als Summe dieser einzelnen Abfragen ausgeben. Die UNION-Abfrage hat nur einen kleinen Nachteil:
Sie kann nicht schnell in der QBE-Ansicht mit der Maus zusammengeklickt werden. Statt dessen muss man so vorgehen:

  1. Neue Abfrage erstellen und ganz normal die erste Abfrage in der QBE-Ansicht erstellen.

  2. Menü 'Ansicht' -> 'SQL-Ansicht' wählen

  3. Gesamten Text markieren und in die Zwischenablage kopieren

  4. Ein weiteres Abfragefenster für die UNION-Abfrage öffnen. Das Fenster 'Tabelle anzeigen' schließen und im Menü 'Ansicht' -> 'SQL-Ansicht' wählen.

  5. Inhalt aus der Zwischenablage einfügen

  6. Neue Zeile eingeben und das Schlüsselwort UNION eintippen

  7. Zurück zu Schritt 1, bis alle Abfragen aneinander gehängt wurden.

Voraussetzungen für die UNION-Abfrage:

  • UNION steht nur zwischen den Abfragen, das letzte UNION muss man sich verkneifen.

  • Alle Abfragen haben die gleiche Anzahl von Spalten

  • Alle Abfragen haben die gleichen Spaltenüberschriften. Falls dies ausnahmsweise nicht der Fall sein sollte, muß man mit Alias-Namen arbeiten. In der QBE-Ansicht gibt man dann z.B. den Aliasnamen 'Nummer' für das Feld 'Nr' so an 'Nummer:[Tabelle A].Nr' in SQL verwendet man AS, z.B. 'SELECT [Tabelle A].Nr AS [Nummer] ...'

  • Die Reihenfolge der Spalten muß ebenfalls bei allen Abfragen gleich sein. Falls dies ausnahmsweise nicht so ist, muß man die Reihenfolge der Spalten in den unpassenden Abfragen entsprechend ändern.

  • Die Felddatentypen müssen auch noch stimmen. Sollte dies nicht der Fall sein, kann man sich manchmal mit den Typumwandlungsfunktionen (ZInteger, ZDate, ZCurrency ...) helfen.

UNION-Abfragen filtern doppelte Datensätze heraus. Wenn dies nicht gewünscht wird, dann muß das Schlüsselwort UNION ALL verwendet werden. Zu den Beispielen gibt es übrigens eine Demo-Datenbank. Weitere Anwendungsbeispiele für die UNION-Abfrage liefern eine Übersicht über alle Beziehungen in einer Access-Datenbank und unnötige, mehrfache Beziehungen in einer Access-Datenbank.

Tabelle A
NrWert
 1  A 
 2  B 
 3  C 
 4  D 

Tabelle B
NrTag
 1  Mo 
 2  Di 
 5  Mi 
 6  Do 
Vereinigungsmenge
Vereinigungsmenge

Bei dieser Abfrage nimmt man einfach zwei einfache Abfragen und hängt sie aneinander:


SELECT [Nr] FROM [Tabelle A]
UNION
SELECT [Nr] FROM [Tabelle B]

Ergebnis
Nr

 1 

 2 

 3 

 4 

 5 

 6 

Welche Elemente kommen nicht in beiden Mengen vor ?
Ausschlussmenge

Die UNION-Abfrage ist die Summe aus zwei normalen Abfragen, die jeweils nur die Elemente ausgeben, die nur in einer Tabelle vorkommen

+
SELECT [Tabelle A].[Nr]
FROM [Tabelle A] LEFT JOIN [Tabelle B] ON [Tabelle A].Nr = [Tabelle B].Nr
WHERE [Tabelle B].Nr Is Null
UNION
SELECT [Tabelle B].[Nr]
FROM [Tabelle B] LEFT JOIN [Tabelle A] ON [Tabelle A].Nr = [Tabelle B].Nr
WHERE [Tabelle A].Nr Is Null
Ergebnis
Nr
 3 
 4 
 5 
 6