Rückblick
Ab hier wird SQL erst richtig nützlich: Die interessanten Fragen betreffen fast nie eine einzelne Tabelle. Dieses Kapitel hat dafür ein einziges Werkzeug geliefert – den Verbund – und drei Formen, in denen er auftritt.
Das kann ich jetzt
- Ich kann erklären, was ein Kreuzprodukt ist und warum es fast nie das gewünschte Ergebnis liefert. (3.1)
- Ich kann zwei Tabellen über eine Fremdschlüsselbeziehung verbinden – in beiden Schreibweisen. (3.1)
- Ich kann Tabellen mit einem Alias abkürzen und weiß, wann das nötig ist. (3.1)
- Ich kann über eine Zuordnungstabelle hinweg verbinden, also drei Tabellen in einer Abfrage. (3.2)
- Ich kann begründen, warum eine n:m-Beziehung eine eigene Tabelle braucht. (3.2)
- Ich kann einen Selbstverbund schreiben und erklären, wozu die dritte Bedingung dient. (3.3)
Gemischte Aufgaben
Aufgabe 1: Vier Verbünde
a) Welche Band spielt am 17. Juli 2026 wann auf welcher Bühne? Ausgabe: Bandname, Bühnenname, Beginn – nach Beginn sortiert.
b) Welche Bands gehören zum Genre Indie? Nur die Namen, alphabetisch.
c) Wer spielt in einer Band mit wem? Gib für die Band Nordlicht alle Paare von Bandmitgliedern aus, jedes Paar nur einmal.
d) Welche Auftritte fanden auf der Seebuehne statt? Ausgabe: Bandname, Datum, Beginn.
Tipp 1: Welche Tabellen brauche ich?
Schreib dir vor jeder Abfrage auf, welche Angaben verlangt sind, und such für jede die Tabelle:
- Bandname →
band - Bühnenname →
buehne - Datum, Beginn, Zuschauer →
auftritt
Kommen zwei Tabellen vor, die nicht direkt aufeinander verweisen, brauchst du die Tabelle dazwischen. Von band nach buehne führt kein direkter Weg – nur über auftritt.
Tipp 2: zu b)
Drei Tabellen, zwei Verbindungsbedingungen:
FROM band b
JOIN band_genre bg ON b.band_id = bg.band_id
JOIN genre g ON g.genre_id = bg.genre_id
Die Zuordnungstabelle steht in der Mitte – sie ist der einzige Weg von der einen zur anderen Seite.
Tipp 3: zu c)
Der Selbstverbund braucht zwei Aliasnamen für dieselbe Tabelle und drei Bedingungen:
- beide in derselben Band,
- die richtige Band,
m1.person_id < m2.person_id– sonst bekommst du jedes Paar zweimal und jede Person mit sich selbst.
Aufgabe 2: Wenn die Verbindungsbedingung fehlt
SELECT b.name, bu.name
FROM band b, buehne bu;
a) Wie viele Zeilen liefert diese Abfrage? Rechne es aus, bevor du sie ausführst. In band stehen 22 Zeilen, in buehne 4.
b) Führe sie aus und prüfe.
c) Was steht inhaltlich in diesen Zeilen? Ist das eine sinnvolle Auskunft?
d) Ergänze die Abfrage so, dass sie beantwortet, welche Band tatsächlich auf welcher Bühne gespielt hat. Wie viele Zeilen sind es dann?
e) Erkläre, warum ein vergessenes ON besonders tückisch ist: Was passiert bei zwei Tabellen mit je 100 000 Zeilen?
Aufgabe 3: Beziehungen unterscheiden
Sieh dir das Schema der Klangwiese an.
a) Welche Art von Beziehung besteht zwischen band und auftritt? Woran erkennst du das im Schema?
b) Welche zwischen band und genre? Woran erkennst du das?
c) Warum hat mitgliedschaft zusätzlich die Attribute instrument und seit, während band_genre nur aus zwei Fremdschlüsseln besteht?
d) Jemand schlägt vor, die Tabelle band_genre abzuschaffen und stattdessen in band eine Spalte genres einzuführen, in der die Genres durch Kommas getrennt stehen. Nenne zwei Gründe, die dagegen sprechen.