Kombinieren Sie Tabellenzeilen mit UNION
In dieser Lektion werden wir über die UNION Klausel sprechen. Sie können die UNION Klausel verwenden, um Tabellenzeilen aus zwei verschiedenen Abfragen zu einem Ergebnis zu kombinieren. Im Gegensatz zu einem Join, der Spalten aus verschiedenen Tabellen kombiniert, kombiniert eine Union Zeilen aus verschiedenen Tabellen. Hier ist eine Illustration, wie eine GEWERKSCHAFT aussieht
Gewerkschaften
Alle Beispiele für diese Lektion basieren auf Microsoft SQL Server Management Studio und der AdventureWorks2012-Datenbank., Sie können mit diesen kostenlosen Tools mit meinem Handbuch Erste Schritte mit SQL Server beginnen.
In SQL sieht diese Anweisung aus wie
SELECT columnlistFROM table1UNIONSELECT columnlistFROM table2
Um zwei Tabellen zu verbinden, gibt es einige Anforderungen:
- Die Anzahl der Spalten muss für beide select-Anweisungen gleich sein.
- Die Spalten müssen in der Reihenfolge vom gleichen Datentyp sein.
Wenn Zeilen kombiniert werden, werden doppelte Zeilen eliminiert. Wenn Sie alle Zeilen aus den Ergebnissen beider select-Anweisungen beibehalten möchten, verwenden Sie das Schlüsselwort ALL.,
Beispiele
Vereinigung zweier Tabellen
Angenommen, Sie wurden gebeten, eine Liste aller AdventureWorks2012-Produktkategorien und-Unterkategorien bereitzustellen. Dazu können Sie zwei separate Abfragen schreiben und zwei separate Ergebnisse bereitstellen, z. B. zwei Tabellenkalkulationen, oder Sie können die UNION Klausel verwenden, um ein kombiniertes Ergebnis zu liefern:
SELECT C.NameFROM Production.ProductCategory AS CUNION ALLSELECT S.NameFROM Production.ProductSubcategory AS S
Daraus erhalten Sie eine kombinierte Liste von Namen, aber angenommen, Sie wollten wissen, welcher Name Kategorien im Vergleich zu Unterkategorien waren., Dazu können Sie eine neue Spalte hinzufügen, die den Kategorietyp angibt:
SELECT 'category', C.NameFROM Production.ProductCategory AS CUNION ALLSELECT 'subcategory', S.NameFROM Production.ProductSubcategory AS S
Union versus Union All
Der Unterschied zwischen UNION und UNION ALL besteht darin, dass UNION mit UNION einen eindeutigen Satz von Zeilen aus dem Unionsergebnis zurückgibt.
Beispiel:
SELECT person.Address.CityFROM person.Address
Gibt 19614 Zeilen.
SELECT person.Address.CityFROM person.AddressUNIONSELECT person.Address.CityFROM person.Address
Gibt 575 Zeilen zurück, was die Anzahl der verschiedenen Stadtnamen in der Tabelle ist. Running UNION All gibt zweimal den gesamten Satz von Stadtnamen zurück:
SELECT person.Address.CityFROM person.AddressUNION ALLSELECT person.Address.CityFROM person.Address
Es werden 39228 Zeilen zurückgegeben.,
Wie Sie sehen, gibt es einen großen Unterschied zur Verwendung des ALL-Qualifikators. Wenn nicht verwendet, sind die Ergebnisse unterschiedliche Werte. Duplikate werden nicht nur zwischen Zeilen aus jedem Ergebnis, sondern auch von innen entfernt.
Union drei Tabellen
Angenommen, das Management möchte eine kombinierte Liste von Personen, Anbietern und Speichernamen, die nach Quelle identifiziert wurden.
Dazu erstellen wir drei separate Abfragen und verwenden dann die union Klausel, um sie zusammenzusetzen. Wir werden dann die Liste bestellen.,
Auf den ersten Blick denken Sie vielleicht, dass die ORDER BY Klausel nur für die letzte select Anweisung gelten würde, aber tatsächlich gilt sie für alle von der Union zurückgegebenen Ergebnisse. Die Datenbank-Engine verarbeitet zuerst alle Union-Anweisungen und dann die order by.
Wenn Sie Zweifel an der Verarbeitungsreihenfolge haben, können Sie mit Klammern „()“ die Reihenfolge der Auswertung ähnlich wie mit Ausdrücken steuern. So würde die Anweisung im Allgemeinen mit Klammern aussehen: