SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite-Self-Join

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 befinden
  • e.firstname <> e2.firstname AND e1.lastname <> e2.lastname um sicherzustellen, dass e1 und e2 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.