🔍 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
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 |
🧠 Diagnostischer Selbst-Check
Überprüfe dein Verständnis der Kernkonzepte und typischen Denkfallen, bevor du den Code in der Web-IDE schreibst.
🎯 5. Aufgaben & Checkliste in aufgabe.sql
Öffne die Datei aufgabe.sql und implementiere die 4 Aufgaben: