Wszystkie rodzaje JOIN w SQL

kajodata.com 1 rok temu

Cześć! Dzisiaj chciałbym poruszyć temat, który wywołuje sporo zamieszania w głowach początkujących analityków, ale jest absolutnie niezbędny w codziennej pracy z bazami danych. Mowa tu o operacjach JOIN w SQL. W tekście poniżej opiszę główne rodzaje JOIN w SQL.

JOIN jest to operacja, która pozwala łączyć rekordy z różnych tabel w oparciu o pewne kryteria. Wyobraź sobie, iż masz dwie puzzle – JOIN to sposób, w jaki te puzzle są układane razem.

INNER JOIN

Rozpoczniemy od najpopularniejszego – INNER JOIN. Ta operacja zwraca tylko te rekordy, które mają pasujące wartości w obu tabelach. To jak nawiązanie znajomości na imprezie tylko z tymi, których znasz zarówno z pracy, jak i ze szkoły.

Przykładowe zapytanie:

SELECT Orders.order_id ,Customers.customer_name FROM Orders INNER JOIN Customers ON Orders.customer_id = Customers.customer_id;

W tym przypadku zwrócone zostaną tylko te zamówienia (Orders), dla których mamy odpowiadającego klienta (Customers).

LEFT JOIN (oraz RIGHT JOIN)

Kolejnym na liście jest LEFT JOIN, który zwraca wszystkie rekordy z lewej tabeli i pasujące rekordy z prawej tabeli. jeżeli nie ma pasującego rekordu, wynikiem jest NULL.

Przykładowe zapytanie:

SELECT Orders.order_id ,Customers.customer_name FROM Orders LEFT JOIN Customers ON Orders.customer_id = Customers.customer_id;

W tym przypadku zwrócone zostaną wszystkie zamówienia, choćby te, dla których nie mamy odpowiadającego klienta.

RIGHT JOIN działa na tej samej zasadzie, tylko w odwrotnym kierunku – zwraca wszystkie rekordy z prawej tabeli i pasujące rekordy z lewej.

SELECT Orders.order_id ,Customers.customer_name FROM Orders RIGHT JOIN Customers ON Orders.customer_id = Customers.customer_id;

FULL OUTER JOIN

Przechodzimy do JOINów, które rzadziej wyskakują jako rezultat zapytania „główne rodzaje JOIN w SQL”.

FULL OUTER JOIN to taki trochę desperat, który na imprezę zaprosi wszystkich, niezależnie od tego, czy znał ich wcześniej czy nie. Ta operacja zwraca wszystkie rekordy, gdy w lewej lub prawej tabeli jest pasujący rekord.

Przykładowe zapytanie:

SELECT Orders.order_id ,Customers.customer_name FROM Orders FULL OUTER JOIN Customers ON Orders.customer_id = Customers.customer_id;

W tym przypadku zwrócone zostaną wszystkie zamówienia i wszyscy klienci, niezależnie od tego, czy dla zamówienia jest klient, czy dla klienta jest zamówienie.

CROSS JOIN

Na koniec zostawiłem CROSS JOIN, który jest rodzajem operacji iloczynu kartezjańskiego.

Każdy rekord z pierwszej tabeli jest połączony z każdym rekordem z drugiej tabeli. To trochę jak zrobienie imprezy, na której każdy rozmawia z każdym – brzmi jak ekstrawagancka zabawa, ale prawdopodobnie skończy się chaosem!

Przykładowe zapytanie:

SELECT Orders.order_id ,Customers.customer_name FROM Orders CROSS JOIN Customers;

W tym przypadku, każde zamówienie zostanie połączone z każdym klientem, niezależnie od tego, czy klient ten faktycznie złożył to zamówienie, czy nie.

To tyle na dziś! Mam nadzieję, iż udało mi się przekazać podstawowe różnice między typami JOIN w SQL. Pamiętaj, iż praktyka czyni mistrza, więc do dzieła – niech moc JOINów będzie z Tobą!

Wolisz poczytać po angielsku? No problem – tłumaczenie znajdziesz tu.

Idź do oryginalnego materiału