Jede Zeile mit jeder — das Kreuzprodukt
- Mehrere Tabellen:
FROM Kunde, Bestellungkombiniert 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.
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.
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
ANDan die Verbundbedingung an. - Zwischentabelle:bei m:n-Beziehungen führt der Weg über die Zwischentabelle — zwei Verbundbedingungen.
Herleitung:
SELECT *
FROM Kunde, Bestellung;SELECT *
FROM Kunde, Bestellung
WHERE Kunde.KNr = Bestellung.KNr;SELECT *
FROM Kunde, Bestellung
WHERE Kunde.KNr = Bestellung.KNr
AND Kunde.Ort = 'Hannover';SELECT Kunde.Name, Bestellung.Datum
FROM Kunde, Bestellung
WHERE Kunde.KNr = Bestellung.KNr
AND Kunde.Ort = 'Hannover';Verbundabfrage:
SELECT Attribute
FROM Tabelle1, Tabelle2
WHERE Tabelle1.Schlüssel = Tabelle2.Fremdschlüssel
AND weitere Bedingung;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.
