sql >> Databasteknik >  >> RDS >> SQLite

SQLite Self-Join

Sammanfattning :i den här handledningen kommer du att lära dig om en speciell typ av join som kallas SQLite self-join som låter dig ansluta tabellen till sig själv.

Observera att du bör vara bekant med INNER JOIN och LEFT JOIN klausuler innan du går vidare med denna handledning.

Introduktion till SQLite self-join

Self-join är en speciell typ av joins som låter dig ansluta en tabell till sig själv med antingen LEFT JOIN eller INNER JOIN klausul. Du använder självkoppling för att skapa en resultatuppsättning som sammanfogar raderna med de andra raderna i samma tabell.

Eftersom du inte kan referera till samma tabell mer än en i en fråga, måste du använda ett tabellalias för att tilldela tabellen ett annat namn när du använder självanslutning.

Självkopplingen jämför värden för samma eller olika kolumner i samma tabell. Endast ett bord är involverat i självanslutningen.

Du använder ofta självanslutning för att fråga föräldrar/barn-relationer lagrade i en tabell eller för att få löpande totaler.

SQLite självanslutningsexempel

Vi kommer att använda employees tabell i exempeldatabasen för demonstration.

employees Tabell lagrar inte bara personaldata utan även organisationsdata. ReportsTo kolumnen anger rapporteringsrelationen mellan anställda.

Om en anställd rapporterar till en chef, värdet av ReportsTo kolumnen på den anställdes rad är lika med värdet på EmployeeId kolumn i chefens rad. Om en anställd inte rapporterar till någon, visas ReportsTo kolumnen är NULL .

För att få information om vem som är direktanmälan till vem använder du följande uttalande:

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)

Prova det

Uttrycket använde INNER JOIN klausul för att gå med i employees till sig själv. employees tabellen har två roller:anställda och chefer.

Eftersom vi använde INNER JOIN klausul för att gå med i employees tabell för sig själv, har resultatuppsättningen inte raden vars hanterarkolumn innehåller en NULL värde.

Observera att sammanlänkningsoperatorn || sammanfogar flera strängar till en enda sträng. I exemplet använder vi sammanlänkningsoperatorn till från de fullständiga namnen på de anställda genom att sammanfoga förnamn, mellanslag och efternamn.

Om du vill fråga VD:n som inte rapporterar till någon, måste du ändra INNER JOIN sats till LEFT JOIN klausul i frågan ovan.

Andrew Adams är VD eftersom han inte anmäler någon.

Du kan använda självanslutningstekniken för att hitta anställda i samma stad som följande fråga:

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)

Prova det

Sammanfogningsvillkoret har två uttryck:

  • e1.city = e2.city för att se till att båda anställda finns i samma stad
  • e.firstname <> e2.firstname AND e1.lastname <> e2.lastname för att säkerställa att e1 och e2 är inte samma anställd med antagandet att det inte finns anställda som har samma för- och efternamn.

I den här handledningen har vi visat dig hur du använder SQLite självanslutningstekniken för att ansluta en tabell till sig själv.


  1. Hur man konverterar SQL Servers tidsstämpelkolumn till datetime-format

  2. SQL DROP-index, DROP-tabell och DROP-databassatser förklaras med exempel

  3. SQL Server 2016:Skapa en vy

  4. Automatiskt generera databasdiagram MySQL