TOP

SQL-Lektion 12. Kombinierte Abfragen (UNION)

Die meisten SQL-Abfragen verwenden eine einzelne Anweisung, die Daten aus einer oder mehreren Tabellen zurückgibt. Mit SQL können Sie außerdem mehrere separate Abfragen gleichzeitig ausführen und das Ergebnis als einen einzelnen Datensatz anzeigen. Solche kombinierten Abfragen werden üblicherweise als Joins oder zusammengesetzte Abfragen bezeichnet.


1. Verwendung des UNION-Operators

SQL-Abfragen werden mit dem Operator UNION kombiniert. Dazu müssen Sie jede Anfrage mit SELECT angeben und das Schlüsselwort UNION dazwischen platzieren. Es gibt keine Begrenzung für die Anzahl der Verwendungen des Operators UNION in einer allgemeinen Abfrage. Im vorherigen Abschnitt haben wir festgestellt, dass MS Access nicht in der Lage ist, eine vollständige äußere Union zu erstellen. Jetzt werden wir sehen, wie dies mit dem Operator UNION erreicht werden kann.

Run SQLSELECT *
FROM Sumproduct 
LEFT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City
UNION
SELECT * 
FROM Sumproduct 
RIGHT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City

Wir sehen, dass die Abfrage sowohl alle Spalten der ersten als auch der zweiten Tabelle anzeigte, unabhängig davon, ob alle Datensätze Entsprechungen in einer anderen Tabelle haben.

Es ist auch erwähnenswert, dass wir in vielen Fällen anstelle von UNION die WHERE-Klausel mit vielen Bedingungen verwenden und ein ähnliches Ergebnis erzielen können. Durch UNION sehen die Datensätze jedoch prägnanter und klarer aus.

Auch beim Schreiben kombinierter Abfragen müssen bestimmte Regeln beachtet werden:

  • Die UNION-Anfrage muss zwei oder mehr SELECT-Operatoren enthalten, die durch das Schlüsselwort UNION getrennt sind (d. h. wenn in der Anfrage vier SELECT-Operatoren verwendet werden, müssen drei UNION-Schlüsselwörter vorhanden sein);
  • Jede Abfrage im UNION-Operator muss dieselben Spalten, Ausdrücke oder statistischen Funktionen haben, die darüber hinaus in derselben Reihenfolge aufgelistet sein müssen.
  • Spaltendatentypen müssen kompatibel sein. Sie müssen nicht unbedingt vom gleichen Typ sein, aber sie müssen einen ähnlichen Typ haben, damit das DBMS sie eindeutig konvertieren kann (es kann sich beispielsweise um unterschiedliche numerische Datentypen oder unterschiedliche Datumstypen handeln).
  • 2. Wiederholte Zeilen einschließen oder ausschließen

    Eine Abfrage mit UNION entfernt automatisch alle doppelten Zeilen aus der Abfrageergebnismenge (mit anderen Worten, verhält sich wie eine WHERE-Klausel mit mehreren Bedingungen in einer einzelnen SELECT-Anweisung). Dies ist das Standardverhalten des UNION-Operators, aber wir können es ändern, wenn wir möchten. Dafür sollten wir den Operator UNION ALL anstelle von UNION verwenden.

    3. Sortieren der Ergebnisse kombinierter Abfragen

    Die Ergebnisse der SELECT-Anweisung werden mit der ORDER BY-Anweisung sortiert. Beim Kombinieren von Abfragen mit UNION kann nur eine ORDER BY-Klausel verwendet werden und diese muss in der letzten SELECT-Anweisung platziert werden. Tatsächlich macht es in der Praxis wenig Sinn, einen Teil der Ergebnisse in einer Reihenfolge und den anderen Teil in einer anderen zu sortieren. Daher sind mehrere Sätze ORDER BY nicht zulässig.