Verbund

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:

im WHERE Teil

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.

Verbundsoperatoren
remarkGrundsätzlich kann auch z.B. ein < 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.

im FROM Teil

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:

Das obige Beispiel würde mit diesen Befehlen folgendermassen aussehen:

SELECT Vorname, Nachname, Zeitung_Name

FROM Kunde JOIN Abonnement USING (KundNr);

oder

SELECT Vorname, Nachname, Zeitung_Name

FROM Kunde JOIN Abonnement ON Kunde.KundNr = Abonnement.KundNr;

oder

SELECT 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:

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.