Von: Greg Robidoux / Aktualisiert: 2019-10-29 / Kommentare (4) / Verwandte: 1 | 2 | 3 | 4 | 5 | Mehr > JOIN Tables
Problem
Manchmal besteht die Notwendigkeit, Daten aus mehreren Tabellen oder Ansichten zu kombinierenein umfassender Datensatz. Dies kann für Tabellen mit ähnlichen Daten innerhalb der Samedatabase gelten oder es besteht die Notwendigkeit, ähnliche Daten über Datenbanken oder sogar über Server hinweg zu kombinieren.
In diesem Tipp werfen wir einen Blick auf die Verwendung von Befehlen UNION vs. UNIONALL und wie sie sich unterscheiden.,
Lösung
In SQL Server können Sie mehrere Datensätze mithilfe der Operatoren UNION oder UNION ALL zu einem umfassenden Dataset kombinieren. Es gibt einen großen Unterschied inwow diese Arbeit sowie die endgültige Ergebnismenge, die zurückgegeben wird, aber im Grunde thesecommands verbinden mehrere Datensätze, die ähnliche Strukturen in einem kombinierten Datensatz haben.
UNION
Mit diesem Vorgang können Sie Multipledatasets zu einem Datensatz verbinden und vorhandene Duplikate entfernen. Grundsätzlich führt es eine EINDEUTIGE Operation über alle Spalten in der Ergebnismenge aus.,
UNION ALL
Mit diesem Vorgang können Sie erneut verknüpfenmultiple-Datensätze in einem Datensatz, entfernt jedoch keine doppelten Zeilen.Da dadurch keine doppelten Zeilen entfernt werden, ist dieser Vorgang schneller, aber wenn Sie keine doppelten Datensätze möchten, müssen Sie stattdessen den UNION-Operator verwenden.,h Abfrage muss die gleiche Anzahl von Spalten haben
Tipp: Wenn Sie nicht in allen Abfragen genau die gleichen Spalten haben
SELECT firstName, lastName, company FROM businessContactsUNIONSELECT firstName, lastName, NULL FROM nonBusinessContactsorSELECT firstName, lastName, createDate FROM businessContactsUNION ALLSELECT firstName, lastName, getdate() FROM nonBusinessContacts
UNION vs., UNION ALLE Beispiele
Werfen wir einen Blick auf ein paar einfache Beispiele, wie diese Befehle funktionieren und wieSie unterscheiden. Wie Sie sehen werden, unterscheiden sich die endgültigen Resultsets, aber es gibt someinteresting Informationen darüber, wie SQL Server den Prozess tatsächlich abschließt.
UNION ALL
In diesem ersten Beispiel verwenden wir den Operator UNION ALL für das Employeetable aus der AdventureWorks-Datenbank. Dies ist wahrscheinlich nicht etwas, das Sie woulddo, aber dies hilft, die Unterschiede dieser beiden Operatoren zu veranschaulichen.
In Tabelle dbo befinden sich 290 Zeilen.Mitarbeiter.,
SELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.Employee
Wenn diese Abfrage ausgeführt wird, enthält die Ergebnismenge 870 Zeilen. Dies ist die 290 Zeilen returned3 mal. Die Daten werden nur ein Dataset über dem anderen Dataset zusammengesetzt.
Hier ist der Ausführungsplan für diese Abfrage. Wir können sehen, dass die Tabelle drei Mal quer gestellt wurde3 mal und SQL Server hat einen Verkettungsschritt durchgeführt, um alle Daten zu verketten.
UNION
In diesem nächsten Beispiel verwenden wir den UNION Operator für die Employee tableagain aus der AdventureWorks Datenbank.,
SELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.Employee
Wenn diese Abfrage ausgeführt wird, enthält die Ergebnismenge 290 Zeilen. Obwohl wir die Daten dreimal kombiniert haben, hat der UNION-Operator die doppelten Datensätze entfernt und daher nur die 290 eindeutigen Zeilen geändert.
Hier ist der Ausführungsplan für diese Abfrage. Wir können sehen, dass SQL Server zuerst queried2 der Tabellen, dann hat eine Merge Join-Operation, um die ersten beiden Tabellen zu kombinierenund dann hat es eine andere Merge Join zusammen mit der Abfrage der dritten Tabelle in der Abfrage.,Wir können also sehen, dass viel mehr Arbeit geleistet werden musste, um diese Ergebnismenge im Vergleich zur UNION ALL zu erhalten.
UNION vs. UNION ALLE Beispiele mit Sort on Clustered Index Column
Wenn wir dies noch einen Schritt weiter gehen und eine ART der Daten mit der Spalte ClusteredIndex erstellen, erhalten wir diese Ausführungspläne. Daraus können wir sehen, dass der Ausführungsplan, den SQL Server verwendet, für jede dieser Operationen identisch ist, obwohl die endgültigen Ergebnismengen weiterhin 870 Zeilen für die UNION ALL und 290 Zeilen für die UNION enthalten.,
UNION ALL-Ausführungsplan mit Sortieren gruppierten index Spalte
UNION Ausführungsplan mit Sortieren gruppierten index Spalte
UNION vs. UNION ALL-Beispiele Mit Sortierung auf Nicht indizierten Spalte
Hier ist ein weiteres Beispiel, die gleiche Sache zu tun, aber dieses mal einer SORTIERUNG auf anon indizierte Spalte. Wie Sie sehen, sind die Ausführungspläne für diese beiden Abfragen wieder identisch, aber diesmal werden anstelle eines MERGE JOINS eine VERKETTUNG und SORToperations verwendet.,
- Werfen Sie einen Blick auf diese anderen Tipps, die nützlich sein können für die Verwendung der union Operatoren
- Vergleich mehrerer Datensätze mit dem INTERSECTand AUßER Operatoren
- SQL Server vierteilige Benennung
- Vergleichen SQL Server Ergebnisse von zwei Abfragen mit UNION
Zuletzt aktualisiert: 2019-10-29
Über den Autor
alle meine Tipps
Leave a Reply