Queries kombinieren, der UNION-Operator
Die Ergebnisse von SQL-Queries lassen sich kombinieren. Dafür gibt es den UNION-Operator.
Allgemeine Struktur einer Query mit UNION
MySQL 8.1SELECT tabellen_felder FROM tabellen_liste ... UNION [ALL] SELECT tabellen_felder FROM tabellen_liste ... ;
UNION entfernt standardmäßig Duplikate aus der Ergebnistabelle. Wenn du Duplikate behalten willst, gibt es den optionalen Parameter ALL.
- Verwechsle das Kombinieren von Queries nicht mit dem Verknüpfen von Tabellen – dafür ist JOIN da.
- Verwechsle das Kombinieren von Queries auch nicht mit Subqueries. Subqueries laufen auf verknüpften Tabellen.
UNION kombiniert Tabellen, die nicht miteinander verknüpft sind, aber eine ähnliche Struktur haben.
Damit UNION korrekt funktioniert, müssen die Ergebnistabellen aller einzelnen SQL-Queries die gleiche Anzahl an Spalten haben – mit denselben Datentypen und in derselben Reihenfolge.
Es gibt zwei weitere Operatoren mit sehr ähnlichem Verhalten wie UNION:
- INTERSECT Kombiniert zwei SELECT-Queries, gibt aber nur die Datensätze des ersten SELECT zurück, die auch im zweiten SELECT vorkommen.
- EXCEPT Kombiniert zwei SELECT-Queries, gibt aber nur die Datensätze des ersten SELECT zurück, die im zweiten SELECT nicht vorkommen.
Anwendungsbeispiele
Angenommen, wir wollen die Namen aller Waren und die Namen aller Familienmitglieder gemeinsam ausgeben (ein ziemlich konstruiertes Beispiel). Da die Datentypen übereinstimmen, geht das problemlos.
MySQL 8.1SELECT DISTINCT Goods.good_name AS name FROM Goods UNION SELECT DISTINCT FamilyMembers.member_name AS name FROM FamilyMembers;