sql >> Database teknologi >  >> RDS >> SQLite

SQLite Self-Join

Oversigt :i dette selvstudium vil du lære om en speciel type join kaldet SQLite self-join, som giver dig mulighed for at forbinde tabellen med sig selv.

Bemærk, at du bør være bekendt med INNER JOIN og LEFT JOIN klausuler, før du går videre med denne øvelse.

Introduktion til SQLite-selv-join

Self-join er en speciel slags joins, der giver dig mulighed for at slutte en tabel til sig selv ved at bruge enten LEFT JOIN eller INNER JOIN klausul. Du bruger selv-join til at oprette et resultatsæt, der forbinder rækkerne med de andre rækker i den samme tabel.

Fordi du ikke kan henvise til den samme tabel mere end én i en forespørgsel, skal du bruge et tabelalias for at tildele tabellen et andet navn, når du bruger selv-join.

Selvsammenkædningen sammenligner værdier for de samme eller forskellige kolonner i den samme tabel. Kun ét bord er involveret i selvtilslutningen.

Du bruger ofte selv-deltagelse til at forespørge forældre/barn-forhold gemt i en tabel eller for at få løbende totaler.

Eksempler på SQLite-selvtilslutning

Vi vil bruge employees tabel i eksempeldatabasen til demonstration.

employees tabel gemmer ikke kun medarbejderdata, men også organisationsdata. ReportsTo kolonne angiver rapporteringsforholdet mellem medarbejdere.

Hvis en medarbejder rapporterer til en leder, er værdien af ​​ReportsTo kolonne i medarbejderens række er lig med værdien af ​​EmployeeId kolonne i lederens række. Hvis en medarbejder ikke rapporterer til nogen, vises ReportsTo kolonnen er NULL .

For at få oplysningerne om, hvem der er direkte underrettet om hvem, bruger du følgende erklæring:

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)

Prøv det

Udsagnet brugte INNER JOIN klausul for at slutte sig til employees til sig selv. employees tabellen har to roller:medarbejdere og ledere.

Fordi vi brugte INNER JOIN klausul for at slutte sig til employees tabel for sig selv, har resultatsættet ikke den række, hvis managerkolonne indeholder en NULL værdi.

Bemærk, at sammenkædningsoperatoren || sammenkæder flere strenge til en enkelt streng. I eksemplet bruger vi sammenkædningsoperatoren til fra de fulde navne på medarbejderne ved at sammenkæde fornavn, mellemrum og efternavn.

Hvis du vil forespørge den administrerende direktør, som ikke rapporterer til nogen, skal du ændre INNER JOIN klausul til LEFT JOIN klausul i forespørgslen ovenfor.

Andrew Adams er administrerende direktør, fordi han ikke anmelder nogen.

Du kan bruge selvtilmeldingsteknikken til at finde de ansatte, der er placeret i samme by som følgende forespørgsel:

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)

Prøv det

Sammenkædningsbetingelsen har to udtryk:

  • e1.city = e2.city at sikre, at begge medarbejdere er placeret i samme by
  • e.firstname <> e2.firstname AND e1.lastname <> e2.lastname for at sikre, at e1 og e2 ikke er den samme medarbejder med den antagelse, at der ikke er medarbejdere, der har samme fornavn og efternavn.

I dette selvstudium har vi vist dig, hvordan du bruger SQLite-selvforbindelsesteknikken til at forbinde en tabel med sig selv.


  1. Hvordan bruger man et ALIAS i en PostgreSQL ORDER BY-klausul?

  2. Hvordan importerer jeg moduler eller installerer udvidelser i Postgres?

  3. Postgres funktion NULL værdi for række, der refererer til NY

  4. Ret "FEJL:mangler FROM-klausulindtastning for tabel" i PostgreSQL, når du bruger UNION, EXCEPT eller INTERSECT