
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
Opanuj SQL z moim kursem!
Poznasz zarówno podstawy, jak i zaawansowane zapytania analityczne (CTE, subqueries, window functions). Nauczysz się pracować na różnych silnikach – na kursie pracujemy zarówno na MySQL, jak i na Postgres. Wszystko zainstalujemy na Twoim komputerze, plus dostaniesz mnóstwo zestawów danych do ćwiczeń.
Zostań analitykiem danych – dołącz do KajoDataSpace!
Najlepsza ścieżka do zawodu analityka danych. Dostęp do pełnych wersji kursów online z Excela, SQLa, Tableau i Pythona z certyfikatami + specjalistycznych webinarów z PowerBI.
Ekskluzywana ale pomagająca sobie społeczność.
Ponad 61 godzin materiałów video.
Spotkania LIVE co miesiąc.
Mój osobisty mentoring.