Wprowadzenie do rodzajów połączeń w SQL

Klauzula Join w SQL służy do łączenia wierszy z dwóch lub więcej tabel. Proces łączenia wierszy zależy od kolumny, która jest z nimi powiązana. Cztery różne typy złączeń w SQL są nazywane złączami wewnętrznymi, złączami lewymi, łączeniami prawymi i łączeniami pełnymi. Zanim naprawdę będziemy mogli zacząć korzystać z dowolnego rodzaju łączenia, potrzebujemy RDBMS lub systemu zarządzania relacyjnymi bazami danych, w którym będziemy ładować dane. Jednym z bardzo łatwych sposobów zrozumienia połączeń jest użycie diagramu Venna. Korzystanie ze schematu Venna ułatwia ocenę wszystkich możliwych i logicznych relacji między różnymi zestawami danych. Pozwól nam zrozumieć to jeden po drugim za pomocą diagramu Venna. Później zrozumiemy różnicę między nimi na podstawie praktycznych przykładów. Załóżmy, że w naszej bazie danych znajdują się dwa zestawy danych w formie tabeli pierwszej i tabeli drugiej. Istnieje pewna zależność między dwiema tabelami, która jest określona w postaci klucza podstawowego i koncepcji klucza obcego. Jeśli dołączysz do dwóch tabel mających jakiś związek, przedstawienie scenariusza na diagramie Venna będzie podobne:

Wielkość tego nakładania się określi stopień podobieństwa między dwiema tabelami, tj. Tabelą A i tabelą B. Oznacza to, że liczba rekordów z tabeli pierwszej, które pasują do rekordów z tabeli drugiej, jest reprezentowana przez sekcję nakładania się. To jest jeden podzbiór danych. Otrzymujemy cztery różne typy złączeń na podstawie podzbioru danych, które wybieramy z dwóch tabel.

Składnia Join:

SELECT column-names FROM table-name1 JOIN table-name2 ON column-name1 = column-name2 WHERE condition

Rodzaje złączeń w SQL

  1. Przyłączenie wewnętrzne
  2. Left Join
  3. Right Join
  4. Pełne dołączenie

Poniżej szczegółowo wyjaśniamy różne rodzaje połączeń.

1. Przyłączenie wewnętrzne

W złączeniu wewnętrznym wybieramy tylko dane, które są wspólne w obu tabelach. (tj. część 3 tutaj) Aby uczynić to bardziej precyzyjnym, wszystkie rekordy z obu tabel odpowiadające warunkowi wymienionemu dla złączenia są wybierane w tym złączeniu.

Składnia sprzężenia wewnętrznego:

SELECT column-names FROM table-name1 INNER JOIN table-name2 ON column-name1 = column-name2 WHERE condition

2. Left Join

W złączeniu z lewej strony wybieramy wszystkie dane z lewej tabeli, a z prawej tabeli wybieramy tylko zestaw danych, który odpowiada warunkowi wymienionemu dla łączenia (tutaj obszar 1 + 3)

Składnia Left Join:

SELECT column-names FROM table-name1 LEFT JOIN table-name2 ON column-name1 = column-name2 WHERE condition

3. Right Join

W prawym złączeniu wybieramy wszystkie dane z prawej tabeli, a z lewej tabeli wybieramy tylko zestaw danych, który odpowiada warunkowi wymienionemu przy złączeniu (tutaj 3 + 2)

Składnia Right Join:

SELECT column-names FROM table-name1 RIGHT JOIN table-name2 ON column-name1 = column-name2 WHERE condition

4. Pełne dołączenie

Przy pełnym złączeniu wszystkie rekordy z obu tabel są scalane i wybierane niezależnie od wspomnianego warunku, a łączenie zostało spełnione. (tutaj 1 + 2 + 3)

Składnia pełnego złączenia:

SELECT column-names FROM table-name1 FULL JOIN table-name2 ON column-name1 = column-name2 WHERE condition

