Zarówno łączenia wewnętrzne, jak i zewnętrzne służą do łączenia danych z dwóch lub więcej tabel; jednak istnieje kilka kluczowych różnic! Przeczytaj ten artykuł, aby poznać mocne strony każdego polecenia i kiedy ich używać.
Aby jak najlepiej wykorzystać tę i nasze inne lekcje, poćwicz korzystanie z przykładów!
Wszystkie przykłady do tej lekcji są oparte na programie Microsoft SQL Server Management Studio i bazie danych AdventureWorks2012. Zacznij korzystać z tych bezpłatnych narzędzi, korzystając z mojego Przewodnika Pierwsze kroki w programie SQL Server.
Jaka jest różnica między połączeniami wewnętrznymi i zewnętrznymi?
Złączenia wewnętrzne i zewnętrzne to połączenie wierszy z dwóch lub więcej tabel w jeden wynik przy użyciu warunku łączenia. Warunek łączenia określa, w jaki sposób kolumny z każdej tabeli są dopasowywane do siebie. W większości przypadków celem jest znalezienie równych wartości między tabelami i uwzględnienie tych dopasowań.
Najczęstszym przypadkiem jest dopasowanie klucza obcego jednej tabeli do klucza podstawowego innej , na przykład podczas używania i ID do wyszukiwania wartości.
Chociaż zarówno łączenia wewnętrzne, jak i zewnętrzne obejmują wiersze z obu tabel, gdy warunek dopasowania się powiedzie, różnią się one sposobem obsługi warunku fałszywego dopasowania.
Złączenia wewnętrzne nie zawierają niezgodnych wierszy; mając na uwadze, że złączenia zewnętrzne je uwzględniają.
Zagłębmy się nieco w mechanikę każdego z nich
Mechanika łączenia wewnętrznego
Sprzężenie wewnętrzne służy do zwracania wyników łącząc wiersze z dwóch lub więcej tabel.
W najprostszym przypadku, gdy nie ma warunku łączenia, sprzężenie wewnętrzne łączyłoby wszystkie wiersze z jednej tabeli z wierszami z innej. Gdyby pierwsza tabela zawierała trzy wiersze, a druga cztery, wynik końcowy zawierałby dwanaście (3 x 4 = 12)!
Celem warunku łączenia jest ograniczenie liczby wierszy, które są łączone. W większości przypadków ograniczamy wiersze do tych pasujących do kolumny.
Jeśli dana osoba ma więcej niż jeden numer telefonu, następuje więcej niż jedno dopasowanie. Na tej podstawie widać, że możemy otrzymać więcej zwróconych wierszy niż dla każdej osoby.
I odwrotnie, jeśli dana osoba nie ma numeru telefonu, nie będzie wpisu w PersonPhone ani dopasowania. Ta konkretna osoba nie zostanie uwzględniona w wynikach, ponieważ uwzględniane są tylko te z dopasowaniami.
Spróbujmy na przykładzie.
Przykład łączenia wewnętrznego
Załóżmy HR Manager chce utworzyć książkę telefoniczną. Chcą imię, nazwisko, stanowisko i numery telefonów tej osoby. Jakiego zapytania możesz użyć, aby to utworzyć?
Oto jedno, które by załatwiło sprawę:
SELECT P.FirstName, P.LastName, P.Title, PH.PhoneNumberFROM Person.Person AS P INNER JOIN Person.PersonPhone AS PH ON P.BusinessEntityID = PH.BusinessEntityID AND PH.PhoneNumberTypeID = 3ORDER BY P.LastName
INNER JOIN określa, które tabele dołączyć i warunek dopasowania. Warunek PH.Phone NumberTyeID = 3 ogranicza zapytanie do numerów służbowych.
Jeśli uruchomisz powyższe, otrzymasz następujące wyniki:
Pamiętaj, że sprzężenie wewnętrzne zwraca tylko wiersz, w którym warunek dopasowania jest prawdziwy. W tym przykładzie wiersze, w których nie są zgodne BusinessEntityID, nie są uwzględniane. Może to stanowić problem, jeśli dana osoba nie ma numeru telefonu, ponieważ tych pracowników nie byłoby na liście.
Jeśli chcesz uwzględnić tych pracowników, możesz użyć sprzężenia zewnętrznego.
Mechanika łączenia zewnętrznego
Sprzężenie zewnętrzne służy do zwracania wyników poprzez łączenie wierszy z dwóch lub więcej tabel. Ale w przeciwieństwie do sprzężenia wewnętrznego, sprzężenie zewnętrzne zwróci każdy wiersz z jednej określonej tabeli, nawet jeśli warunek łączenia nie powiedzie się.
Weź powyższy przykład z katalogu telefonów. Gdyby menedżer HR chciał wymienić każdego pracownika, niezależnie od tego, czy miał służbowy numer telefonu, wtedy byłoby to możliwe dzięki zastosowaniu łączenia zewnętrznego.
SELECT P.FirstName, P.LastName, P.Title, PH.PhoneNumberFROM Person.Person AS P LEFT OUTER JOIN Person.PersonPhone AS PH ON P.BusinessEntityID = PH.BusinessEntityID AND PH.PhoneNumberTypeID = 3ORDER BY P.LastName
Możesz dowiedz się więcej o lewych i prawych złączeniach zewnętrznych w tym artykule, na razie po prostu zrozum, że gdy używane jest LEFT OUTER JOIN, wszystkie wiersze tabeli w klauzuli FROM są uwzględniane w wyniku, nawet jeśli nie znaleziono dopasowania z inna tabela.
Jeśli dopasowanie nie zostanie znalezione, w kolumnie jest umieszczana wartość NULL.
Możesz to zobaczyć w akcji poniżej:
Zwróć uwagę na przykład PhoneNumber dla Catherine Abel ma wartość NULL. Dzieje się tak, ponieważ numer roboczy Catherine nie jest wymieniony, a podczas łączenia nie znaleziono żadnego dopasowania.
Jeśli byłoby to sprzężenie wewnętrzne, ten wiersz nie zostałby uwzględniony w wynikach.