sql >> Database >  >> RDS >> SQLite

SQLite Self-Join

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 bevinden
  • e.firstname <> e2.firstname AND e1.lastname <> e2.lastname om ervoor te zorgen dat e1 en e2 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.


  1. SQL Server-databases verplaatsen naar de cloud

  2. JDBC-verbindingen in pool sluiten

  3. SQLT en partitionering

  4. De nieuwe Microsoft SQL Server ODBC- en OLEDB-stuurprogramma's ontwarren