SQLShack (Polski)

Ten artykuł zawiera pełne omówienie wraz z przykładami sprzężenia zewnętrznego SQL, w tym pełnego, prawego i lewego sprzężenia zewnętrznego, a także obejmuje związek między lewym i prawym sprzężeniem zewnętrznym SQL.

Istotne jest zrozumienie procesu uzyskiwania danych z wielu stoły. Początkujący może nie mieć pomysłu na łączenie w SQL Server. W tej wskazówce omówimy sprzężenia SQL, nauczymy się SQL OUTER JOIN wraz z jego składnią, przykładami i przypadkami użycia.

W systemie relacyjnych baz danych najlepiej postępować zgodnie z zasadami normalizacji, w której w zasadzie dzielimy duże tabele na mniejsze. W instrukcji select możemy pobrać dane z tych tabel za pomocą sprzężeń. Możemy połączyć tabele i pobrać wymagane pola z tych tabel w zestawie wyników. Tabele te powinny mieć jakieś wspólne pole, aby były ze sobą powiązane. Możesz znaleźć dane podzielone na wiele baz danych, a czasami jest to również bardzo złożona struktura. Dzięki złączeniom możemy połączyć dane z wielu tabel, baz danych w przyjazny dla użytkownika sposób i przedstawić te dane w aplikacji.

Możemy przedstawić SQL JOIN za pomocą następującego obrazu

W SQL Server można używać wielu typów sprzężeń SQL. Na poniższej ilustracji można zobaczyć kategorie sprzężeń SQL

Przyjrzyjmy się bliżej złączu SQL Outer w następnej sekcji.

Omówienie SQL OUTER JOIN

Używamy SQL OUTER JOIN do dopasowywania wierszy między tabelami. Możemy chcieć uzyskać pasujące wiersze wraz z niedopasowanymi wierszami z jednej lub obu tabel. Mamy następujące trzy typy ZEWNĘTRZNYCH ŁĄCZEŃ SQL.

  1. Pełne łączenie zewnętrzne SQL
  2. Łączenie lewostronne SQL
  3. Łączenie zewnętrzne SQL prawe

Przyjrzyjmy się każdemu złączu zewnętrznemu SQL z przykładami.

Pełne sprzężenie zewnętrzne SQL

W SQL Full Outer Join uwzględnione są wszystkie wiersze z obu tabel . Jeśli są jakieś niedopasowane wiersze, pokazuje dla nich wartości NULL.

Efektywnie możemy zrozumieć, używając przykładów. Utwórzmy przykładową tabelę i wstaw do niej dane.

Możesz odwołać się do następującego modelu danych obu tabel.

Wstaw dane do tabeli Employee za pomocą następującego skryptu.

Wstaw dane do tabeli Departments

Za pomocą diagramu Venna możemy przedstawić relację logiczną między dwiema tabelami. Na diagramie Venna zawiera wiele nakładających się okręgów, a każdy okrąg reprezentuje jednostkę lub tabelę. Wspólny obszar lub nakładający się obszar na diagramie Venna przedstawia wspólne wartości między obiema tabelami.

Na przykład na poniższym zrzucie ekranu mamy dwa nakładające się okręgi. Każde koło przedstawia tabelę (pracownicy i działy). Zrozummy FULL Outer Join na poniższym przykładzie.

W obu tabelach mamy wspólne pole (EmpID); dlatego możemy połączyć tabelę z tą kolumną. W poniższym zapytaniu zdefiniowaliśmy FULL OUTER JOIN między działami i tabelą Employee w kolumnie EMPID obu tabel.

1
2
3

WYBIERZ *
Z Pracownik
PEŁNE DOŁĄCZENIE ZEWNĘTRZNE Departamenty ON Employee.EmpID = Departments.EmpID;

Pełne zewnętrzne sprzężenie SQL daje następujące wiersze w wyniku

  • Dopasowanie wierszy między obiema tabelami
  • Niedopasowane wiersze z obu tabel (wartości NULL )

Wykonajmy to zapytanie, aby zwrócić wynik zapytania Full Outer Join. Otrzymujemy następujący wynik.

Widzimy również kilka rekordów z wartościami NULL. Zrozummy to lepiej, używając diagramu Venna.

