Podsumowanie :w tym samouczku dowiesz się o specjalnym typie złączenia zwanym SQLite self-join, który pozwala na łączenie tabeli ze sobą.
Pamiętaj, że powinieneś znać INNER JOIN
i LEFT JOIN
klauzule przed kontynuowaniem tego samouczka.
Wprowadzenie do samodzielnego łączenia SQLite
Self-join jest specjalnym rodzajem złączeń, które pozwalają na dołączenie tabeli do niej samej za pomocą LEFT JOIN
lub INNER JOIN
klauzula. Korzystasz z funkcji samodzielnego łączenia, aby utworzyć zestaw wyników, który łączy wiersze z innymi wierszami w tej samej tabeli.
Ponieważ nie możesz odwoływać się do tej samej tabeli więcej niż jednej w zapytaniu, musisz użyć aliasu tabeli, aby przypisać tabeli inną nazwę podczas korzystania z funkcji samodzielnego łączenia.
Sprzężenie samodzielne porównuje wartości tych samych lub różnych kolumn w tej samej tabeli. Tylko jeden stół jest zaangażowany w samodzielne łączenie.
Często używasz samołączenia do zapytania o relacje rodzice/dziecko przechowywane w tabeli lub w celu uzyskania bieżących sum.
Przykłady samodzielnego łączenia SQLite
Będziemy korzystać z employees
tabeli w przykładowej bazie danych do demonstracji.
employees
tabela przechowuje nie tylko dane pracowników, ale także dane organizacyjne. ReportsTo
kolumna określa relacje sprawozdawcze między pracownikami.
Jeśli pracownik podlega kierownikowi, wartość ReportsTo
kolumna wiersza pracownika jest równa wartości EmployeeId
kolumna wiersza menedżera. W przypadku, gdy pracownik nie zgłasza się do nikogo, ReportsTo
kolumna ma wartość NULL
.
Aby uzyskać informacje o tym, kto jest bezpośrednim podwładnym, użyj następującego oświadczenia:
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)
Wypróbuj
W instrukcji użyto INNER JOIN
klauzula dołączenia do employees
Do siebie. employees
stół pełni dwie role:pracowników i menedżerów.
Ponieważ użyliśmy INNER JOIN
klauzula dołączenia do employees
tabeli do siebie, zestaw wyników nie zawiera wiersza, którego kolumna menedżera zawiera NULL
wartość.
Zauważ, że operator konkatenacji ||
łączy wiele ciągów w jeden ciąg. W tym przykładzie używamy operatora konkatenacji do od pełnych nazwisk pracowników, łącząc imię, spację i nazwisko.
Jeśli chcesz zapytać CEO, który nikomu nie podlega, musisz zmienić INNER JOIN
klauzula LEFT JOIN
klauzula w powyższym zapytaniu.
Andrew Adams
jest dyrektorem generalnym, ponieważ nikogo nie zgłasza.
Możesz użyć techniki samodzielnego łączenia, aby znaleźć pracowników znajdujących się w tym samym mieście, co następujące zapytanie:
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)
Wypróbuj
Warunek łączenia ma dwa wyrażenia:
e1.city = e2.city
aby upewnić się, że obaj pracownicy znajdują się w tym samym mieściee.firstname <> e2.firstname AND e1.lastname <> e2.lastname
aby upewnić się, żee1
ie2
nie są tym samym pracownikiem z założeniem, że nie ma pracowników o tym samym imieniu i nazwisku.
W tym samouczku pokazaliśmy, jak korzystać z techniki łączenia się w SQLite, aby dołączyć tabelę do siebie.