CodeGym /Kurse /SQL SELF /Selbst-Verknüpfung von Daten mit SELF JOIN

Selbst-Verknüpfung von Daten mit SELF JOIN

SQL SELF
Level 12 , Lektion 3
Verfügbar

SELF JOIN ist eine Möglichkeit, eine Tabelle mit sich selbst zu verbinden. Das klingt erstmal komisch: Warum sollte man eine Tabelle mit sich selbst joinen? Aber in der Praxis kommt das ziemlich oft vor. Stell dir zum Beispiel vor, du hast eine Mitarbeitertabelle, und jeder Mitarbeiter hat einen Manager. Der Manager ist selbst auch ein Mitarbeiter, also stehen seine Daten in derselben Tabelle. SELF JOIN hilft uns, Mitarbeiter mit ihren Managern zu verknüpfen.

Formell gesagt ist SELF JOIN einfach ein normaler JOIN, aber wir benutzen dieselbe Tabelle zweimal und geben ihr verschiedene Aliase, damit wir die "Versionen" unterscheiden können.

SELF JOIN kann man benutzen für:

  • Hierarchische Beziehungen: Zum Beispiel "Eltern-Kind"-Beziehungen, wie Mitarbeiter und ihr Manager.
  • Datenanalyse innerhalb einer Tabelle: Zum Beispiel, um Einträge zu vergleichen, wie das Finden ähnlicher Produkte oder Events.
  • Komplexe Abfragen bei Strukturen mit doppelter Logik.

Syntax von SELF JOIN

Lass uns direkt den vereinfachten Syntax von SELF JOIN anschauen:

SELECT
    A.column_name,
    B.column_name
FROM 
    table_name A
JOIN 
    table_name B
ON 
    A.common_column = B.common_column;

Hier gilt:

  • table_name A und table_name B sind dieselbe Tabelle, aber mit unterschiedlichen Aliases.
  • A.common_column und B.common_column sind die Spalten, die zum Verbinden der Einträge benutzt werden.

Die Aliase (A und B) braucht man, damit das DBMS "versteht", mit welcher "Kopie" der Tabelle du gerade arbeitest.

Beispiele für SELF JOIN

Beispiel 1: Liste der Mitarbeiter und ihrer Manager

Angenommen, wir haben eine Tabelle employees, die so aussieht:

employee_id name manager_id
1 Alex Lin NULL
2 Maria Chi 1
3 Otto Song 1
4 Nina Zhao 2

In dieser Tabelle:

  • employee_id — Mitarbeiter-ID.
  • name — Name des Mitarbeiters.
  • manager_id — Die ID des Managers, der auch ein employee_id eines anderen Mitarbeiters ist.

Aufgabe: Liste der Mitarbeiter und ihrer Manager bekommen.

So löst man das mit SELF JOIN:

SELECT
    e.name AS employee_name,
    m.name AS manager_name
FROM 
    employees e
LEFT JOIN 
    employees m
ON 
    e.manager_id = m.employee_id;

Ergebnis:

employee_name manager_name
Alex Lin NULL
Maria Chi Alex Lin
Otto Song Alex Lin
Nina Zhao Maria Chi

Hier gilt:

  • Tabelle e — das sind die "Mitarbeiter".
  • Tabelle m — das sind auch "Mitarbeiter", aber in der Rolle der "Manager".

Alex Lin hat keinen Manager manager_id = NULL, deshalb bleibt das Feld manager_name im Ergebnis leer.

Beispiel 2: Ähnliche Produkte finden

Angenommen, wir haben eine Tabelle products:

product_id product_name category
1 Kühlschrank Technik
2 Waschmaschine Technik
3 Smartphone Gadgets
4 Tablet Gadgets

Aufgabe: Paare von Produkten finden, die zur gleichen Kategorie gehören.

Lösung mit SELF JOIN:

SELECT
    p1.product_name AS product_1,
    p2.product_name AS product_2
FROM 
    products p1
JOIN 
    products p2
ON 
    p1.category = p2.category
AND 
    p1.product_id < p2.product_id;

Ergebnis:

product_1 product_2
Kühlschrank Waschmaschine
Smartphone Tablet

Achte auf die Bedingung p1.product_id < p2.product_id. Damit vermeidest du doppelte Paare, also dass in den Ergebnissen nicht sowohl Kühlschrank — Waschmaschine als auch Waschmaschine — Kühlschrank auftauchen.

Beispiel 3: Hierarchien analysieren (Eltern und Nachkommen)

Noch ein Beispiel: Angenommen, wir haben eine Tabelle categories:

category_id category_name parent_id
1 Technik NULL
2 Gadgets 1
3 Computer 1
4 Smartphones 2

Hier gilt:

  • category_id — Kategorie-ID.
  • category_name — Name der Kategorie.
  • parent_id — Die ID der übergeordneten Kategorie.

Aufgabe: Kategorien mit ihren Eltern-Kategorien verknüpfen.

Abfrage:

SELECT
    c1.category_name AS child_category,
    c2.category_name AS parent_category
FROM 
    categories c1
LEFT JOIN 
    categories c2
ON 
    c1.parent_id = c2.category_id;

Ergebnis:

child_category parent_category
Technik NULL
Gadgets Technik
Computer Technik
Smartphones Gadgets

Typische Fehler bei SELF JOIN

Aliase vergessen: Wenn du keine Aliase benutzt, kannst du die "Kopien" der Tabelle nicht mehr auseinanderhalten.

Zyklische Verweise: Wenn die Daten zyklische Verweise enthalten (z.B. ein Mitarbeiter ist sein eigener Manager), kann das zu unerwarteten Ergebnissen führen.

Doppelte Ergebnisse: Vergiss nicht, die Ergebnisse zu filtern (z.B. mit p1.product_id < p2.product_id), damit du keine Duplikate bekommst.

SELF JOIN ist ein mächtiges Tool beim Arbeiten mit Daten, und wenn du es richtig einsetzt, kannst du damit komplexe Aufgaben mit Hierarchien, Beziehungen innerhalb von Tabellen und Datenanalyse lösen. Ich hoffe, du siehst jetzt, wie nützlich dieses "Selfie" im SQL-Universum ist!

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION