JOIN-Operator
Mit Hilfe des JOIN-Operators lassen sich Datenbanktabellen (Relationen) einfach miteinander verknüpfen.
Beispiel: Gegeben sind die folgenden Tabellen
Autor:
AutorID |
Name |
1 |
Autor 1 |
2 |
Autor 2 |
3 |
Autor 3 |
4 |
Autor 4 |
Buch:
BuchID |
Titel |
HerausgeberID |
A_ID |
1 |
Buch 1 |
a |
1 |
2 |
Buch 2 |
b |
1 |
3 |
Buch 3 |
c |
3 |
4 |
Buch 4 |
c |
4 |
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 |
1 |
Autor 1 |
1 |
Buch 1 |
a |
1 |
1 |
Autor 1 |
2 |
Buch 2 |
b |
1 |
3 |
Autor 3 |
3 |
Buch 3 |
c |
3 |
4 |
Autor 4 |
4 |
Buch 4 |
c |
4 |
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 |
1 |
Autor 1 |
1 |
Buch 1 |
a |
1 |
1 |
Autor 1 |
2 |
Buch 2 |
b |
1 |
2 |
Autor 2 |
NULL |
NULL |
NULL |
NULL |
3 |
Autor 3 |
3 |
Buch 3 |
c |
3 |
4 |
Autor 4 |
4 |
Buch 4 |
c |
4
|
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);
Comments (0)
You don't have permission to comment on this page.