Przykłady złączeń w SQL

Rozważ dwie poniższe tabele:

1. Przykład ORDER_DETAILS

Tabela zamówienia zawiera szczegóły zamówienia złożonego przez klienta, takie jak identyfikator zamówienia, liczba zamówionych produktów, kwota zamówienia, identyfikator klienta, który złożył zamówienie, oraz data złożenia zamówienia. Tego rodzaju stół może być wykorzystywany przez dowolną stronę internetową do przechowywania szczegółów zamówienia.

Tabela ORDER_DETAILS:

Order_ID No_of_Items Zamówienie_kwota Identyfikator klienta Data zamówienia
123 3) 5500 P_1 01/20/2019
234 2) 6500 P_12 02/10/2019
345 1 dziesięć tysięcy P_13 05/27/2019
456 4 4000 P_14 11/07/2019
567 2) 20656 P_1 15.12.2019
678 3) 15000 P_11 27.10.2019

2. Przykład CUSTOMER_DETAILS

Teraz weźmy kolejną tabelę, w której będą przechowywane dane klienta, aby móc dostarczyć zamówienie na ich adresy. Tabela klientów będzie zatem zawierać szczegóły klienta, takie jak identyfikator klienta (cust_id), który będzie unikalny dla każdego klienta. Teraz imię i nazwisko są przechowywane w polu o nazwie - Cust_First_Name i Cust_Last_Name. W innych polach będą przechowywane informacje, takie jak identyfikator e-mail, numer telefonu komórkowego klienta wraz z adresem, kodem PIN, miastem i stanem. W ten sposób możemy zobaczyć, że nasza tabela klienta będzie wyglądać mniej więcej tak:

Tabela CUSTOMER_DETAILS:

Cust_Id Cust_First_Name Cust_Last_Name Kod PIN Adres Cust_Mobile Miasto Stan Wiadomość e-mail
P_50 Alice Piotr 111111 330 xyz street 123 Bangalore KA
P_12 James Dsouza 155511 Kolonia 420 abc 234 Hyderabad AP
P_15 Złupić Garncarz 123456 551 mg droga 444 Noida Delhi
P_40 Miley Parker 111121 11 stóp drogi 224 Bangalore KA
P_10 Herman Krzak 123423 34 thanco Street 432 Delhi Delhi
P_18 Dan brązowy 134523 50. niezależna droga 145 Gurugram Haryana
P_20 James Russel 111111 Droga 101 mg 678 Bangalore KA
P_1 Miley Madison 100011 45- ty układ kaverappa 987 Chennai TN

Korzystając z tego przykładu, pozwól nam zrozumieć funkcjonalność złączeń. Widzimy, że związek między dwiema tabelami, tj. Tabelą ORDER_DETAILS i tabelą CUSTOMER_DETAILS, jest ustalany przez klucz, który ma wartość identyfikatora klienta, tj. Customer_Id, który jest kluczem podstawowym w tabeli CUSTOMER_DETAILS i kluczem obcym w Tabela ORDER_DETAILS.

Kilka ważnych punktów, na które należy zwrócić uwagę, zanim przejdziemy dalej:

  • Nie wszyscy klienci z naszej tabeli CUSTOMER_DETAILS złożyli zamówienie.
  • Nie wszystkie żądania zamówienia, które mamy w naszej tabeli ORDER_DETAILS, zawierają identyfikator klienta, który jest obecny w tabeli CUSTOMER_DETAILS, co oznacza, że ​​w przypadku niektórych zamówień nie ma szczegółów dotyczących klienta.

3. Przyłączenie wewnętrzne

Inner Join da ci tylko te rekordy, dla których warunek jest spełniony.

Pytanie:

select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
inner join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id

Wynik:

Cust_First_Name Wiadomość e-mail No_of_Items Zamówienie_kwota Data zamówienia
Miley 3) 5500 01/20/2019
James 2) 6500 02/10/2019
Miley 2) 20656 15.12.2019

