Was ist ein Self-Join?
Eine Tabelle mithilfe von Aliasen mit sich selbst verknüpfen
Was ist ein Self-Join? ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Eine Tabelle mit sich selbst verknüpfen
Ein Self-Join liegt vor, wenn Sie eine Tabelle mit sich selbst verknüpfen. Das klingt zunächst ungewöhnlich, ist aber eine leistungsfähige Technik, wenn Zeilen in einer Tabelle mit anderen Zeilen derselben Tabelle in Beziehung stehen.
Das häufigste Beispiel ist eine employees-Tabelle, in der jede Mitarbeiterzeile außerdem die ID des Managers enthält – der ebenfalls als Mitarbeiter in derselben Tabelle gespeichert ist.
Die Tabelle employees
Betrachten Sie eine Tabelle employees, in der jede Zeile über eine id, einen name und eine manager_id verfügt, die auf eine andere Zeile derselben Tabelle verweist.
Diese Struktur wird als sich selbst referenzierende oder rekursive Beziehung bezeichnet. Führen Sie die folgende Abfrage aus, um die Tabelle zu erstellen und mit Daten zu füllen.
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
manager_id INT
);
INSERT INTO employees VALUES
(1, 'Alice', NULL),
(2, 'Bob', 1),
(3, 'Carol', 1),
(4, 'Dave', 2),
(5, 'Eve', 2),
(6, 'Frank', 3);Warum normale Joins hier nicht funktionieren
Wenn Sie jeden Mitarbeiter zusammen mit dem Namen seines Managers anzeigen möchten, befinden sich beide Informationen in derselben Tabelle. Ein normaler Join verbindet zwei unterschiedliche Tabellen (oder zumindest zwei verschiedene Datenquellen).
Um zweimal aus derselben Tabelle zu lesen – einmal für den Mitarbeiter und einmal für den Manager –, benötigen Sie einen Self-Join in Kombination mit Tabellen-Aliasen.
Aliase einführen
Für einen Self-Join schreiben Sie denselben Tabellennamen zweimal in die FROM / JOIN-Klausel und geben jedem Vorkommen einen anderen Alias. Durch die Aliase kann SQL sie wie zwei separate logische Tabellen behandeln.
Üblicherweise verwenden Sie kurze, aussagekräftige Aliase wie e für Mitarbeiter und m für Manager.
-- Conceptual structure (not yet a full query)
-- FROM employees AS e
-- JOIN employees AS m ON e.manager_id = m.idIhr erster Self-Join
Hier sehen Sie einen vollständigen Self-Join, der jeden Mitarbeiter zusammen mit dem Namen seines Managers auflistet. Die ON-Bedingung verknüpft die manager_id des Mitarbeiters mit der id des Managers.
Alice hat keinen Manager und wird daher durch den INNER JOIN ausgeschlossen – auf der Managerseite gibt es keine passende Zeile.
SELECT
e.name AS employee,
m.name AS manager
FROM employees AS e
INNER JOIN employees AS m
ON e.manager_id = m.id;Zeilen ohne Manager einbeziehen
Wenn Sie INNER JOIN verwenden, werden Zeilen ohne Übereinstimmung entfernt. Alice hat manager_id = NULL und verschwindet deshalb aus den Ergebnissen.
Wechseln Sie zu einem LEFT JOIN, um alle Mitarbeiter beizubehalten und einfach NULL (oder eine Bezeichnung) anzuzeigen, wenn kein Manager vorhanden ist.
SELECT
e.name AS employee,
COALESCE(m.name, 'No Manager') AS manager
FROM employees AS e
LEFT JOIN employees AS m
ON e.manager_id = m.id;Ergebnisse des Self-Joins filtern
Sie können einem Self-Join genau wie jeder anderen Abfrage eine WHERE-Klausel hinzufügen. Das folgende Beispiel ruft nur die Mitarbeiter ab, deren direkter Manager Alice ist (id = 1).
SELECT
e.name AS employee,
m.name AS manager
FROM employees AS e
INNER JOIN employees AS m
ON e.manager_id = m.id
WHERE m.name = 'Alice';Direkt unterstellte Mitarbeiter zählen
Self-Joins lassen sich natürlich mit Aggregatfunktionen kombinieren. Die folgende Abfrage zählt, wie viele direkt unterstellte Mitarbeiter jeder Manager hat, indem nach dem Manager-Alias gruppiert wird.
SELECT
m.name AS manager,
COUNT(e.id) AS direct_reports
FROM employees AS e
INNER JOIN employees AS m
ON e.manager_id = m.id
GROUP BY m.name
ORDER BY direct_reports DESC;Self-Joins bei nicht hierarchischen Daten
Self-Joins sind nicht auf Hierarchien beschränkt. Immer wenn Zeilen einer Tabelle mit anderen Zeilen derselben Tabelle in Beziehung stehen, kann ein Self-Join hilfreich sein.
So können Sie beispielsweise alle Mitarbeiterpaare ermitteln, die denselben Manager haben – dazu verknüpfen Sie die Tabelle über übereinstimmende manager_id-Werte mit sich selbst und stellen gleichzeitig sicher, dass ein Mitarbeiter nicht mit sich selbst gepaart wird.
SELECT
a.name AS employee_1,
b.name AS employee_2,
a.manager_id
FROM employees AS a
INNER JOIN employees AS b
ON a.manager_id = b.manager_id
AND a.id < b.id;Die Rolle des Alias
Aliase sind bei einem Self-Join zwingend erforderlich – ohne sie kann die Datenbank nicht erkennen, auf welche Kopie der Tabelle sich eine Spalte bezieht, und Sie erhalten einen Fehler wegen Mehrdeutigkeit.
Sie können beliebige Aliasnamen verwenden. Die wichtigste Regel lautet, dass jeder Spaltenverweis mit dem passenden Alias versehen sein muss, damit SQL weiß, welche Tabelleninstanz verwendet werden soll.
-- This will fail: column 'name' is ambiguous
-- SELECT name FROM employees JOIN employees ON manager_id = id;
-- This works: aliases remove the ambiguity
SELECT e.name, m.name
FROM employees AS e
JOIN employees AS m ON e.manager_id = m.id;Anwendungsfälle aus der Praxis
Self-Joins kommen in realen Datenbanken häufig vor. Zu den typischen Anwendungsfällen gehören:
- Organigramme – Mitarbeiter und ihre Manager
- Kategoriehierarchien – übergeordnete und untergeordnete Kategorien
- Stücklisten – aus anderen Komponenten zusammengesetzte Komponenten
- Soziale Netzwerke – Freunde von Freunden in einer einzigen Verbindungstabelle ermitteln
Das Erkennen eines sich selbst referenzierenden Fremdschlüssels in einem Schema ist der erste Hinweis darauf, dass ein Self-Join erforderlich sein könnte.
Kurzer Test
Testen Sie Ihr Verständnis von Self-Joins, bevor Sie fortfahren.
Lektionszusammenfassung
In dieser Lektion haben Sie gelernt, was ein Self-Join ist und wann Sie ihn verwenden:
- Ein Self-Join verbindet eine Tabelle mit sich selbst, indem sie zweimal mit unterschiedlichen Aliasen referenziert wird
- Verwenden Sie
INNER JOIN, um Zeilen ohne Übereinstimmung (z. B. Manager an der Spitze der Hierarchie) auszuschließen, oderLEFT JOIN, um sie beizubehalten - Fügen Sie
WHERE,GROUP BYund Aggregatfunktionen genau wie bei jedem anderen Join hinzu - Verwenden Sie
a.id < b.idin derON-Klausel, um beim Vergleichen von Zeilen innerhalb derselben Tabelle doppelte Paare zu vermeiden - Self-Joins sind das wichtigste Werkzeug für hierarchische Daten, Kategoriehierarchien und alle sich selbst referenzierenden Beziehungen
Als Nächstes sehen Sie sich mehrstufige Hierarchien mit rekursiven CTEs an.
Häufig gestellte Fragen
Ist die Lektion „Was ist ein Self-Join?“ kostenlos?
Ja — der vollständige Text von „Was ist ein Self-Join?“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Was ist ein Self-Join?“?
Eine Tabelle mithilfe von Aliasen mit sich selbst verknüpfen Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Was ist ein Self-Join?“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Was ist ein Self-Join?
- Mitarbeiter und Vorgesetzte
- Zeilen derselben Tabelle vergleichen
- Grenzen von Self-Joins