Samenvatting :in deze tutorial leer je over een speciaal type join, SQLite self-join genaamd, waarmee je een tabel met zichzelf kunt joinen.
Merk op dat u bekend moet zijn met INNER JOIN
en LEFT JOIN
clausules voordat u verder gaat met deze tutorial.
Inleiding tot SQLite self-join
De self-join is een speciaal soort joins waarmee je een tafel aan zichzelf kunt koppelen met behulp van LEFT JOIN
of INNER JOIN
clausule. U gebruikt self-join om een resultatenset te maken die de rijen verbindt met de andere rijen in dezelfde tabel.
Omdat u in een query niet meer dan één tabel naar dezelfde tabel kunt verwijzen, moet u een tabelalias gebruiken om de tabel een andere naam toe te kennen wanneer u self-join gebruikt.
De self-join vergelijkt waarden van dezelfde of verschillende kolommen in dezelfde tabel. Er is slechts één tafel betrokken bij de self-join.
U gebruikt self-join vaak om de ouder-kindrelatie op te vragen die is opgeslagen in een tabel of om lopende totalen te verkrijgen.
SQLite self-join voorbeelden
We gebruiken de employees
tabel in de voorbeelddatabase voor demonstratie.
De employees
tabel slaat niet alleen werknemersgegevens op, maar ook organisatiegegevens. De ReportsTo
kolom specificeert de rapportagerelatie tussen werknemers.
Als een medewerker rapporteert aan een manager, is de waarde van de ReportsTo
kolom van de rij van de werknemer is gelijk aan de waarde van de EmployeeId
kolom van de rij van de manager. Als een medewerker aan niemand rapporteert, wordt de ReportsTo
kolom is NULL
.
Om informatie te krijgen over wie de directe ondergeschikte is, gebruikt u de volgende verklaring:
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)
Probeer het
De instructie gebruikte de INNER JOIN
clausule om lid te worden van de employees
Tot zichzelf. De employees
tafel heeft twee rollen:medewerkers en managers.
Omdat we de INNER JOIN
. hebben gebruikt clausule om lid te worden van de employees
tabel naar zichzelf, heeft de resultaatset niet de rij waarvan de managerkolom een NULL
. bevat waarde.
Merk op dat de aaneenschakelingsoperator ||
voegt meerdere strings samen tot een enkele string. In het voorbeeld gebruiken we de aaneenschakelingsoperator to van de volledige namen van de werknemers door de voornaam, spatie en achternaam samen te voegen.
Als u de CEO wilt ondervragen die aan niemand rapporteert, moet u de INNER JOIN
wijzigen clausule naar LEFT JOIN
clausule in de bovenstaande vraag.
Andrew Adams
is de CEO omdat hij niemand rapporteert.
U kunt de self-join-techniek gebruiken om de werknemers in dezelfde stad te vinden met de volgende zoekopdracht:
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)
Probeer het
De join-voorwaarde heeft twee uitdrukkingen:
e1.city = e2.city
om ervoor te zorgen dat beide medewerkers zich in dezelfde stad bevindene.firstname <> e2.firstname AND e1.lastname <> e2.lastname
om ervoor te zorgen date1
ene2
niet dezelfde werknemer zijn in de veronderstelling dat er geen werknemers zijn met dezelfde voornaam en achternaam.
In deze tutorial hebben we je laten zien hoe je de SQLite self-join techniek kunt gebruiken om een tabel aan zichzelf te koppelen.