Datenbanken

SQL Joins

Tabellen verbinden mit Cross Join, Inner Join, Self Join, Natural Join, Left, Right und Full Outer Join.

SQL Joins

Joins verbinden Daten aus mehreren Tabellen.

Das ist notwendig, weil gute relationale Modelle Informationen auf mehrere Tabellen aufteilen.

Warum Joins?

Beispiel:

  • emp enthält Mitarbeiterdaten.
  • dept enthält Abteilungen.
  • Beide Tabellen sind über deptno verbunden.

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