Menu
CoddyTech

Union

Teil des Abschnitts Grundlagen der SQL-Journey von Coddy. Lektion 48 von 72.

Unions unterscheiden sich von Joins. Joins verwenden Bedingungen, um Tabellen zu kombinieren, aber Unions fügen einfach eine Tabelle unter die andere. Um UNION zu verwenden, schreiben wir:

SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2

Beide SELECT-Anweisungen müssen die folgenden Regeln erfüllen:

  • Die Anzahl der Felder muss gleich sein
  • Die Reihenfolge ist wichtig
  • Die Spalten an derselben Position müssen denselben Datentyp haben

Angenommen, wir haben zum Beispiel die folgenden Tabellen:

germany_people

idname
1Lena
2Leonie

england_people

idname
1George
2Lena

Problem: Wir möchten eine große Tabelle mit allen Namen erstellen, die wir haben.

SELECT name from germany_people
UNION
SELECT name from england_people

Ergebnis:

name
Lena
Leonie
George

UNION gibt nur eindeutige Werte zurück, während UNION ALL alle Datensätze unverändert zurückgibt:

SELECT name from germany_people
UNION ALL
SELECT name from england_people

Ergebnis:

Name
Lena
Leonie
George
Lena

Du kannst UNION ALL auch mit Aggregatfunktionen, GROUP BY und ORDER BY kombinieren, um Daten aus mehreren Tabellen zusammenzufassen. Der Trick besteht darin, UNION ALL in eine Unterabfrage einzuschließen und anschließend darauf Gruppierung und Sortierung anzuwenden.

Angenommen, wir möchten beispielsweise zählen, wie oft jeder Name in beiden Tabellen vorkommt:

SELECT name, COUNT(*) AS total_count
FROM (
    SELECT name FROM germany_people
    UNION ALL
    SELECT name FROM england_people
) AS combined
GROUP BY name
ORDER BY total_count DESC

Ergebnis:

nametotal_count
Lena2
Leonie1
George1

Hier wird UNION ALL (nicht UNION) verwendet, damit Duplikate wie Lena erhalten bleiben. Andernfalls würden sie vor dem Zählen entfernt. Die Unterabfrage führt alle Zeilen zusammen, und anschließend fasst GROUP BY + COUNT sie zusammen. ORDER BY sortiert das Endergebnis.

challenge icon

Aufgabe

Einfach

Verfügbare Tabellen und Spalten:

  • sales_2009: product_id, quantity_sold
  • sales_2010: product_id, quantity_sold
  • sales_2011: product_id, quantity_sold

Es gibt 3 Verkaufstabellen.

Ermittle die Summe der Verkäufe für jedes Produkt über alle Tabellen hinweg.

Das Ergebnis sollte die product_id und die Gesamtverkäufe enthalten.

Benenne diese Spalte total_sales.

Sortiere die Ergebnisse nach den Gesamtverkäufen in absteigender Reihenfolge.

Probier es selbst

-- Führe die drei Tabellen zu einem Ergebnis zusammen und behalte dabei jede Zeile bei
SELECT product_id, ____ AS total_sales
FROM (
    SELECT * FROM sales_2009
    ____
    SELECT * FROM sales_2010
    ____
    SELECT * FROM sales_2011
)
-- Eine Zeile pro Produkt, die größte Gesamtsumme zuerst
GROUP BY ____
ORDER BY ____ DESC;
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen

Übe selbstständig: SQL-Playground