Używanie sprzężeń zewnętrznych

Ukończone

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ą łączenia ZEWNĘTRZNEGO można wyświetlić wszystkie wiersze, które mają pasujące wiersze pomiędzy tabelami, oraz wszystkie wiersze, które nie mają dopasowania w drugiej tabeli. Przyjrzyjmy się przykładowi, a następnie przyjrzyjmy się procesowi.

Najpierw sprawdź następujące zapytanie, napisane przy użyciu INNER JOIN.

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.

Diagram Venna przedstawiający wspólne elementy zestawów Employee (Pracownik) i SalesOrder (Zamówienia sprzedaży)

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.

Diagram Venna przedstawiający wyniki sprzężenia zewnętrznego zestawów Employee i SalesOrder

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 tutaj:

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 jawny na temat rodzaju stosowanego 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 na 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 wielotabelowe są bardziej złożone, gdy zastosowana jest operacja sprzężenia ZEWNĘTRZNEGO. Obecność nulls w wynikach sprzężenia zewnętrznego może powodować problemy, jeśli wyniki pośrednie są następnie połączone z trzecią tabelą. Wiersze z wartościami NULL mogą być filtrowane przez predykat drugiego łączenia.
  • 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ężenie zewnętrzne jest rzadko używane. Zwraca wszystkie pasujące wiersze między dwoma tabelami, wszystkie wiersze z pierwszej tabeli bez dopasowania w drugiej oraz wszystkie wiersze w drugiej tabeli bez dopasowania w pierwszej.
  • 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.