SQL Joins
SQL Joins
Joins verbinden Daten aus mehreren Tabellen.
Das ist notwendig, weil gute relationale Modelle Informationen auf mehrere Tabellen aufteilen.
Warum Joins?
Beispiel:
empenthält Mitarbeiterdaten.deptenthält Abteilungen.- Beide Tabellen sind über
deptnoverbunden.
Eine Abfrage kann dann Mitarbeiter mit ihren Abteilungsnamen anzeigen.
Klassische Join-Form
SELECT emp.ename, dept.dname
FROM emp, dept
WHERE emp.deptno = dept.deptno;
Wichtig: Wenn Spalten in mehreren Tabellen gleich heißen, muss man sie eindeutig qualifizieren.
SELECT emp.empno, emp.ename, emp.deptno
FROM emp, dept
WHERE emp.deptno = dept.deptno;
ANSI Inner Join
Moderne Schreibweise:
SELECT e.ename, d.dname
FROM emp e
INNER JOIN dept d ON e.deptno = d.deptno;
Wenn die Join-Spalte in beiden Tabellen gleich heißt:
SELECT *
FROM emp
INNER JOIN dept USING (deptno);
Ein Inner Join gibt nur Zeilen aus, für die es passende Partner in beiden Tabellen gibt.
Cross Join
Ein Cross Join bildet das kartesische Produkt.
SELECT e.ename, d.dname
FROM emp e
CROSS JOIN dept d;
Jede Zeile der ersten Tabelle wird mit jeder Zeile der zweiten Tabelle kombiniert.
Das ist selten fachlich gewünscht und passiert oft aus Versehen, wenn die Join-Bedingung fehlt.
Self Join
Ein Self Join verbindet eine Tabelle mit sich selbst.
Beispiel: Mitarbeiter und ihre Vorgesetzten stehen beide in emp.
SELECT worker.ename || ' arbeitet für ' || manager.ename AS beziehung
FROM emp worker
INNER JOIN emp manager ON worker.mgr = manager.empno;
Tabellenaliase sind hier Pflicht, damit klar ist, welche Rolle die jeweilige Tabellenkopie hat.
Equi Join
Ein Equi Join verwendet Gleichheit als Join-Bedingung.
ON e.deptno = d.deptno
Die verbundenen Spalten sollten kompatible Datentypen haben.
Natural Join
Ein Natural Join verbindet automatisch gleich benannte Spalten.
SELECT dname, ename
FROM dept
NATURAL JOIN emp;
Vorsicht: Natural Joins können unübersichtlich werden, wenn mehrere gleich benannte Spalten existieren.
Theta Join
Ein Theta Join verwendet einen Vergleichsoperator wie <, >, <=, >= oder BETWEEN.
Beispiel Gehaltsstufe:
SELECT e.ename, e.sal, s.grade
FROM emp e
JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal;
Left Outer Join
Ein Left Outer Join enthält alle Zeilen der linken Tabelle, auch wenn rechts kein passender Datensatz existiert.
SELECT d.dname, e.ename
FROM dept d
LEFT OUTER JOIN emp e ON d.deptno = e.deptno;
Das ist nützlich, um zum Beispiel Abteilungen ohne Mitarbeiter zu finden.
Right Outer Join
Ein Right Outer Join enthält alle Zeilen der rechten Tabelle.
SELECT d.dname, e.ename
FROM dept d
RIGHT OUTER JOIN emp e ON d.deptno = e.deptno;
In der Praxis kann man viele Right Joins durch Vertauschen der Tabellen als Left Join schreiben.
Full Outer Join
Ein Full Outer Join kombiniert Left und Right Outer Join.
SELECT e1.ename, e2.ename
FROM e1
FULL OUTER JOIN e2 USING (empno);
Er zeigt passende Zeilen und zusätzlich Zeilen, die nur auf einer Seite vorkommen.
Joins über drei Tabellen
SELECT s.grade, e.ename, e.sal, d.loc
FROM emp e
JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal
JOIN dept d ON d.deptno = e.deptno;
Typische Fehler
- Join-Bedingung vergessen
- gleichnamige Spalten nicht eindeutig angeben
- Inner Join verwenden, obwohl fehlende Partner angezeigt werden sollen
WHERE-Bedingungen bei Outer Joins falsch platzieren- Natural Join verwenden, ohne die Spaltennamen zu prüfen
Merksatz
Joins setzen normalisierte Daten wieder fachlich zusammen. Der Schlüssel ist immer die richtige Beziehung zwischen den Tabellen.
Zuletzt aktualisiert: 6. Juni 2026