Łączenie wewnętrzne vs łączenie zewnętrzne
Łączenie wewnętrzne i łączenie zewnętrzne to dwie metody łączenia SQL używane w przetwarzaniu zapytań dla baz danych. Należą one do rodziny klauzul łączenia (pozostałe dwa to lewy i prawy łącznik). Istnieje jednak funkcja Self Join, która może być używana w szczególnych sytuacjach. Celem Join jest łączenie pól przy użyciu wspólnych wartości do dwóch tabel. Połączenia te łączą rekordy z wielu tabel w bazie danych. Tworzy wynikowe zestawy, które można zapisać jako kolejną tabelę.
Co to jest łączenie wewnętrzne?
Najczęściej stosowanym połączeniem SQL jest łączenie wewnętrzne. Można to uznać za domyślny typ łączenia używany w aplikacjach. Łączenie wewnętrzne użyj predykatu łączenia, aby połączyć dwie tabele. Zakładając, że dwie tabele to A i B, wtedy predykat złączenia porówna wiersze A i B, aby znaleźć wszystkie pary spełniające predykat. Wartości kolumn wszystkich zadowolonych wierszy tabel A i B są łączone, aby utworzyć wynik. Można na to spojrzeć najpierw biorąc łączenie krzyżowe (iloczyn kartezjański) wszystkich rekordów, a następnie zwracając tylko te rekordy, które spełniają predykat złączenia. W rzeczywistości jednak produkt kartezjański nie jest obliczany, ponieważ jest bardzo nieefektywny. Zamiast tego używane jest łączenie mieszające lub scalanie sortowania.
Co to jest łączenie zewnętrzne?
W przeciwieństwie do łączenia wewnętrznego połączenie zewnętrzne zachowuje wszystkie rekordy, nawet jeśli nie może znaleźć pasującego rekordu. Oznacza to, że sprzężenie zewnętrzne potrzebuje rekordu, aby znaleźć pasujący rekord, aby pojawił się w wyniku. Zamiast tego zwróci wszystkie rekordy, ale niepasujące rekordy będą miały wartości puste. Połączenia zewnętrzne są podzielone na trzy podkategorie. Są to lewe zewnętrzne połączenie, prawe zewnętrzne połączenie i pełne zewnętrzne połączenie. To rozróżnienie jest oparte na tym, który wiersz tabeli (lewa tabela, prawa tabela lub obie tabele) jest zachowywany po znalezieniu niedopasowanych rekordów. Lewe sprzężenia zewnętrzne (znane również jako po prostu lewe sprzężenie) zachowują wszystkie rekordy lewej tabeli. Oznacza to, że nawet jeśli liczba pasujących rekordów wynosi zero, to nadal będą miały rekordy w tabeli wyników, ale będą miały wartości zerowe dla wszystkich kolumn B. Innymi słowy, wszystkie wartości z lewej tabeli są zwracane z dopasowanymi wartościami z prawej tabela (lub wartości null, gdy nie są dopasowane). Jeśli wartości z wielu wierszy z lewej tabeli są dopasowane do jednego wiersza z prawej tabeli, wiersz z prawej tabeli zostanie powtórzony w razie potrzeby. Prawy łącznik zewnętrzny jest podobny do lewego łącznika zewnętrznego, ale traktowanie tabel jest szanowane. Oznacza to, że wynik będzie miał co najmniej raz wszystkie wiersze prawej tabeli z dopasowanymi wartościami lewej tabeli (i wartościami zerowymi dla niedopasowanych wartości prawej). Pełne łączenie zewnętrzne jest bardziej wszechstronne niż łączenie zewnętrzne lewe i prawe. Skutkuje to połączeniem efektu zastosowania połączonego lewego i prawego zewnętrznego.
Jaka jest różnica między łączeniem wewnętrznym a łączeniem zewnętrznym?
Łączenie wewnętrzne nie zachowuje niedopasowanych wierszy w wyniku, ale łączenie zewnętrzne zachowa wszystkie rekordy z co najmniej jednej tabeli (w zależności od zastosowanego sprzężenia zewnętrznego). Tak więc zachowanie braku informacji o niedopasowanych wierszach w tabeli wyników jest niepożądane, należy zawsze używać jednego z połączeń zewnętrznych (zamiast łączenia wewnętrznego). Łączenie wewnętrzne może nie dać wyniku, jeśli nie zostaną znalezione żadne dopasowania. Ale łączenie zewnętrzne zawsze tworzy wynikową tabelę, nawet bez pasujących wierszy. Łączenie wewnętrzne zawsze zwróci tabele z wartościami (jeśli zostaną zwrócone). Ale sprzężenia zewnętrzne mogą skutkować tabelami o wartości null.