Na poniższym zrzucie ekranu możesz zobaczyć następujące informacje

  • EmpID 1, 2,3,4,5 , 6,10 istnieje zarówno w tabeli Pracownicy, jak i Działy. W wyniku zapytania Full Outer Join otrzymujemy wszystkie te wiersze z danymi z obu tabel.
  • EmpID 7, 8, 9 istnieje w tabeli Employee, ale nie znajduje się w tabeli Departments. Nie zawiera żadnych pasujących wierszy w tabeli działów; w związku z tym; otrzymujemy wartości NULL dla tych rekordów

Teraz, dla celów demonstracyjnych, wstawmy jeszcze jeden rekord w tabelach Departments . W tym zapytaniu wstawiamy EmpID 11, który nie istnieje w tabeli Employee.

Ponownie uruchom zapytanie SQL Full Outer Join. Na poniższej ilustracji otrzymujesz jeden dodatkowy wiersz z wartościami NULL. Nie mamy żadnego pasującego wiersza dla EmpID 11 w tabeli pracowników.Z tego powodu w wyniku otrzymujemy dla niego wartości NULL.

Podsumowując, możemy przedstawić pełne połączenie zewnętrzne SQL za pomocą następującego diagramu Venna. Otrzymujemy to, co jest reprezentowane w podświetlonym obszarze w danych wyjściowych Full Outer Join.

SQL FULL OUTER JOIN i WHERE klauzula

Możemy dodać klauzulę WHERE z SQL FULL OUTER JOIN, aby uzyskać wiersze bez pasujących danych między obiema tabelami Join.

W poniższym zapytaniu dodajemy klauzulę where do pokaż tylko rekordy mające wartości NULL.

1
2
3
4
5

SELECT *
FROM Employee
FULL OUTER DOŁĄCZ Departments ON Employee.EmpID = Departments.EmpID
WHERE Employee.EmpID IS NULL
OR Departments.EmpID IS NULL;

Wykonaj to polecenie i wyświetl wynik. Zwraca tylko wiersze, które nie pasują ani w tabeli Employee, ani Departments.

SQL LEFT OUTER JOIN

W połączeniu SQL Left Outer, otrzymujemy następujące wiersze w naszym wyniku.

  • Daje wynik pasującego wiersza między obiema tabelami
  • Jeśli żadne rekordy nie pasują z lewej tabeli, pokazuje również te rekordy z wartościami NULL

Wykonaj następujący kod, aby zwrócić wyjście SQL LEFT OUTER JOIN

1
2
3

SELECT *
FROM Employee
LEFT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

Na poniższej ilustracji widać, że mamy wartości NULL dla EmpID 7,8 i 9. Te EmpID nie istnieją po prawej stronie Tabela działu.

Musimy zwrócić uwagę na położenie tabeli w instrukcji Join. Obecnie mamy tabelę Employee po lewej stronie i tabelę Departments po prawej stronie.

Przepiszmy zapytanie i zamieńmy pozycje tabel w zapytaniu. W tym zapytaniu mamy tabelę Departamentu na lewej pozycji, więc Left Outer Join powinno sprawdzić wartości tej tabeli i zwrócić wartość NULL w przypadku niezgodności.

Na poniższym zrzucie ekranu możesz zobacz, że tylko jedna wartość NULL dla EmpID 11. Dzieje się tak, ponieważ EmpID 11 nie jest dostępny w tabeli Employee.

Ponieważ podsumowując, możemy przedstawić lewe sprzężenie zewnętrzne SQL za pomocą poniższego diagramu Venna. Otrzymujemy podświetlony obszar w danych wyjściowych SQL Left Outer Join.

SQL Right OUTER JOIN

W SQL Right Outer Join otrzymujemy następujące wiersze w naszym wyniku.

  • Daje wynik pasującego wiersza między obiema tabelami
  • Jeśli żadne rekordy nie pasują do prawej tabeli, pokazuje również te rekordy z wartościami NULL

Wykonaj następujące zapytanie, aby uzyskać wynik działania Right Outer Join

1
2
3

SELECT *
FROM Employee
RIGHT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

