Zusammenfassung :In diesem Tutorial lernen Sie eine spezielle Art von Join namens SQLite Self-Join kennen, mit der Sie eine Tabelle mit sich selbst verbinden können.
Beachten Sie, dass Sie mit INNER JOIN
vertraut sein sollten und LEFT JOIN
Klauseln, bevor Sie mit diesem Tutorial fortfahren.
Einführung in den SQLite-Self-Join
Der Self-Join ist eine spezielle Art von Joins, die es Ihnen ermöglichen, eine Tabelle mit sich selbst zu verknüpfen, indem Sie entweder LEFT JOIN
verwenden oder INNER JOIN
Klausel. Sie verwenden Self-Join, um eine Ergebnismenge zu erstellen, die die Zeilen mit den anderen Zeilen innerhalb derselben Tabelle verbindet.
Da Sie in einer Abfrage nicht mehrfach auf dieselbe Tabelle verweisen können, müssen Sie einen Tabellenalias verwenden, um der Tabelle einen anderen Namen zuzuweisen, wenn Sie Self-Join verwenden.
Der Self-Join vergleicht Werte derselben oder unterschiedlicher Spalten in derselben Tabelle. Nur eine Tabelle ist am Self-Join beteiligt.
Sie verwenden Self-Join häufig, um in einer Tabelle gespeicherte Eltern/Kind-Beziehungen abzufragen oder laufende Summen zu erhalten.
SQLite-Self-Join-Beispiele
Wir verwenden die employees
Tabelle in der Beispieldatenbank zur Demonstration.
Die employees
Tabelle speichert nicht nur Mitarbeiterdaten, sondern auch Organisationsdaten. Die ReportsTo
Spalte gibt die Berichtsbeziehung zwischen Mitarbeitern an.
Wenn ein Mitarbeiter einem Vorgesetzten unterstellt ist, der Wert von ReportsTo
Spalte der Mitarbeiterzeile ist gleich dem Wert von EmployeeId
Spalte der Zeile des Managers. Falls ein Mitarbeiter niemandem unterstellt ist, wird der ReportsTo
Spalte ist NULL
.
Um Informationen darüber zu erhalten, wer wem direkt unterstellt ist, verwenden Sie die folgende Anweisung:
SELECT m.firstname || ' ' || m.lastname AS 'Manager',
e.firstname || ' ' || e.lastname AS 'Direct report'
FROM employees e
INNER JOIN employees m ON m.employeeid = e.reportsto
ORDER BY manager;
Code language: SQL (Structured Query Language) (sql)
Probieren Sie es aus
Die Anweisung verwendete den INNER JOIN
Klausel, um den employees
beizutreten zu sich selbst. Die employees
Tabelle hat zwei Rollen:Mitarbeiter und Manager.
Weil wir den INNER JOIN
verwendet haben Klausel, um den employees
beizutreten Tabelle zu sich selbst enthält die Ergebnismenge nicht die Zeile, deren Manager-Spalte einen NULL
enthält Wert.
Beachten Sie, dass der Verkettungsoperator ||
verkettet mehrere Strings zu einem einzigen String. Im Beispiel verwenden wir den Verkettungsoperator, um die vollständigen Namen der Mitarbeiter zu erhalten, indem Vorname, Leerzeichen und Nachname verkettet werden.
Falls Sie den CEO abfragen möchten, der niemandem unterstellt ist, müssen Sie den INNER JOIN
ändern -Klausel zu LEFT JOIN
-Klausel in der Abfrage oben.
Andrew Adams
ist der CEO, weil er niemanden meldet.
Sie können die Self-Join-Technik verwenden, um die Mitarbeiter in derselben Stadt wie die folgende Abfrage zu finden:
SELECT DISTINCT
e1.city,
e1.firstName || ' ' || e1.lastname AS fullname
FROM
employees e1
INNER JOIN employees e2 ON e2.city = e1.city
AND (e1.firstname <> e2.firstname AND e1.lastname <> e2.lastname)
ORDER BY
e1.city;
Code language: SQL (Structured Query Language) (sql)
Probieren Sie es aus
Die Join-Bedingung hat zwei Ausdrücke:
e1.city = e2.city
sicherzustellen, dass sich beide Mitarbeiter in derselben Stadt befindene.firstname <> e2.firstname AND e1.lastname <> e2.lastname
um sicherzustellen, dasse1
unde2
sind nicht derselbe Mitarbeiter mit der Annahme, dass es keine Mitarbeiter gibt, die den gleichen Vor- und Nachnamen haben.
In diesem Tutorial haben wir Ihnen gezeigt, wie Sie die SQLite-Self-Join-Technik verwenden, um eine Tabelle mit sich selbst zu verknüpfen.