MINT lernen

Verbundabfragen

Die Kundin steht in der einen Tabelle, ihre Bestellung in der anderen — die Verbundbedingung bringt beides wieder zusammen.

1

Jede Zeile mit jeder — das Kreuzprodukt

  • Mehrere Tabellen:FROM Kunde, Bestellung kombiniert jede Zeile von Kunde mit jeder Zeile von Bestellung.
  • Kartesisches Produkt:aus \(m\) und \(n\) Zeilen entstehen \(m \cdot n\) Zeilen — die meisten davon ohne Sinn.
  • Punktschreibweise:gleiche Attributnamen unterscheidet man mit dem Tabellennamen: Kunde.KNr, Bestellung.KNr.
  • Verbund:erst die Verbundbedingung behält nur die Paare, die wirklich zusammengehören.

Starte die Simulation: Die Datenbank prüft jedes Paar aus einer Kunden- und einer Bestellzeile. Schalte die Verbundbedingung im Balken aus und wieder an und vergleiche die Länge des Ergebnisses.

Der Verbund in Zeitlupe

Halte fest: Ohne Verbundbedingung liefert FROM Kunde, Bestellung alle 3 · 4 = 12 Paare. Die Bedingung Kunde.KNr = Bestellung.KNr behält nur die 4 Paare, in denen der Fremdschlüssel auf den richtigen Kunden zeigt.

2

Die Verbundbedingung

  • Form:Primärschlüssel = Fremdschlüssel: WHERE Kunde.KNr = Bestellung.KNr.
  • Anzahl:bei \(k\) Tabellen braucht man \(k-1\) Verbundbedingungen, verknüpft mit AND.
  • Weitere Filter:zusätzliche Bedingungen hängt man mit AND an die Verbundbedingung an.
  • Zwischentabelle:bei m:n-Beziehungen führt der Weg über die Zwischentabelle — zwei Verbundbedingungen.

Herleitung:

SELECT *
FROM Kunde, Bestellung;
verbinden
Frage: An welchen Tagen haben Kunden aus Hannover bestellt? Zuerst alle 12 Kombinationen.
SELECT *
FROM Kunde, Bestellung
WHERE Kunde.KNr = Bestellung.KNr;
filtern
Nur passende Paare bleiben: 4 Zeilen, eine je Bestellung.
SELECT *
FROM Kunde, Bestellung
WHERE Kunde.KNr = Bestellung.KNr
  AND Kunde.Ort = 'Hannover';
Spalten wählen
Die zusätzliche Bedingung wird mit AND angehängt: 3 Zeilen.
SELECT Kunde.Name, Bestellung.Datum
FROM Kunde, Bestellung
WHERE Kunde.KNr = Bestellung.KNr
  AND Kunde.Ort = 'Hannover';
Ergebnis
Zum Schluss nur die gefragten Spalten — das ist die fertige Verbundabfrage.
Merke

Verbundabfrage:

SELECT Attribute
FROM Tabelle1, Tabelle2
WHERE Tabelle1.Schlüssel = Tabelle2.Fremdschlüssel
  AND weitere Bedingung;
3

Allgemeine Hinweise

Bedingung vergessen

Ohne Verbundbedingung wächst das Ergebnis auf m · n Zeilen und enthält Paare, die nichts miteinander zu tun haben. Ein verdächtig langes Ergebnis ist das Warnsignal.

Mehrdeutige Namen

Kommt KNr in beiden Tabellen vor, ist SELECT KNr unklar. Schreibe immer Tabelle.Attribut.

Dem Schema folgen

Suche im Relationenschema den ↑-Pfeil: Er verrät, welche zwei Attribute in die Verbundbedingung gehören. Die Schreibweise JOIN … ON aus manchen Tutorials macht dasselbe.

Videos