Na poniższej ilustracji widać, że otrzymujemy wszystkie pasujące wiersze wraz z jednym wierszem z wartościami NULL. Wiersz wartości zerowej ma EmpID 11, ponieważ nie istnieje w tabeli Employee. Możesz również zauważyć, że pozycja tabeli Dział jest we właściwej pozycji w Połącz. Z tego powodu nie otrzymujemy wartości z tabeli Employee (lewa pozycja), która nie jest zgodna z tabelą Department (prawa strona).

Jak podkreślono wcześniej, pozycja tabeli jest ważna w instrukcji JOIN. Jeśli zmienimy pozycje tabeli, otrzymamy inny wynik. W poniższym zapytaniu mamy tabelę Działy (po lewej) i tabelę pracowników (po prawej).

1
2
3
4

SELECT *
Z DZIAŁÓW
PRAWA ZEWNĘTRZNA DOŁĄCZ Pracownik w działach.EmpID = Pracownik.EmpID

Możesz zauważyć różnicę w Right Outer Join po zamianie pozycji tabel w powyższym zapytaniu.

Podsumowując, możemy przedstawić prawe sprzężenie zewnętrzne SQL za pomocą poniższego diagramu Venna. Otrzymujemy podświetlony obszar na wyjściu SQL Right Outer Join.

Związek między SQL Left Outer Join i SQL Right Outer Join

W poprzednich przykładach zbadaliśmy lewe sprzężenie zewnętrzne SQL i prawe sprzężenie zewnętrzne SQL z różnymi przykładami. Możemy wykonać sumę wyniku zarówno lewego zewnętrznego sprzężenia SQL, jak i prawego zewnętrznego sprzężenia SQL. Daje dane wyjściowe pełnego połączenia zewnętrznego SQL.

Wykonaj następujące zapytanie jako alternatywę dla pełnego połączenia zewnętrznego SQL.

1
2
3
4
5
6
7

SELECT *
FROM Employee
LEFT OUTER DOŁĄCZ DO Działów WŁĄCZONY Employee.EmpID = Departments.EmpID
UNION ALL
SELECT *
FROM Employee
RIGHT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

W poniższym wyniku otrzymamy wszystko dopasowywanie rekordów, usuwanie dopasowania rekordów z lewej tabeli i usuwanie dopasowania rekordów z prawej tabeli. Jest podobny do wyniku działania pełnego sprzężenia zewnętrznego SQL.

Wniosek

W tym artykule zbadaliśmy SQL Outer Join i jego typy wraz z przykładami. Mam nadzieję, że ten artykuł okazał się pomocny. Zachęcamy do wyrażania opinii w komentarzach poniżej.

  • Autor
  • Najnowsze posty
Jako certyfikowany przez MCSA i certyfikowany trener Microsoft w Gurgaon w Indiach, z 13-letnim doświadczeniem, Rajendra pracuje dla różnych dużych firm, koncentrując się na optymalizacji wydajności, monitorowaniu, wysokiej dostępności i strategiach odtwarzania po awarii oraz wdrażaniu. Jest autorem setek autorytatywnych artykułów na temat SQL Server, Azure, MySQL, Linux, Power BI, Performance Tuning, AWS / Amazon RDS, Git i powiązanych technologii, które do tej pory obejrzało ponad 10 milionów czytelników.
Jest twórcą jednej z największych bezpłatnych kolekcji artykułów online na jeden temat, w tym 50-częściowej serii na temat grup dostępności SQL Server Always On. Dzięki swojemu wkładowi w społeczność SQL Server, został wyróżniony różnymi nagrodami, w tym prestiżową nagrodą „Najlepszy autor roku” nieprzerwanie w 2020 i 2021 roku w SQLShack.
Raj jest zawsze zainteresowany nowymi wyzwaniami, więc jeśli potrzebujesz konsultacji pomoc na każdy temat poruszony w jego pismach, można się z nim skontaktować pod adresem [email protected]
Wyświetl wszystkie posty autorstwa Rajendry Gupty

Najnowsze posty Rajendry Gupty (zobacz wszystkie)
  • Limity czasu sesji w SQL Server Always On Availability Grupy – 8 lutego 2021
  • Wykonywanie mniejszych i głównych aktualizacji wersji AWS RDS SQL Server – 29 stycznia 2021
  • Wdrażanie wystąpień AWS RDS PostgreSQL – 27 stycznia 2021

Write a Comment

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *