Używanie sprzężeń zewnętrznych
Chociaż nie jest tak powszechne, jak sprzężenia wewnętrzne, użycie sprzężeń zewnętrznych w zapytaniu wielozesłowym może zapewnić alternatywny widok danych biznesowych. Podobnie jak w przypadku sprzężeń wewnętrznych, należy wyrazić relację logiczną między tabelami. Jednak pobierzesz nie tylko wiersze z pasującymi atrybutami, ale także wszystkie wiersze obecne w jednej lub obu tabelach, niezależnie od tego, czy w drugiej tabeli występuje dopasowanie.
Wcześniej pokazano, jak używać sprzężenia wewnętrznego do znajdowania pasujących wierszy między dwiema tabelami. Jak widać, procesor zapytań tworzy wyniki zapytania INNER JOIN przez odfiltrowanie wierszy, które nie spełniają warunków wyrażonych w predykacie klauzuli ON. Wynikiem jest to, że zwracane są tylko wiersze z pasującym wierszem w drugiej tabeli. Za pomocą sprzężenia ZEWNĘTRZNEgo można wyświetlić wszystkie wiersze, które mają pasujące wiersze między tabelami, oraz wszystkie wiersze, które nie mają dopasowania w innej tabeli. Przyjrzyjmy się przykładowi, a następnie przyjrzyjmy się procesowi.
Najpierw sprawdź następujące zapytanie, napisane za pomocą sprzężenia wewnętrznego:
SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
INNER JOIN Sales.SalesOrder AS ord
ON emp.EmployeeID = ord.EmployeeID;
Te wiersze reprezentują dopasowanie między hr. Employee i Sales.SalesOrder. W wynikach zostaną wyświetlone tylko te wartości EmployeeID , które znajdują się w obu tabelach.
Teraz przyjrzyjmy się następującej kwerendzie napisanej jako LEFT OUTER JOIN:
SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
LEFT OUTER JOIN Sales.SalesOrder AS ord
ON emp.EmployeeID = ord.EmployeeID;
W tym przykładzie użyto operatora LEFT OUTER JOIN, który kieruje procesor zapytań do zachowania wszystkich wierszy z tabeli po lewej stronie (HR. Pracownik) i wyświetla wartości Amount dla pasujących wierszy w kolumnie Sales.SalesOrder. Jednak wszyscy pracownicy są zwracani, niezależnie od tego, czy podjęli zamówienie sprzedaży. Zamiast wartości Amount zapytanie zwróci wartość NULL dla pracowników bez pasujących zamówień sprzedaży.
SKŁADNIA OUTER JOIN
Sprzężenia zewnętrzne są wyrażane przy użyciu słów kluczowych LEFT, RIGHT lub FULL poprzedzających SPRZĘŻENIE ZEWNĘTRZNE. Celem słowa kluczowego jest wskazanie, którą tabelę (po której stronie słowa kluczowego JOIN) należy zachować i wyświetlić wszystkie wiersze; dopasowanie lub brak dopasowania.
W przypadku definiowania sprzężenia przy użyciu lewej, PRAWEJ lub PEŁNEj można pominąć słowo kluczowe OUTER, jak pokazano poniżej:
SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
LEFT JOIN Sales.SalesOrder AS ord
ON emp.EmployeeID = ord.EmployeeID;
Jednak podobnie jak słowo kluczowe INNER, często warto napisać kod, który jest jawnie o rodzaju używanego sprzężenia.
Podczas pisania zapytań przy użyciu funkcji OUTER JOIN należy wziąć pod uwagę następujące wskazówki:
- Jak widać, aliasy tabel są preferowane nie tylko dla listy SELECT, ale także dla klauzuli ON.
- Podobnie jak w przypadku sprzężenia WEWNĘTRZNEgo, SPRZĘŻENIE ZEWNĘTRZNE może być wykonywane w jednej pasującej kolumnie lub na wielu pasujących atrybutach.
- W przeciwieństwie do SPRZĘŻENIA WEWNĘTRZNEgo kolejność, w jakiej tabele są wymienione i połączone w klauzuli FROM ma znaczenie dla sprzężenia ZEWNĘTRZNEgo, ponieważ określi, czy wybrano opcję LEFT lub RIGHT dla sprzężenia.
- Sprzężenia wielowierszowe są bardziej złożone, gdy istnieje sprzężenia ZEWNĘTRZNE. Obecność NULLs w wynikach sprzężenia ZEWNĘTRZNEgo może powodować problemy, jeśli wyniki pośrednie są następnie przyłączone do trzeciej tabeli. Wiersze z listami NUL mogą być filtrowane przez predykat drugiego sprzężenia.
- Aby wyświetlić tylko wiersze, w których nie ma dopasowania, dodaj test wartości NULL w klauzuli WHERE zgodnie z predykatem OUTER JOIN.
- Pełne sprzężenia ZEWNĘTRZNEgo jest rzadko używane. Zwraca wszystkie pasujące wiersze między dwiema tabelami, a także wszystkie wiersze z pierwszej tabeli bez dopasowania w drugim, a także wszystkie wiersze w drugim bez dopasowania w pierwszym.
- Nie ma możliwości przewidywania kolejności, z którą wiersze będą wracać bez klauzuli ORDER BY. Nie ma możliwości, aby dowiedzieć się, czy dopasowane lub niedopasowane wiersze zostaną zwrócone jako pierwsze.