Menu
Coddy logo textTech

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 zwei Tabellen übereinander hinzu. 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 befolgen:

  • Die Anzahl der Felder muss gleich sein
  • Die Reihenfolge ist wichtig
  • Die Spalten an der gleichen Stelle müssen mit den Datentypen übereinstimmen

Nehmen wir zum Beispiel an, wir haben 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 so wie sie sind zurückgibt:

SELECT name from germany_people
UNION ALL
SELECT name from england_people

Ergebnis:

Name
Lena
Leonie
George
Lena

Sie können UNION ALL auch mit Aggregatfunktionen, GROUP BY und ORDER BY kombinieren, um Daten über mehrere Tabellen hinweg zusammenzufassen. Der Trick besteht darin, das UNION ALL in eine Unterabfrage einzuschließen und dann Gruppierung und Sortierung darauf 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 beibehalten werden — andernfalls würden sie vor dem Zählen entfernt werden. Die Unterabfrage führt alle Zeilen zusammen, und anschließend fassen GROUP BY + COUNT diese zusammen. ORDER BY sortiert das Endergebnis.

challenge icon

Aufgabe

Einfach

Verfügbare Tabellen und Spalten:

  • <strong>sales_2009</strong>: <strong>product_id</strong>, <strong>quantity_sold</strong>
  • <strong>sales_2010</strong>: <strong>product_id</strong>, <strong>quantity_sold</strong>
  • <strong>sales_2011</strong>: <strong>product_id</strong>, <strong>quantity_sold</strong>

Es gibt 3 Verkaufstabellen.

Finden Sie die Summe der Verkäufe für jedes Produkt aus allen Tabellen zusammen.

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

Nennen Sie diese Spalte total_sales.

Sortieren Sie die Ergebnisse nach den Gesamtverkäufen in absteigender Reihenfolge.

Spickzettel

UNION kombiniert Tabellen, indem sie vertikal gestapelt werden. Im Gegensatz zu Joins verwenden Unions keine Bedingungen – sie fügen Tabellen einfach übereinander hinzu.

Grundlegende UNION-Syntax:

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

UNION-Regeln:

  • Die Anzahl der Felder muss gleich sein
  • Die Reihenfolge ist wichtig
  • Spalten an der gleichen Position müssen übereinstimmende Datentypen haben

UNION vs. UNION ALL:

  • UNION gibt nur eindeutige Werte zurück
  • UNION ALL gibt alle Datensätze einschließlich Duplikate zurück
SELECT name FROM germany_people
UNION
SELECT name FROM england_people
SELECT name FROM germany_people
UNION ALL
SELECT name FROM england_people

Sie können UNION ALL innerhalb einer Unterabfrage verwenden und dann GROUP BY, ORDER BY sowie Aggregatfunktionen auf das kombinierte Ergebnis anwenden:

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

Dies zählt, wie oft jeder Name in beiden Tabellen vorkommt, einschließlich Duplikate.

Probier es selbst

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