Używanie sprzężeń własnych
Do tej pory używane sprzężenia obejmowały różne tabele. Mogą istnieć scenariusze, w których trzeba pobrać i porównać wiersze z tabeli z innymi wierszami z tej samej tabeli. Na przykład w aplikacji kadr tabela Employee może zawierać informacje o kierowniku każdego pracownika i przechowywać identyfikator menedżera w wierszu pracownika. Każdy menedżer jest również wymieniony jako pracownik.
EmployeeID (Identyfikator pracownika)
FirstName
Identyfikator menedżera
1
Dan
NULL
2
Aisha
1
3
Rosie
1
4
Naomi
3
Aby pobrać informacje o pracownikach i dopasować je do powiązanego menedżera, możesz użyć tabeli dwa razy w zapytaniu, dołączając ją do siebie na potrzeby zapytania.
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;
Wyniki tego zapytania obejmują wiersz dla każdego pracownika z nazwą swojego menedżera. Dyrektor generalny firmy nie ma menedżera. Aby uwzględnić dyrektora generalnego w wynikach, jest używane sprzężenie zewnętrzne, a nazwa menedżera jest zwracana jako NULL dla wierszy, w których pole ManagerID nie ma pasującego pola EmployeeID .
Pracownik
Menedżer
Dan
NULL
Aisha
Dan
Rosie
Dan
Naomi
Rosie
Istnieją inne scenariusze, w których chcesz porównać wiersze w tabeli z różnymi wierszami w tej samej tabeli. Jak już wiesz, dość łatwo jest porównać kolumny w tym samym wierszu przy użyciu języka T-SQL, ale metoda porównywania wartości z różnych wierszy (takich jak wiersz, który przechowuje czas rozpoczęcia, a drugi wiersz w tej samej tabeli, w której jest przechowywany odpowiedni czas zatrzymania), jest mniej oczywisty. Sprzężenia własne są przydatną techniką dla tego typu zapytań.
Aby wykonać takie zadania, należy wziąć pod uwagę następujące wytyczne:
- Zdefiniuj dwa wystąpienia tej samej tabeli w klauzuli FROM i połącz je zgodnie z potrzebami przy użyciu sprzężeń wewnętrznych lub zewnętrznych.
- Użyj aliasów tabeli, aby odróżnić dwa wystąpienia tej samej tabeli.
- Użyj klauzuli ON, aby podać filtr porównujący kolumny z jednym wystąpieniem tabeli z kolumnami z drugiego wystąpienia tabeli.