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 untereinander zusammen. Um UNION zu verwenden, schreiben wir:
SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2Beide SELECT-Anweisungen müssen die folgenden Regeln befolgen:
- Die Anzahl der Felder muss gleich sein
- Die Reihenfolge ist wichtig
- Die Spalten an derselben Stelle müssen zu den Datentypen passen
Nehmen wir zum Beispiel an, dass wir die folgenden Tabellen haben:
germany_people
| id | name |
| 1 | Lena |
| 2 | Leonie |
england_people
| id | name |
| 1 | George |
| 2 | Lena |
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_peopleErgebnis:
| 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_peopleErgebnis:
| 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 die Gruppierung und Sortierung darauf anzuwenden.
Nehmen wir zum Beispiel an, wir möchten 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 DESCErgebnis:
| name | total_count |
| Lena | 2 |
| Leonie | 1 |
| George | 1 |
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 fassen GROUP BY + COUNT sie zusammen. ORDER BY sortiert das Endergebnis.
Aufgabe
EinfachVerfügbare Tabellen und Spalten:
sales_2009:product_id,quantity_soldsales_2010:product_id,quantity_soldsales_2011:product_id,quantity_sold
Es gibt 3 Verkaufstabellen.
Ermittle die Summe der Verkäufe für jedes Produkt aus allen Tabellen zusammen.
Das Ergebnis sollte die product_id und den Gesamtumsatz enthalten.
Benenne diese Spalte total_sales.
Sortiere die Ergebnisse nach dem Gesamtumsatz in absteigender Reihenfolge.
Probier es selbst
-- Die drei Tabellen zu einem Ergebnis stapeln und dabei jede Zeile behalten
SELECT product_id, ____ AS total_sales
FROM (
SELECT * FROM sales_2009
____
SELECT * FROM sales_2010
____
SELECT * FROM sales_2011
)
-- Eine Zeile pro Produkt, größter Gesamtwert zuerst
GROUP BY ____
ORDER BY ____ DESC;Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
4Weitere Schlüsselwörter
Das IN-SchlüsselwortDas BETWEEN-SchlüsselwortDas LIKE-SchlüsselwortDas AS-SchlüsselwortRückblick – Handymodelle7Datumsangaben
Datumsangaben behandeln – Teil 1Datumsangaben behandeln – Teil 2Datumsangaben behandeln – Teil 32Bedingungen
Grundlagen der BedingungenDas Schlüsselwort ANDDas Schlüsselwort ORDas Schlüsselwort NOTMehrere kombinierte BedingungenKlammernBoolesche Werte5Arithmetische Operationen
Mathematische OperatorenMathematische SpaltenDie Modulo-OperationDie ROUND()-Funktion3Spezifisches Rückgabeformat
NULL-WerteErgebnisse sortieren Teil 1Ergebnisse sortieren Teil 2Zusammenfassung - Cyber Security FirmAnzahl der Datensätze begrenzenZusammenfassung - Vehicle Factory6Einführungsaufgaben
Wiederholung – ParlamentswahlWiederholung – Festnahme eines Straftäters durch die PolizeiWiederholung – Getränkebehälter an der BarWiederholung – Neue Spalten erstellenÜbe selbstständig: SQL-Playground