|
Oft kommt es vor, dass in einer Anfrage Daten aus mehreren Relationen benötigt werden.
Hierfür müssen die Relationen miteinander verknüpft werden.
Dazu werden die identischen Attribute (Fremdschlüssel)
in den beiden Relationen miteinander verbunden.
Es gibt zwei Möglichkeiten Relationen in Anfragen miteinander zu verküpfen:
Bei dieser Möglichkeit werden die identischen Attribute mit dem Vergleichsoperator verknüpft und als "Bedingung" (keine eingentliche Bedingung) im WHERE Teil der Anfrage eingefügt.
<
für den Verbund verwendet werden.
Dies ist geschieht jedoch meist in Kombination mit einer Verbundsbedingung mit =
, weil ein solcher Verbund alleine keinen Sinn macht.
Eine andere Möglichkeit besteht darin, den Verbund im FROM Teil einer Anfrage vorzunehmen.
Dies ist sinnvoller, da so die eigentlichen Suchkriterien (Bedingungen im WHERE-Teil) von den Tabellenverknüpfungen getrennt
sind.
Dazu stehen folgende Befehle zur Verfügung:
<Relation> JOIN <Relation> USING (<Attribut>)
<Relation> NATURAL JOIN <Relation>
<Relation> JOIN <Relation> ON <Attribut> <Vergleichsoperator> <Attribut>
Das obige Beispiel würde mit diesen Befehlen folgendermassen aussehen:SELECT Vorname, Nachname, Zeitung_Name
FROM Kunde JOIN Abonnement USING (KundNr);
oderSELECT Vorname, Nachname, Zeitung_Name
FROM Kunde JOIN Abonnement ON Kunde.KundNr = Abonnement.KundNr;
oderSELECT Vorname, Nachname, Zeitung_Name
FROM Kunde NATURAL JOIN Abonnement;
Die oben beschriebenen Befehle geben nur Datensätze aus, die in beiden Relationenen vorkommen.
Sollen alle Datensätze der einen Relation mit den zugehörigen Datensätzen der zweiten Relation
ausgegeben werden, kommen folgende Befehle zum Einsatz:
<Tabelle> RIGHT OUTER JOIN <Tabelle> USING (<Attribut>)
<Tabelle> LEFT OUTER JOIN <Tabelle> USING (<Attribut>)
Falls bei RIGHT OUTER JOIN
in der linken Relation kein Datensatz verknüpft werden kann, wird für die Attribute dieser Relation NULL ausgegeben.
Dies gilt ungekehrt auch für LEFT OUTER JOIN
.