
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.

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.