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
- Przyłączenie wewnętrzne
- Left Join
- Right Join
- 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
- Szybsze wykonanie, co oznacza szybsze pobieranie pożądanych kolumn.
- Zoptymalizowany, czytelny i zrozumiały
- 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 -
- Zalety NoSQL
- Narzędzia zarządzania SQL
- Baza danych w SQL
- Symbole wieloznaczne w SQL
- Top 6 rodzajów połączeń w MySQL z przykładami