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.cityzajistit, aby se oba zaměstnanci nacházeli ve stejném městěe.firstname <> e2.firstname AND e1.lastname <> e2.lastnameabyste zajistili, žee1ae2nejsou 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.