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 table2Beide 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
| 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 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 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 fasst 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 ü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;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