Łączenie wewnętrzne a łączenie zewnętrzne
Łączenie wewnętrzne i Łączenie zewnętrzne to dwie metody łączenia SQL używane w przetwarzaniu zapytań dla baz danych. Należą do rodziny klauzul sprzężenia (pozostałe dwie to sprzężenia lewe i prawe). Istnieje jednak opcja Self Join, której można użyć w specjalnych sytuacjach. Celem Join jest połączenie pól przy użyciu wspólnych wartości z dwiema tabelami. Te sprzężenia łączą rekordy z wielu tabel w bazie danych. Tworzy zestawy wynikowe, które można zapisać jako inną tabelę.
Co to jest połączenie wewnętrzne?
Najczęściej używaną operacją SQL Join jest Inner Join. Można go uznać za domyślny typ sprzężenia używany w aplikacjach. Sprzężenie wewnętrzne używa predykatu złączenia do łączenia dwóch tabel. Zakładając, że dwie tabele to A i B, predykat złączenia porówna wiersze A i B, aby znaleźć wszystkie pary, które spełniają predykat. Wartości kolumn wszystkich zadowolonych wierszy tabel A i B są łączone w celu utworzenia wyniku. Można na to spojrzeć jak na najpierw pobranie sprzężenia krzyżowego (iloczyn kartezjański) wszystkich rekordów, a następnie zwrócenie tylko tych rekordów, które spełniają predykat złączenia. Jednak w rzeczywistości iloczyn kartezjański nie jest obliczany, ponieważ jest bardzo nieefektywny. Zamiast tego używane jest sprzężenie haszujące lub sprzężenie sort-merge.
Co to jest połączenie zewnętrzne?
W przeciwieństwie do sprzężenia wewnętrznego, sprzężenie zewnętrzne przechowuje 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 niedopasowane rekordy będą miały wartości null. Sprzężenia zewnętrzne są podzielone na trzy podkategorie. Są to lewe sprzężenie zewnętrzne, prawe sprzężenie zewnętrzne i pełne sprzężenie zewnętrzne. To rozróżnienie opiera się na tym, który wiersz tabeli (lewa tabela, prawa tabela lub obie tabele) jest zachowywany po znalezieniu niezgodnych rekordów. Lewe sprzężenia zewnętrzne (znane również jako po prostu sprzężenie lewe) zachowują wszystkie rekordy lewej tabeli. Oznacza to, że nawet jeśli liczba pasujących rekordów wynosi zero, to nadal będzie miała rekordy w tabeli wynikowej, ale będzie miała wartości null dla wszystkich kolumn B. Innymi słowy, wszystkie wartości z lewej tabeli zostaną zwrócone 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 zostaną dopasowane do jednego wiersza z prawej tabeli, wiersz z prawej tabeli zostanie powtórzony zgodnie z wymaganiami. Prawe sprzężenie zewnętrzne jest bardzo podobne do lewego sprzężenia zewnętrznego, ale traktowanie tabel jest szanowane. Oznacza to, że wynik przynajmniej raz będzie zawierał wszystkie wiersze prawej tabeli z dopasowanymi wartościami lewej tabeli (i wartościami null dla niedopasowanych prawych wartości). Pełne sprzężenie zewnętrzne jest bardziej wszechstronne niż lewe i prawe sprzężenia zewnętrzne. Powoduje to połączenie efektu nakładania zarówno lewego, jak i prawego zewnętrznego połączonego.
Jaka jest różnica między złączeniem wewnętrznym a złączem zewnętrznym?
Złączenie wewnętrzne nie zachowuje niedopasowanych wierszy w wyniku, ale sprzężenie zewnętrzne zachowa wszystkie rekordy z co najmniej jednej tabeli (w zależności od tego, które sprzężenie zewnętrzne zostało użyte). Tak więc zachowanie braku informacji w niedopasowanych wierszach w tabeli wynikowej jest niepożądane, należy zawsze używać jednego ze sprzężeń zewnętrznych (zamiast sprzężenia wewnętrznego). Sprzężenie wewnętrzne może nie dać wyniku, jeśli nie zostaną znalezione żadne dopasowania. Ale sprzężenie zewnętrzne zawsze wygeneruje tabelę wynikową, nawet bez pasujących wierszy. Sprzężenie wewnętrzne zawsze zwróci tabele z wartościami (jeśli zostaną zwrócone). Ale sprzężenia zewnętrzne mogą skutkować tabelami z wartościami null.