Použití samoobslužných spojení
Zatím spojení, která jsme použili, zahrnovala různé tabulky. Můžou existovat scénáře, ve kterých potřebujete načíst a porovnat řádky z tabulky s dalšími řádky ze stejné tabulky. Například v aplikaci lidských zdrojů může tabulka Zaměstnanec obsahovat informace o nadřízený každého zaměstnance a uložit ID manažera do vlastního řádku zaměstnance. Každý nadřízený je také uvedený jako zaměstnanec.
EmployeeID
FirstName
Managerid
0
Dan
NULL
2
Aisha
1
3
Rosie
1
4
Naomi
3
Pokud chcete načíst informace o zaměstnancích a spárovat je se souvisejícím manažerem, můžete tabulku použít dvakrát ve svém dotazu a připojit ji k sobě pro účely dotazu.
SELECT emp.FirstName AS Employee,
mgr.FirstName AS Manager
FROM HR.Employee AS emp
LEFT OUTER JOIN HR.Employee AS mgr
ON emp.ManagerID = mgr.EmployeeID;
Výsledky tohoto dotazu obsahují řádek pro každého zaměstnance se jménem jeho nadřízený. Generální ředitel společnosti nemá žádného manažera. Pokud chcete do výsledků zahrnout ceo, použije se vnější spojení a jméno manažera se vrátí jako NULL pro řádky, ve kterých pole ManagerID neobsahuje odpovídající pole EmployeeID.
Zaměstnanec
Manažer
Dan
NULL
Aisha
Dan
Rosie
Dan
Naomi
Rosie
Existují i jiné scénáře, ve kterých budete chtít porovnat řádky v tabulce s různými řádky ve stejné tabulce. Jak jste viděli, je poměrně snadné porovnat sloupce ve stejném řádku pomocí T-SQL, ale metoda porovnání hodnot z různých řádků (například řádek, který ukládá počáteční čas, a další řádek ve stejné tabulce, ve které je uložen odpovídající čas zastavení), je méně zřejmé. Spojení sama o sobě jsou užitečnou technikou pro tyto typy dotazů.
Při provádění podobných úkolů byste měli zvážit následující pokyny:
- Definujte dvě instance stejné tabulky v klauzuli FROM a podle potřeby je spojte pomocí vnitřních nebo vnějších spojení.
- Pomocí aliasů tabulky odlište dvě instance stejné tabulky.
- Pomocí klauzule ON můžete poskytnout filtr porovnávající sloupce jedné instance tabulky se sloupci z druhé instance tabulky.