Shrnutí :v tomto tutoriálu se dozvíte o speciálním typu spojení zvaném SQLite self-join, který vám umožní připojit tabulku k sobě samému.
Pamatujte, že byste měli být obeznámeni s INNER JOIN
a LEFT JOIN
klauzule před pokračováním v tomto tutoriálu.
Úvod do SQLite self-join
Vlastní spojení je speciální druh spojení, které vám umožní připojit tabulku k sobě pomocí LEFT JOIN
nebo INNER JOIN
doložka. Pomocí vlastního spojení vytvoříte sadu výsledků, která spojí řádky s ostatními řádky ve stejné tabulce.
Protože nemůžete v dotazu odkazovat na stejnou tabulku více než na jednu, musíte použít alias tabulky, abyste přiřadili tabulce jiný název, když použijete self-join.
Vlastní spojení porovnává hodnoty stejných nebo různých sloupců ve stejné tabulce. Vlastního připojení se účastní pouze jedna tabulka.
Samopřipojení často používáte k dotazování na vztah rodiče/dítě uložené v tabulce nebo k získání průběžných součtů.
Příklady vlastního připojení SQLite
Použijeme employees
tabulka ve vzorové databázi pro demonstraci.
employees
tabulka ukládá nejen data zaměstnanců, ale také organizační data. ReportsTo
sloupec určuje vztah mezi zaměstnanci.
Pokud se zaměstnanec hlásí manažerovi, hodnota ReportsTo
sloupec řádku zaměstnance se rovná hodnotě EmployeeId
sloupec řádku manažera. V případě, že se zaměstnanec nikomu nehlásí, ReportsTo
sloupec je NULL
.
Chcete-li získat informace o tom, kdo je komu přímo podřízen, použijte následující příkaz:
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)
Zkuste to
Příkaz používal INNER JOIN
klauzule pro připojení k employees
k sobě samému. employees
tabulka má dvě role:zaměstnance a manažery.
Protože jsme použili INNER JOIN
klauzule pro připojení k employees
tabulka sama o sobě, sada výsledků nemá řádek, jehož sloupec správce obsahuje NULL
hodnotu.
Všimněte si, že operátor zřetězení ||
zřetězí více řetězců do jednoho řetězce. V příkladu používáme operátor zřetězení z celých jmen zaměstnanců zřetězením křestního jména, mezery a příjmení.
V případě, že se chcete zeptat generálního ředitele, který se nikomu nehlásí, musíte změnit INNER JOIN
klauzule na LEFT JOIN
klauzule v dotazu výše.
Andrew Adams
je generálním ředitelem, protože nikoho nehlásí.
Techniku self-join můžete použít k nalezení zaměstnanců nacházejících se ve stejném městě jako následující dotaz:
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)
Zkuste to
Podmínka spojení má dva výrazy:
e1.city = e2.city
zajistit, aby se oba zaměstnanci nacházeli ve stejném městěe.firstname <> e2.firstname AND e1.lastname <> e2.lastname
abyste zajistili, žee1
ae2
nejsou stejným zaměstnancem za předpokladu, že neexistují zaměstnanci, kteří mají stejné jméno a příjmení.
V tomto tutoriálu jsme vám ukázali, jak použít techniku SQLite self-join ke spojení tabulky k sobě samému.