Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Der SQL UNION Operator

Geschrieben von: Christian Holm
Kategorie: Datenbank

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:

  • Finden eines Suchbegriffs in mehreren Tabellen
  • Finden eines Suchbegriffs in mehreren Datenbanken oder wenn eine Datenbank geclustert ist (auf mehrere Instanzen verteilt)

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:

  • Die Datentypen der Spalten müssen kompatibel sein, d.h. es muß entweder ein impliziter Cast (z.B. int auf double) möglich sein, oder wenn dies nicht möglich ist, muß ein expliziter Cast erfolgen. - dies bezieht sich auch auf die Anordnung der Spalten in der Abfrage.

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 */
  • Alle Queries die mit Union verbunden werden müssen die gleiche Anzahl von Ausdrücken (z.B. Feldnamen) haben

Beispiel:

SELECT Feld1, Feld2, Feld_n FROM Table/DB/Instance
UNION
SELECT Feld1, Feld2, Feld_m FROM Table/DB/Instance /* wobei n gleich m */
  • Die Spalten für das Resultat werden von der ersten Abfrage genommen, d.h. wenn in zwei unterschiedlichen Tabellen zwar sinngemäß gleichartige Spalten vorhanden sind, aber mit unterschiedlichem Namen dann muß eine Referenz erstellt werden.

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:

Finden eines Suchbegriffs in mehreren Tabellen

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

Finden eines Suchbegriffs in mehreren Datenbanken oder Instanzen

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

Erstellen eines Views

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

Schlußbemerkung

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.

Verwandte Artikel

Aktualisieren von Daten mit dem UPDATE Statement
Das SQL Join Statement
Die SQL ORDER BY Clause
Einfügen eines Datensatzes mit dem INSERT Statement
Stored Procedures einfach erstellt
T-SQL Clauses: GROUP BY und HAVING

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©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.