Jak działa JOIN w języku SQL? Przykłady zastosowania

Jak działa JOIN w języku SQL? Przykłady zastosowania

W świecie baz danych prędzej czy później trafiamy na sytuację, w której musimy połączyć dane z dwóch lub więcej tabel. Właśnie do tego służy JOIN. Jest to jedno z najczęściej używanych narzędzi w SQL, które pozwala efektywnie wyciągać powiązane dane. Dziś dokładnie wyjaśnię, jak działa JOIN w języku SQL, a także przedstawię przykłady jego zastosowania.

Czym jest JOIN w SQL?

JOIN to operacja w języku SQL, która pozwala łączyć wiersze z dwóch lub więcej tabel na podstawie wspólnego klucza. Dzięki temu możemy uzyskać kompleksowe informacje bez konieczności powielania danych w jednej tabeli.

Rodzaje JOIN w SQL

SQL oferuje kilka rodzajów JOIN, które różnią się sposobem łączenia danych:

  • INNER JOIN – zwraca tylko te rekordy, które mają dopasowanie w obu tabelach.
  • LEFT JOIN (LEFT OUTER JOIN) – zwraca wszystkie rekordy z tabeli lewej oraz dopasowane rekordy z tabeli prawej (jeśli nie ma dopasowania, wartości są NULL).
  • RIGHT JOIN (RIGHT OUTER JOIN) – zwraca wszystkie rekordy z tabeli prawej oraz dopasowane rekordy z tabeli lewej.
  • FULL JOIN (FULL OUTER JOIN) – zwraca rekordy z obu tabel, uzupełniając brakujące wartości NULL-ami.
  • CROSS JOIN – zwraca iloczyn kartezjański, czyli każda wartość z jednej tabeli jest łączona z każdą wartością z drugiej.

INNER JOIN – przykład zastosowania

Załóżmy, że mamy dwie tabele: Klienci i Zamówienia. Chcemy uzyskać listę klientów wraz z ich zamówieniami.

SELECT 
    Klienci.id, 
    Klienci.imie, 
    Zamówienia.numer_zamówienia
FROM Klienci
INNER JOIN Zamówienia ON Klienci.id = Zamówienia.klient_id;

Wynik:

id imie numer_zamówienia
1 Jan 102
2 Anna 103

Inner JOIN zwróci tylko tych klientów, którzy mają co najmniej jedno zamówienie.

LEFT JOIN – co jeśli klient nie ma zamówienia?

Czasami chcemy zobaczyć wszystkich klientów, nawet jeśli nie mają żadnych zamówień. Możemy użyć LEFT JOIN:

SELECT 
    Klienci.id, 
    Klienci.imie, 
    Zamówienia.numer_zamówienia
FROM Klienci
LEFT JOIN Zamówienia ON Klienci.id = Zamówienia.klient_id;

Wynik może wyglądać tak:

id imie numer_zamówienia
1 Jan 102
2 Anna 103
3 Marek NULL

W tym przypadku „Marek” został uwzględniony w wyniku, mimo że nie ma przypisanego zamówienia.

RIGHT JOIN – odwrotność LEFT JOIN

Jeśli zamiast wszystkich klientów chcielibyśmy zobaczyć wszystkie zamówienia, także te, które nie mają przypisanego klienta (np. nieznany klient), użyjemy RIGHT JOIN:

SELECT 
    Klienci.id, 
    Klienci.imie, 
    Zamówienia.numer_zamówienia
FROM Klienci
RIGHT JOIN Zamówienia ON Klienci.id = Zamówienia.klient_id;

Wynik może wyglądać tak:

id imie numer_zamówienia
1 Jan 102
NULL NULL 105

Widzimy, że zamówienie 105 nie ma przypisanego klienta.

FULL JOIN – połączenie LEFT i RIGHT JOIN

Jeśli chcemy zwrócić wszystkich klientów oraz wszystkie zamówienia, niezależnie od tego, czy są powiązane, używamy FULL JOIN:

SELECT 
    Klienci.id, 
    Klienci.imie, 
    Zamówienia.numer_zamówienia
FROM Klienci
FULL JOIN Zamówienia ON Klienci.id = Zamówienia.klient_id;

Wynik łączy zarówno klientów bez zamówień, jak i zamówienia bez klientów.

CROSS JOIN – ostrożnie z wydajnością

CROSS JOIN zwraca każdą kombinację wierszy z obu tabel. Może to prowadzić do ogromnej ilości danych.

SELECT 
    Klienci.imie, 
    Zamówienia.numer_zamówienia
FROM Klienci
CROSS JOIN Zamówienia;

Jeśli mamy 5 klientów i 4 zamówienia, wynik zawiera 20 wierszy, nawet jeśli nie są logicznie powiązane.

Podsumowanie

Operacja JOIN w SQL jest niezwykle przydatna do pobierania danych z wielu tabel. Oto krótkie podsumowanie:

  • INNER JOIN – tylko dopasowane wiersze.
  • LEFT JOIN – wszystkie wiersze z pierwszej tabeli + dopasowane z drugiej.
  • RIGHT JOIN – wszystkie wiersze z drugiej tabeli + dopasowane z pierwszej.
  • FULL JOIN – wszystkie wiersze z obu tabel.
  • CROSS JOIN – każda możliwa kombinacja wierszy.

Znając te zasady, możesz lepiej organizować zapytania SQL i efektywnie łączyć tabele w swojej bazie danych.

 

Inny ciekawy artykuł:

Jak działa OFFSET w języku SQL? Przykłady zastosowania

KajoDataSpace