SQL_JOIN


JOIN-Operator

Mit Hilfe des JOIN-Operators lassen sich Datenbanktabellen (Relationen) einfach miteinander verknüpfen.

 

Beispiel: Gegeben sind die folgenden Tabellen

 

Autor:

AutorID  Name 
Autor 1
Autor 2
Autor 3
Autor 4 

 

Buch:

BuchID Titel HerausgeberID A_ID
1 Buch 1  a
Buch 2  b
Buch 3  c
Buch 4  c

 

Man benötigt sinnvolle Verknüpfungspunkte, hier: AutorID und A_ID (Fremdschlüssel)

 

SELECT-Verknüpfung:

SELECT *

FROM Autor a, Buch b

WHERE a.AutorID = b.A_ID;

 

JOIN-Verknüpfung:

SELECT *

FROM Autor a JOIN Buch b

ON a.AutorID = b.A_ID;

 

Ergebnis:

AutorID  Name BuchID  Titel  HerausgeberID A_ID 
Autor 1  Buch 1  a
Autor 1  Buch 2  b
Autor 3  Buch 3  c
Autor 4  Buch 4  c

 

Der JOIN-Operator verknüpft die beiden Relationen miteinander, das "ON" legt den Verknüpfungspunkt bzw. die Bedingung (gleichzusetzen mit "WHERE") fest.

 

Grundstruktur:

SELECT Attribut(e) FROM <Relation 1> JOIN <Relation 2> ON <Bedingung(en)>;

 

 

Varianten (LEFT / RIGHT OUTER JOIN):

Neben dem normalen JOIN-Operator gibt es noch weitere Varianten, wie etwa den "OUTER"-JOIN. Von diesem gibt es zwei Arten: LEFT-JOIN und RIGHT-JOIN.

 

Der OUTER-JOIN-Operator wählt alle Ergebnisse auf der jeweiligen Seite des Join aus, auch wenn diesen keine weiteren Daten zugeordnet sind:

SELECT *

FROM Autor a LEFT JOIN Buch b 

ON a.AutorID = b.A_ID;

 

Ergebnis:

AutorID  Name BuchID  Titel  HerausgeberID A_ID 
Autor 1  Buch 1  a
Autor 1  Buch 2  b
2 Autor 2 NULL NULL NULL NULL
Autor 3  Buch 3  c
Autor 4  Buch 4  c

 

Wenn einer der Autoren mehrere Bücher geschrieben hat, wird er auch mehrmals angezeigt, aber mindestens einmal (auch wenn er kein Buch geschrieben hat).

 

Der RIGHT-JOIN funktioniert entsprechend. Dabei ist entscheidend, welche Tabelle im Befehl zuerst (left) und zuletzt (right) steht.

 

 

Variante FULL OUTER JOIN

 

Der FULL (OUTER) JOIN Befehl verbindet beide Tabellen zusammen, wobei es entweder links oder rechts NULL stehen kann.

Bei MySQL funktioniert dieser Befehl leider nicht.

 

 

JOIN-Operator über mehrere Tabellen

SELECT-Verknüpfung:

SELECT * 

FROM Autor a, Buch b, Herausgeber c

WHERE a.AutorID = b.A_ID AND b.HerausgeberID = c.HerausgeberID;

 

JOIN-Verknüpfung:

SELECT *

FROM Autor a JOIN Buch b ON (a.AutorID = a.A_ID)

     JOIN Herausgeber c ON (b.HerausgeberID = c.HerausgeberID);