TYPY ZŁĄCZEŃ TABEL: JOIN (INNER, OUTER, LEFT, RIGHT, FULL, CROSS, SELF, APPLY)
br>
Łą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.
br>
br>
PLIK DO ŚCIĄGNIĘCIA:
1. 018_Typy_Zlaczen_Tabel.sql
br>