Beispielszenario
Schülerinnen und Schüler besuchen Praktikumsbetriebe
→ 1:n-Beziehung
(Jeder SuS besucht einen Betrieb. Ein Betrieb kann von mehreren SuS besucht werden.)
Ausgangstabellen:
Schüler
id | name | betrieb_id# |
---|---|---|
1 | Ali | 1 |
2 | Lea | 1 |
3 | Tim | 2 |
4 | Jonas | NULL |
Betrieb
id | name |
---|---|
1 | Auto AG |
2 | IT GmbH |
3 | Bau GmbH |
Was ist ein JOIN?
Ein JOIN verbindet Datensätze aus mehreren Tabellen, um Informationen zu kombinieren – z. B. Schüler mit ihren Praktikumsbetrieben.
Die Verbindung erfolgt über Primär- und Fremdschlüssel.
Je nach gewünschtem Ergebnis gibt es verschiedene JOIN-Arten:
INNER JOIN
SELECT *
FROM schueler
INNER JOIN betrieb ON schueler.betrieb_id = betrieb.id;
Das Ergebnis enthält nur Schüler mit zugeordnetem Betrieb.
Schüler ohne Betrieb (z. B. Jonas) werden nicht angezeigt.
„INNER“ bedeutet: Schnittmenge – nur Datensätze, die innen, also in beiden Tabellen vorkommen.
Schüler ohne Betrieb (z. B. Jonas) werden nicht angezeigt.
„INNER“ bedeutet: Schnittmenge – nur Datensätze, die innen, also in beiden Tabellen vorkommen.
Ergebnistabelle
id | name | betrieb_id | id | name |
---|---|---|---|---|
1 | Ali | 1 | 1 | Auto AG |
2 | Lea | 1 | 1 | Auto AG |
3 | Tim | 2 | 2 | IT GmbH |
LEFT JOIN
SELECT *
FROM schueler
LEFT JOIN betrieb ON schueler.betrieb_id = betrieb.id;
Das Ergebnis enthält alle Schüler – auch ohne zugeordneten Betrieb.
Der Betrieb ist dann NULL.
„LEFT“ meint: Alles aus der linken Tabelle (schueler), passende aus der rechten (betrieb)
Der Betrieb ist dann NULL.
„LEFT“ meint: Alles aus der linken Tabelle (schueler), passende aus der rechten (betrieb)
Ergebnistabelle
id | name | betrieb_id | id | name |
---|---|---|---|---|
1 | Ali | 1 | 1 | Auto AG |
2 | Lea | 1 | 1 | Auto AG |
3 | Tim | 2 | 2 | IT GmbH |
4 | Jonas | - | - | - |
RIGHT JOIN
SELECT *
FROM schueler
RIGHT JOIN betrieb ON schueler.betrieb_id = betrieb.id;
Das Ergebnis enthält alle Betriebe – auch ohne zugeordnete Schüler.
Schüler ist dann NULL.
„RIGHT“ meint: Alles aus der rechten Tabelle (betrieb), passende aus der linken (schueler)
Schüler ist dann NULL.
„RIGHT“ meint: Alles aus der rechten Tabelle (betrieb), passende aus der linken (schueler)
Ergebnistabelle
id | name | betrieb_id | id | name |
---|---|---|---|---|
1 | Ali | 1 | 1 | Auto AG |
2 | Lea | 1 | 1 | Auto AG |
3 | Tim | 2 | 2 | IT GmbH |
- | - | - | 3 | Bau GmbH |
Zusammenfassung:
JOIN-Typ | Welche Zeilen werden angezeigt? |
---|---|
INNER JOIN | Nur Zeilen mit Übereinstimmung in beiden Tabellen |
LEFT JOIN | Alle Zeilen aus linker Tabelle, passende Daten aus rechter Tabelle |
RIGHT JOIN | Alle Zeilen aus rechter Tabelle, passende Daten aus linker Tabelle |