SQL - UNION vs UNION ALL
Hallo dort, ambitionierte SQL-Enthusiasten! Heute machen wir uns auf eine aufregende Reise in die Welt von SQL, wobei wir uns insbesondere auf zwei mächtige Operatoren konzentrieren: UNION und UNION ALL. Als dein freundlicher Nachbarschafts-Computerlehrer mit Jahren der Erfahrung unter dem Gürtel, bin ich hier, um dich mit Klarheit, Humor und vielen realen Weltbeispielen durch diese Konzepte zu führen. Also, tauchen wir ein!
Was ist UNION?
Definition und Grundkonzept
UNION ist wie ein Meisterkoch, der Zutaten aus verschiedenen Rezepten kombiniert, um ein einzigartiges Gericht zu.create. In SQL-Begriffen ist es ein Operator, der es uns ermöglicht, die Ergebnisse von zwei oder mehr SELECT-Anweisungen in einen einzigen Ergebnisbereich zusammenzufassen.
Hier ist die grundlegende Syntax:
SELECT spalte1, spalte2, ... FROM tabelle1
UNION
SELECT spalte1, spalte2, ... FROM tabelle2;
Wichtige Merkmale von UNION
- Einzigartige Ergebnisse: UNION entfernt automatisch doppelte Zeilen aus dem endgültigen Ergebnisbereich.
- Spaltenkompatibilität: Die SELECT-Anweisungen müssen die gleiche Anzahl von Spalten haben, und diese Spalten sollten kompatible Datentypen haben.
- Reihenfolge der Spalten: Die Reihenfolge der Spalten in den SELECT-Anweisungen ist wichtig, da sie basierend auf ihrer Position kombiniert werden.
UNION in Aktion
Stellen wir uns vor, wir haben zwei Tabellen: fruits
und vegetables
. Wir möchten eine kombinierte Liste aller Obst- und Gemüsearten erstellen.
-- fruits-Tabelle
CREATE TABLE fruits (
id INT,
name VARCHAR(50),
color VARCHAR(20)
);
INSERT INTO fruits VALUES
(1, 'Apple', 'Red'),
(2, 'Banana', 'Yellow'),
(3, 'Orange', 'Orange');
-- vegetables-Tabelle
CREATE TABLE vegetables (
id INT,
name VARCHAR(50),
color VARCHAR(20)
);
INSERT INTO vegetables VALUES
(1, 'Carrot', 'Orange'),
(2, 'Broccoli', 'Green'),
(3, 'Tomato', 'Red');
-- UNION-Abfrage
SELECT name, color FROM fruits
UNION
SELECT name, color FROM vegetables;
Diese Abfrage gibt uns:
name | color |
---|---|
Apple | Red |
Banana | Yellow |
Orange | Orange |
Carrot | Orange |
Broccoli | Green |
Tomato | Red |
Beachten Sie, wie wir nur einen 'Orange'-Eintrag haben, obwohl er in beiden Tabellen vorkommt. Das ist die Magie von UNION – er entfernt Duplikate!
Was ist UNION ALL?
Definition und Grundkonzept
Nun møeten wir UNIONs enthusiastischen Cousin, UNION ALL. Während UNION wie ein sorgfältiger Koch ist, der Duplikate entfernt, glaubt UNION ALL daran: "Je mehr, desto besser!"
Die Syntax ist ähnlich wie bei UNION:
SELECT spalte1, spalte2, ... FROM tabelle1
UNION ALL
SELECT spalte1, spalte2, ... FROM tabelle2;
Wichtige Merkmale von UNION ALL
- Behält Duplikate bei: UNION ALL behält alle Zeilen, einschließlich Duplikate, bei.
- Bessere Leistung: Da es keine Duplikate entfernen muss, ist UNION ALL im Allgemeinen schneller als UNION.
- Spaltenkompatibilität: Wie UNION erfordert es die gleiche Anzahl von Spalten mit kompatiblen Datentypen.
UNION ALL in Aktion
Wir verwenden wieder unsere fruits
und vegetables
Tabellen:
SELECT name, color FROM fruits
UNION ALL
SELECT name, color FROM vegetables;
Diese Abfrage erzeugt:
name | color |
---|---|
Apple | Red |
Banana | Yellow |
Orange | Orange |
Carrot | Orange |
Broccoli | Green |
Tomato | Red |
Beachten Sie, dass wir jetzt zwei 'Orange'-Einträge haben – einen aus fruits und einen aus vegetables. UNION ALL behält alle Zeilen bei, einschließlich Duplikate!
UNION vs UNION ALL: Ein Kopf-an-Kopf-Vergleich
Um das真正的 Unterschied wirklich zu verstehen, vergleichen wir sie Seite an Seite:
Merkmal | UNION | UNION ALL |
---|---|---|
Duplikate Handling | Entfernt Duplikate | Behält alle Duplikate bei |
Leistung | Langsamer (wegen Deduplizierung) | Schneller |
Ergebnisgröße | Potentiell kleiner | Potentiell größer |
Verwendungszweck | Wenn einzigartige Ergebnisse benötigt werden | Wenn alle Ergebnisse, einschließlich Duplikate, erforderlich sind |
Wann man UNION verwendet
Verwenden Sie UNION, wenn Sie Ergebnisse aus mehreren Abfragen kombinieren möchten und sicherstellen möchten, dass jede Zeile im Ergebnisbereich einzigartig ist. Es ist perfekt für Szenarien wie:
- Kombination von Kundenlisten aus verschiedenen Regionen, um Duplikate zu vermeiden.
- Zusammenführen von Produktkatalogen von verschiedenen Lieferanten, um doppelte Artikel zu entfernen.
Wann man UNION ALL verwendet
Wählen Sie UNION ALL, wenn:
- Sie wissen, dass es keine Duplikate in Ihren Datensätzen gibt.
- Sie speziell alle Zeilen, einschließlich Duplikate, behalten möchten.
- Leistung Priorität hat und Sie mit großen Datensätzen arbeiten.
Praktische Beispiele
Lassen Sie uns in einige realistische Szenarien eintauchen, um unser Verständnis zu festigen.
Beispiel 1: Mitarbeiterverzeichnis
Stellen wir uns vor, wir haben zwei Tabellen: current_employees
und former_employees
. Wir möchten ein umfassendes Verzeichnis erstellen.
-- Erstellen und füllen der Tabellen
CREATE TABLE current_employees (id INT, name VARCHAR(50), department VARCHAR(50));
CREATE TABLE former_employees (id INT, name VARCHAR(50), department VARCHAR(50));
INSERT INTO current_employees VALUES
(1, 'Alice', 'HR'),
(2, 'Bob', 'IT'),
(3, 'Charlie', 'Finance');
INSERT INTO former_employees VALUES
(4, 'David', 'Marketing'),
(5, 'Eve', 'IT'),
(2, 'Bob', 'IT'); -- Bob hat hier gearbeitet, ist gegangen und ist zurückgekommen
-- UNION-Abfrage
SELECT name, department FROM current_employees
UNION
SELECT name, department FROM former_employees;
-- UNION ALL-Abfrage
SELECT name, department FROM current_employees
UNION ALL
SELECT name, department FROM former_employees;
Die UNION-Abfrage zeigt Bob nur einmal, während UNION ALL Bob zweimal zeigt.
Beispiel 2: Verkaufsbericht
Lassen Sie uns einen Verkaufsbericht erstellen, der Online- und stationäre Verkäufe kombiniert.
-- Erstellen und füllen der Tabellen
CREATE TABLE online_sales (product VARCHAR(50), amount DECIMAL(10,2));
CREATE TABLE store_sales (product VARCHAR(50), amount DECIMAL(10,2));
INSERT INTO online_sales VALUES
('Laptop', 1200.00),
('Phone', 800.00),
('Tablet', 500.00);
INSERT INTO store_sales VALUES
('Laptop', 1100.00),
('Phone', 750.00),
('Headphones', 200.00);
-- Gesamte Liste einzigartiger verkaufter Produkte (UNION)
SELECT product FROM online_sales
UNION
SELECT product FROM store_sales;
-- Alle Verkaufsdaten (UNION ALL)
SELECT 'Online' AS source, product, amount FROM online_sales
UNION ALL
SELECT 'Store' AS source, product, amount FROM store_sales;
Die UNION-Abfrage gibt uns eine Liste einzigartiger Produkte, die über beide Kanäle verkauft wurden, während UNION ALL eine vollständige Liste aller Verkaufstransaktionen bietet.
Schlussfolgerung
Und dort habt ihr es, meine lieben Schüler! Wir haben die Länder von UNION und UNION ALL bereist, ihre Ähnlichkeiten, Unterschiede und realen Weltanwendungen erkundet. Denkt daran, UNION ist eure Wahl für einzigartige, deduplizierte Ergebnisse, während UNION ALL euer schneller Freund ist, wenn ihr alle Daten, einschließlich Duplikate, benötigt.
Während ihr eure SQL-Abenteuer fortsetzt, werdet ihr zahlreiche Gelegenheiten finden, diese mächtigen Werkzeuge zu verwenden. Genau wie beim Kochen ist der Schlüssel zum perfekten Abfrage-Rezept zu wissen, wann man jedes Werkzeug (oder in unserem Fall, Operator) verwendet.
Weiter üben, bleibt neugierig und fürchtet euch nicht, diese Konzepte auszuprobieren. Bereit für den Pro! Frohes Abfragen!
Credits: Image by storyset