⚡ Lehrpfad 3: Aggregationen, CTEs & Window Functions

SQL 10: Subqueries & Mengenoperationen

Meistere verschachtelte Abfragen und mengentheoretische Verknüpfungen: Skalare und korrelierte Unterabfragen, EXISTS, UNION, UNION ALL, INTERSECT und EXCEPT.

📂 Dateien dieser Lerneinheit:
📄 aufgabe.sql (Startercode) 🧪 test_aufgabe.sql (Testsuite) 💡 musterloesung.sql (Lösung) 📖 README.md

🔍 1. Subqueries (Unterabfragen)

Eine Subquery ist ein in runden Klammern eingebettetes SELECT. Man unterscheidet zwischen:

📐 Skalare Subquery

Liefert exakt einen einzelnen Wert (1 Zeile, 1 Spalte), z.B. einen Durchschnitt:

SELECT name, preis 
FROM produkte 
WHERE preis > (SELECT AVG(preis) FROM produkte);

🔗 Korrelierte Subquery

Referenziert Spalten der äußeren Abfrage und wird für jede äußere Zeile evaluiert:

SELECT k.name FROM kunden k
WHERE EXISTS (
    SELECT 1 FROM bestellungen b 
    WHERE b.kunde_id = k.id
);

🔀 2. Mengenoperationen (Set Operations)

Mengenoperatoren kombinieren die Zeilen zweier oder mehrerer SELECT-Abfragen. Voraussetzung: Beide Abfragen müssen die gleiche Spaltenanzahl und kompatible Datentypen besitzen!

UNION

Vereinigung aller Zeilen ohne Duplikate.

UNION ALL

Vereinigung aller Zeilen inklusive Duplikate (deutlich schneller!).

INTERSECT

Schnittmenge: Nur Zeilen, die in beiden Abfragen vorkommen.

EXCEPT

Differenz: Zeilen der ersten Abfrage abzüglich der zweiten.

Venn-Diagramme & Kunden-Matching

🛒 Der Omnichannel-Kunden-Vergleich

Menge A: Kunden, die im Online-Shop gekauft haben.

Menge B: Kunden, die im Ladengeschäft (Filiale) gekauft haben.

UNION: Alle Kunden, die jemals irgendwo eingekauft haben.

INTERSECT: Treue Omnichannel-Kunden (kaufen online UND in der Filiale).

EXCEPT: Reine Online-Kunden (Kauf online, aber noch NIE in der Filiale).

📑 4. Cheat-Sheet: Subqueries & Mengenoperatoren

Operator / Konstrukt Bedeutung Beispiel
WHERE spalte IN (SELECT ...) Prüft, ob Wert in einer Subquery-Ergebnisliste vorkommt WHERE kat_id IN (SELECT id FROM top_kats)
WHERE EXISTS (SELECT 1 ...) Gibt true zurück, sobald mindestens 1 Zeile matcht (Short-Circuit) WHERE EXISTS (SELECT 1 FROM orders WHERE ...)
SELECT ... UNION ALL SELECT ... Stapelt zwei Ergebnistabellen untereinander ohne Deduplizierung SELECT 'A' UNION ALL SELECT 'B'
SELECT ... EXCEPT SELECT ... Entfernt alle Treffer der zweiten Tabelle aus der ersten SELECT id FROM all_users EXCEPT SELECT id FROM banned

🎯 5. Aufgaben & Checkliste in aufgabe.sql

Öffne die Datei aufgabe.sql und implementiere die 4 Aufgaben:

💻 In Web-IDE öffnen & lösen →