TYPY ZŁĄCZEŃ TABEL: JOIN (INNER, OUTER, LEFT, RIGHT, FULL, CROSS, SELF, APPLY)

Kursy Online SQL Server Bazy Danych Microsotf Składnia SQL TYPY ZŁĄCZEŃ TABEL JOIN INNER OUTER LEFT RIGHT FULL CROSS SELF APPLY Andrzej Śmigielski

TYPY ZŁĄCZEŃ TABEL: JOIN (INNER, OUTER, LEFT, RIGHT, FULL, CROSS, SELF, APPLY)

 
          Łączenie wielu tabel umożliwia pobieranie danych z wielu źródeł. Chcąc otrzymać dane z więcej niż jednego źródła, czyli tabeli musimy je ze sobą odpowiednio połączyć i/lub określić warunki, według których ma zostać dokonane ich połączenie. Mówiąc prostymi słowami: po czym łączymy i w jaki sposób. Do łączenia tabel służy JOIN.
Poniżej opiszę w kilku słowach wszystkie typy złączeń.

JOIN (INNER JOIN)
● Jest to złączenie wewnętrzne i jako wynik otrzymujemy tylko dopasowane wiersze.
● Stosując samego JOIN’a SZBD domyślnie stosuje INNER, czyli typ złączenia wewnętrznego.
● W złączeniu tego typu nie ma znaczenia kolejność tabel, w każdym przypadku wynik będzie tożsamy.
● Kolejność warunków umieszczonych w ON także nie ma znaczenia.

OUTER JOIN
● Jest to złączenie zewnętrzne będące rozszerzeniem złączenia wewnętrznego.
● Działa analogicznie jak złączenie wewnętrzne, z tym, że wymagane jest dodatkowe określenie nie spełniające warunków zapytania.
● Dodatkowo możemy zastosować: LEFT, RIGHT oraz FULL.

LEFT JOIN (LEFT OUTER JOIN)
● Jest to złączenie zewnętrzne lewostronne.
● W wyniku zwracane są wszystkie wiersze występujące w tabeli po lewej stronie.
● Do powyższego wyniku dopasowywane są wiersze z prawej tabeli.
● W przypadku braku połączenia otrzymujemy wartości puste, czyli NULL’e.

RIGHT JOIN (RIGHT OUTER JOIN)
● Jest to złączenie zewnętrzne prawostronne.
● W wyniku zwracane są wszystkie wiersze występujące w tabeli po prawej stronie.
● Do powyższego wyniku dopasowywane są wiersze z lewej tabeli.
● W przypadku braku połączenia otrzymujemy wartości puste, czyli NULL’e.

FULL JOIN (FULL OUTER JOIN)
● Jest to złączenie zewnętrzne pełne.
● W wyniku zwracane są wszystkie wiersze wewnętrznie dopasowane.
● Do powyższego wyniku dopisywane są wszystkie niepołączone wiersze z obydwu tabel uzupełnione o wartości puste, czyli NULL’e.

CROSS JOIN
● Jest to złączenie wszystkich wierszy jednej tabeli ze wszystkimi wierszami z drugiej tabeli.
● Tak zwany iloczyn kartezjański
● Nie ma sensu korzystania z warunków w ON, ponieważ z założenia ma być łączone wszystko.
● Trzeba zachować szczególną ostrożność przy stosowaniu łączenia tego typu. Zakładając, że każda z tabel zawiera po 1 000 wierszy, to w rezultacie otrzymamy 1 000 000 wierszy!
● Czy ma to jakiekolwiek uzasadnienie? Może ewentualnie w obliczeniach ilości możliwych kombinacji… albo ja już za bardzo kombinuję 🙂

SELF JOIN
● Jest to połączenie tabeli samej z sobą.
● Zapis SELF JOIN nie jest dostępny, używa się w tym celu aliasów (AS).
● W tym rodzaju złączenia można dokonywać połączeń po wszystkich kolumnach.

APPLY
● Jest to operator za pomocą którego mamy możliwość implementowania złączeń „niestandardowych”, tutaj raczej mógłbym powiedzieć takich, których nie da się dokonać za pomocą wszystkich powyższych typów złączeń tabel.
● W tym przypadku mamy dwie możliwości:
– CROSS APPLY
– OUTER APPLY
● Użycie tego operatora daje możliwość traktowania zbioru jako wartości otrzymanych z funkcji zewnętrznej.
● Dzięki APPLY można łatwo implementować „zamienniki” podzapytań skorelowanych w stosunkowo łatwy i przejrzysty sposób.
● „Potrzebuję wyciągnąć pewne informacje z różnych tabel, ale nie wiem jak to zrobić.” – tutaj często odpowiedzią jest: skorzystaj z APPLY 🙂
● Często się okazuje, że jest to alternatywa dla stosunkowo mało wydajnych kursorów (CURSOR). Kursorom jest poświęcona cała lekcja w rozszerzonym kursie, jest to temat zbyt rozległy i wykracza poza zakres podstawowej wiedzy.
 
 

PLIK DO ŚCIĄGNIĘCIA:

1. 018_Typy_Zlaczen_Tabel.sql
 

KURSY SQL ONLINE