UNION ist ein SQL-Operator, der die Ergebnismengen mehrerer SELECT-Abfragen zu einer einzigen Liste zusammenführt. Im Gegensatz zu einem JOIN, der Spalten nebeneinanderlegt, stapelt UNION Zeilen untereinander – die Abfragen müssen also dieselbe Spaltenanzahl liefern.
UNION und UNION ALL
- UNION entfernt doppelte Zeilen aus dem Gesamtergebnis.
- UNION ALL behält alle Zeilen, auch Duplikate – und ist dadurch schneller, weil kein Sortieren zum Entfernen nötig ist.
Beispiel
SELECT name, 'Kunde' AS typ FROM kunden
UNION ALL
SELECT name, 'Lieferant' AS typ FROM lieferanten;
Typische Einsätze: gleiche Daten aus getrennten Tabellen zusammenführen, historische Monatstabellen vereinen oder Berichte über mehrere Datenbanken bündeln. Die Datentypen passender Spalten sollten zusammenpassen; die Spaltennamen des Ergebnisses kommen aus der ersten Abfrage.
Grenzen und Alternativen
Nicht jede Datenbank beherrscht weitere Mengenoperatoren gleich gut: INTERSECT (Schnittmenge) und EXCEPT/MINUS (Differenz) sind Standard-SQL, fehlten in MySQL aber lange und kamen erst mit Version 8.0. Wer stattdessen zeilenweise Vergleiche oder laufende Summen braucht, verwendet Window Functions; wer eine Abfrage von einer anderen abhängig machen will, setzt eine Subquery ein.
Die Basis aller Abfragen erklären die SQL-Grundlagen, das Zusammenführen von Tabellen der Artikel zu SQL-JOINs.