Použití samoobslužných spojení

Dokončeno

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.