Geschrieben von: Christian Holm
Kategorie: Datenbank
This printed page brought to you by AlphaSierraPapa
Dieser Artikel stellt Ihnen den T-SQL UNION Operator in Anwendung und Funktion vor. Im Gegensatz zur Verwendung von JOIN werden hier die Ergebnisse von zwei oder mehreren Queries (Abfragen) kombiniert angezeigt. Der UNION Operator findet also Anwendung z.B. wo die WHERE Clause in Verbindung mit den logischen Operatoren keine Ergebnisse liefern kann oder wenn Views erstellt werden sollen, die sich auf mehrere Datenbanken oder SQL-Server Instanzen beziehen.
Die Beispielqueries, die in diesem Artikel gezeigt werden, demonstrieren folgende Anwendungen:
Bevor ich mit den Beispielen beginne, natürlich die syntaktisch richtige Verwendung des UNION Operators zuallererst:
Query_1 UNION [ALL] Query_2 ... UNION [ALL] Query_n
Der Ausdruck Query repräsentiert hier eine beliebige SQL-Abfrage. Mit UNION können je nach Erfordernis beliebig viele Queries verbunden werden. Wenn das optionale ALL-Keyword verwendet wird, werden auch duplikate Datensätze im Ergebnis mitangezeigt. Natürlich müssen Sie bei der Verwendung des Operators auch einiges beachten:
Beispiel:
Tabelle Sales2000 | Tabelle Sales2001 | ||
---|---|---|---|
Quarter | Amount | Amount | Quarter |
1 | 2421 | 3654 | 1 |
2 | 2023 | 1265 | 2 |
SELECT Quarter, Amount FROM Sales2000 UNION SELECT Quarter, Amount FROM Sales2001 /* Reihenfolge der Tabelle in der Resultatanzeige geändert */
Beispiel:
SELECT Feld1, Feld2, Feld_n FROM Table/DB/Instance UNION SELECT Feld1, Feld2, Feld_m FROM Table/DB/Instance /* wobei n gleich m */
Beispiel:
SELECT SurName AS LastName FROM Table/DB/Instance UNION SELECT LastName FROM Table/DB/Instance
Nach dieser Einführung in Syntax und Verwendung, folgt nun die Implementierung der eingangs erwähnten Problemstellungen:
Angenommen, Sie wollen die Gesamtanzahl aller verkauften Produkte Ihrer Firma anzeigen. Da aber jede Produktionsstätte (A,B,C), wo die Produkte hergestellt werden, eine eigene Tabelle besitzt, müssen Sie in mehreren Tabellen nach den verkauften Produkten suchen. Da Duplikate möglich sind (jede Produktionsstätte kann ja dieselben Produkte erstellen), ist die Verwendung von ALL notwendig:
SELECT ProductName, UnitsSold FROM Facts_Divison_A UNION ALL SELECT ProductName, UnitsSold FROM Facts_Divison_B UNION ALL SELECT ProductName, UnitsSold FROM Facts_Divison_C
Natürlich können die die einzelnen Tabellen aus dem vorigen Beispiel auch auf verschiedenen Instanzen verteilt sein:
SELECT ProductName, UnitsSold FROM SVR_USA.MyCompanyDB.dbo.Facts_Divison_A UNION ALL SELECT ProductName, UnitsSold FROM SVR_EUROPE.MyCompanyDB.dbo.Facts_Divison_B UNION ALL SELECT ProductName, UnitsSold FROM SVR_ASIA.MyCompanyDB.dbo.Facts_Divison_C
Mit Views können Sie Daten aggregieren, die z.B. auf mehrere SQL-Server Instanzen aufgeteilt sind. Die Erstellung einer View (Division_Cluster) unter Verwendung des UNION Operators könnte dann so aussehen:
CREATE VIEW Division_Cluster AS SELECT ProductName, UnitsSold FROM SVR_USA.MyCompanyDB.dbo.Facts_Divison_A UNION ALL SELECT ProductName, UnitsSold FROM SVR_EUROPE.MyCompanyDB.dbo.Facts_Divison_B UNION ALL SELECT ProductName, UnitsSold FROM SVR_ASIA.MyCompanyDB.dbo.Facts_Divison_C
Dieser Artikel zeigte Ihnen anhand von einfachen Beispielen die Verwendung des UNION SQL-Operators und die hierfür einzuhaltenden Regeln. Mit dem UION Operator müssen die Abfragen nicht mehr auf eine Tabelle beschränkt werden sondern es können mit einem Job mehrere Tabellen, Datenbanken oder auch Instanzen abgefragt werden.
This printed page brought to you by AlphaSierraPapa
Aktualisieren von Daten mit dem UPDATE Statement
http:/www.aspheute.com/artikel/20001124.htm
Das SQL Join Statement
http:/www.aspheute.com/artikel/20001023.htm
Die SQL ORDER BY Clause
http:/www.aspheute.com/artikel/20001201.htm
Einfügen eines Datensatzes mit dem INSERT Statement
http:/www.aspheute.com/artikel/20001107.htm
Stored Procedures einfach erstellt
http:/www.aspheute.com/artikel/20020903.htm
T-SQL Clauses: GROUP BY und HAVING
http:/www.aspheute.com/artikel/20011017.htm
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.