4. Left Join

Left Join da ci wszystkie rekordy z lewej tabeli, tj. Tabeli CUSTOMER_DETAILS. Jeśli klient nie złoży zamówień, zwróci wartość zerową dla kolumn w tabeli ORDER_DETAILS.

Pytanie:

select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
left join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id

Wynik:

Cust_First_Name Wiadomość e-mail No_of_Items Zamówienie_kwota Data zamówienia
Alice ZERO ZERO ZERO
James 2) 6500 02/10/2019
Złupić ZERO ZERO ZERO
Miley ZERO ZERO ZERO
Herman ZERO ZERO ZERO
Dan ZERO ZERO ZERO
James ZERO ZERO ZERO
Miley 3) 5500 01/20/2019
Miley 2) 20656 15.12.2019

5. Right Join

Właśnie, Join da ci wszystkie rekordy z właściwej tabeli, tj. Tabeli ORDER_DETAILS. Jeśli nie znaleziono żadnych rekordów klientów dla zamówienia, zwróci wartość zerową dla kolumn w tabeli CUSTOMER_DETAILS.

Pytanie:

select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
right join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id

Wynik:

Cust_First_Name Wiadomość e-mail No_of_Items Zamówienie_kwota Data zamówienia
Miley 3) 5500 01/20/2019
James 2) 6500 02/10/2019
ZERO ZERO 1 dziesięć tysięcy 05/27/2019
ZERO ZERO 4 4000 11/07/2019
Miley 2) 20656 15.12.2019
ZERO ZERO 3) 15000 27.10.2019

6. Pełne dołączenie

Full Join da ci wszystkie rekordy określone z obu tabel.

Pytanie:

select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
full join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id

Wynik:

Cust_First_Name Wiadomość e-mail No_of_Items Zamówienie_kwota Data zamówienia
Alice ZERO ZERO ZERO
James 2) 6500 02/10/2019
Złupić ZERO ZERO ZERO
Miley ZERO ZERO ZERO
Herman ZERO ZERO ZERO
Dan ZERO ZERO ZERO
James ZERO ZERO ZERO
Miley 3) 5500 01/20/2019
Miley 2) 20656 15.12.2019
ZERO ZERO 1 dziesięć tysięcy 05/27/2019
ZERO ZERO 4 4000 11/07/2019
ZERO ZERO 3) 15000 27.10.2019

Zalety połączeń w SQL

  1. Szybsze wykonanie, co oznacza szybsze pobieranie pożądanych kolumn.
  2. Zoptymalizowany, czytelny i zrozumiały
  3. Wzrost wydajności.

Wniosek

Jak widać, używamy JOIN do dołączania i pobierania pól z różnych tabel.

  • Łączenie wewnętrzne pobiera rekordy, w których spełniony jest dany warunek.
  • Left Join da ci wszystkie wiersze z lewej tabeli, nawet jeśli podany warunek nie jest zgodny.
  • Right Join da ci wszystkie wiersze z lewej tabeli, nawet jeśli podany warunek nie jest zgodny.
  • Funkcja Full Join zwraca wszystkie wiersze, gdy w jednej z tabel występuje dopasowanie.
  • Zapytań łączących można używać z poleceniami takimi jak: SELECT, INSERT, UPDATE, DELETE.
  • Złączenia dogadują się również z różnymi klauzulami, takimi jak: GROUP BY, SUB QUERIES, WHERE, AGGREGATE FUNCTIONS itp.

Polecany artykuł

Jest to przewodnik po typach połączeń w SQL. Tutaj omawiamy różne typy złączeń w SQL i jego zalety wraz z przykładami. Możesz także przejrzeć nasze inne sugerowane artykuły, aby dowiedzieć się więcej -

  1. Zalety NoSQL
  2. Narzędzia zarządzania SQL
  3. Baza danych w SQL
  4. Symbole wieloznaczne w SQL
  5. Top 6 rodzajów połączeń w MySQL z przykładami