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 bye.firstname <> e2.firstname AND e1.lastname <> e2.lastname
for at sikre, ate1
oge2
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.