Informatik

Kreuzprodukt und Verbund

In der Tabelle auftritt steht nicht, welche Band spielt – dort steht nur eine Nummer:

Um aus band_id = 16 den Namen Elster zu machen, muss die Datenbank in band nachsehen. Das ist die Aufgabe des Verbunds.

Erst der Umweg: das Kreuzprodukt

Was passiert, wenn man einfach zwei Tabellen im FROM aufzählt?

a) Wie viele Zeilen liefert die Abfrage? Rechne es vorher aus: auftritt hat 46 Zeilen, band hat 22.

b) Sieh dir die ersten Zeilen an. Was stimmt an ihnen nicht?

c) Formuliere eine Bedingung, die genau die sinnvollen Zeilen übrig lässt.

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Das Kreuzprodukt (kartesisches Produkt) zweier Relationen enthält jede Kombination aus einem Tupel der einen und einem Tupel der anderen. Es hat so viele Zeilen wie das Produkt der beiden Zeilenzahlen.

Für sich genommen ist es selten nützlich – aber es ist die Grundlage, aus der jeder Verbund entsteht.

Der Verbund

Ein Verbund (englisch join) verknüpft zwei Relationen über eine Bedingung. Bei einem natürlichen Verbund ist diese Bedingung die Gleichheit von Fremdschlüssel und Primärschlüssel.

Aus dem Kreuzprodukt bleiben genau die Zeilen übrig, in denen die Bedingung erfüllt ist.

Zwei Schreibweisen

Dieselbe Abfrage lässt sich auf zwei Arten formulieren:

Beide liefern dasselbe. Die JOIN-Schreibweise ist trotzdem besser:

  • Sie trennt die Verbundbedingung von der eigentlichen Auswahlbedingung. Im WHERE steht dann nur noch, was du wirklich suchst.
  • Sie macht es schwerer, eine Verbundbedingung zu vergessen. Genau das ist der häufigste Fehler bei der alten Schreibweise – und man merkt ihn nicht sofort, weil die Abfrage ja ein Ergebnis liefert. Nur eben ein viel zu großes.

Im Lernpfad wird ab hier JOIN verwendet. Die alte Schreibweise solltest du trotzdem lesen können, denn sie steht in vielen Büchern und Klausuren.

Tabellen abkürzen

Bei mehreren Tabellen wird es schnell lang. Auch Tabellen dürfen einen Alias bekommen:

Sobald zwei Tabellen eine Spalte mit demselben Namen haben – hier heißt name sowohl in band als auch in buehne so –, musst du den Tabellennamen davorschreiben. Sonst weiß die Datenbank nicht, welche Spalte gemeint ist.

Gewöhne dir an, den Tabellennamen immer davorzuschreiben, auch wenn es nicht nötig wäre. Die Abfrage bleibt dann auch lesbar, wenn später eine Spalte dazukommt.

Aufgaben

a) Zeige zu jedem Auftritt den Namen der Bühne, das Datum und den Beginn.

b) Zeige alle Auftritte auf der Waldbühne mit Bandnamen, Datum und Beginn.

c) Zeige zu jedem Ticket den Namen der Person, die es gekauft hat, sowie Kategorie und Preis.

d) Zeige alle Auftritte, die vor mehr als 3000 Zuschauern stattfanden, mit Bandname, Bühnenname und Zuschauerzahl.

Tipp 1: Welche Tabellen brauche ich?

Schreibe zuerst auf, in welcher Tabelle jede gewünschte Angabe steht. Für d) sind das drei: die Zuschauerzahl in auftritt, der Bandname in band, der Bühnenname in buehne.

Tipp 2: Wie viele Verbundbedingungen?

Bei zwei Tabellen brauchst du eine Verbundbedingung, bei drei Tabellen zwei. Als Faustregel: eine weniger als Tabellen. Fehlt eine, wird das Ergebnis viel zu groß.

Tipp 3: Gerüst für d)
SELECT
  FROM auftritt AS a
  JOIN band AS b ON
  JOIN buehne AS s ON
 WHERE …;
Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Selbsttest

Kreuzprodukt und Verbund

Teilbare URL erstellen

Abschnitte auswählen