Lekcja 7 – Operacje na danych (JOIN)

Łączenie danych z wielu tabel to kluczowa funkcja relacyjnych baz danych, która pozwala na wydobywanie informacji z różnych źródeł w bazie danych. Dane często są przechowywane w wielu tabelach, aby zminimalizować redundancję i zoptymalizować ich strukturę. Dzięki operatorowi JOIN możemy połączyć dane z różnych tabel na podstawie wspólnych wartości, takich jak klucze podstawowe (PRIMARY KEY) i klucze obce (FOREIGN KEY). W tej lekcji dokładnie omówimy różne rodzaje JOIN, ich zastosowanie oraz składnię.

Czym jest JOIN?

JOIN to operacja SQL, która pozwala na łączenie danych z dwóch lub więcej tabel w jedno zapytanie, na podstawie wspólnych wartości w odpowiednich kolumnach. W relacyjnych bazach danych tabele często są połączone relacjami, np. klucz obcy w jednej tabeli odnosi się do klucza podstawowego w innej. Dzięki JOIN możemy pobrać dane, które są logicznie powiązane, ale zapisane w różnych tabelach.

Przykładowo, tabela Uzytkownicy może zawierać dane o użytkownikach, a tabela Zamowienia dane o zamówieniach tych użytkowników. Kolumna User_ID w tabeli Zamowienia może być kluczem obcym, który odnosi się do kolumny ID w tabeli Uzytkownicy. Dzięki JOIN możemy połączyć te dwie tabele, aby uzyskać pełny obraz danych, np. imię użytkownika oraz jego zamówienia.

Rodzaje JOIN

W SQL dostępnych jest kilka rodzajów JOIN, z których każdy ma inne zastosowanie i zwraca inne wyniki w zależności od tego, jakie dane są potrzebne:

  1. INNER JOIN – zwraca tylko te rekordy, które mają dopasowanie w obu tabelach.
  2. LEFT JOIN (znany także jako LEFT OUTER JOIN) – zwraca wszystkie rekordy z lewej tabeli, nawet jeśli nie mają dopasowania w prawej tabeli. Jeśli nie ma dopasowania, wartości w kolumnach z prawej tabeli będą miały wartość NULL.
  3. RIGHT JOIN (znany także jako RIGHT OUTER JOIN) – zwraca wszystkie rekordy z prawej tabeli, nawet jeśli nie mają dopasowania w lewej tabeli. W przypadku braku dopasowania wartości z lewej tabeli będą miały wartość NULL.
  4. FULL JOIN (znany także jako FULL OUTER JOIN) – zwraca wszystkie rekordy z obu tabel, zarówno te, które mają dopasowanie, jak i te, które nie mają dopasowania.

Każdy z tych typów JOIN może być użyty w zależności od tego, jakie dane chcemy uzyskać i jak złożone są relacje między tabelami.

INNER JOIN

INNER JOIN to najczęściej używany typ JOIN w SQL. Zwraca tylko te rekordy, które mają dopasowanie w obu tabelach. Innymi słowy, jeśli dany rekord nie ma odpowiadającego mu rekordu w innej tabeli, nie będzie uwzględniony w wynikach.

Składnia INNER JOIN wygląda następująco:

SELECT kolumna1, kolumna2, ...
FROM tabela1
INNER JOIN tabela2 ON tabela1.kolumna_wspolna = tabela2.kolumna_wspolna;

W tej składni podajemy kolumny, które chcemy pobrać z obu tabel, oraz określamy, które kolumny w obu tabelach są powiązane (np. klucz podstawowy w jednej tabeli i klucz obcy w drugiej).

Przykład: Chcemy pobrać imiona użytkowników oraz daty ich zamówień. Dane użytkowników znajdują się w tabeli Uzytkownicy, a dane zamówień w tabeli Zamowienia. Używając INNER JOIN, możemy połączyć te tabele na podstawie kolumny ID w tabeli Uzytkownicy i kolumny User_ID w tabeli Zamowienia.

SELECT Uzytkownicy.Imie, Uzytkownicy.Nazwisko, Zamowienia.Data
FROM Uzytkownicy
INNER JOIN Zamowienia ON Uzytkownicy.ID = Zamowienia.User_ID;

To zapytanie zwróci tylko te rekordy, w których istnieje dopasowanie, czyli tylko te zamówienia, które mają przypisanego użytkownika.

LEFT JOIN

LEFT JOIN zwraca wszystkie rekordy z lewej tabeli (tabela1), nawet jeśli nie mają one dopasowania w prawej tabeli (tabela2). Jeśli dla danego rekordu z lewej tabeli nie ma odpowiadającego rekordu w prawej tabeli, kolumny z prawej tabeli będą miały wartość NULL.

Jest to przydatne, gdy chcemy zobaczyć wszystkie dane z jednej tabeli, a dodatkowe informacje z drugiej są opcjonalne.

Składnia:

SELECT kolumna1, kolumna2, ...
FROM tabela1
LEFT JOIN tabela2 ON tabela1.kolumna_wspolna = tabela2.kolumna_wspolna;

Przykład: Jeśli chcemy zobaczyć wszystkich użytkowników, niezależnie od tego, czy złożyli zamówienia, możemy użyć LEFT JOIN. Jeśli użytkownik nie ma zamówienia, wartości związane z zamówieniem będą miały wartość NULL.

SELECT Uzytkownicy.Imie, Uzytkownicy.Nazwisko, Zamowienia.Data
FROM Uzytkownicy
LEFT JOIN Zamowienia ON Uzytkownicy.ID = Zamowienia.User_ID;

To zapytanie zwróci wszystkich użytkowników, a dla tych, którzy nie złożyli zamówienia, kolumna Data będzie miała wartość NULL.

RIGHT JOIN

RIGHT JOIN działa w odwrotny sposób do LEFT JOIN. Zwraca wszystkie rekordy z prawej tabeli (tabela2), nawet jeśli nie mają dopasowania w lewej tabeli (tabela1). Jeśli nie ma dopasowania, kolumny z lewej tabeli będą miały wartość NULL.

Składnia:

SELECT kolumna1, kolumna2, ...
FROM tabela1
RIGHT JOIN tabela2 ON tabela1.kolumna_wspolna = tabela2.kolumna_wspolna;

Przykład: Jeśli chcemy zobaczyć wszystkie zamówienia, nawet te, które nie mają przypisanego użytkownika, możemy użyć RIGHT JOIN. W przypadku zamówień bez przypisanego użytkownika kolumny dotyczące użytkowników będą miały wartość NULL.

SELECT Uzytkownicy.Imie, Uzytkownicy.Nazwisko, Zamowienia.Data
FROM Uzytkownicy
RIGHT JOIN Zamowienia ON Uzytkownicy.ID = Zamowienia.User_ID;

Wyniki będą zawierały wszystkie zamówienia, a jeśli zamówienie nie ma przypisanego użytkownika, kolumny Imie i Nazwisko będą miały wartość NULL.

FULL JOIN

FULL JOIN (znany również jako FULL OUTER JOIN) zwraca wszystkie rekordy z obu tabel, niezależnie od tego, czy mają dopasowanie. Jeśli rekord w jednej tabeli nie ma odpowiednika w drugiej, wartości dla brakujących kolumn będą miały wartość NULL.

Jest to najbardziej kompleksowy typ JOIN, ponieważ uwzględnia zarówno rekordy z lewej tabeli, które nie mają odpowiednika w prawej tabeli, jak i odwrotnie.

Składnia:

SELECT kolumna1, kolumna2, ...
FROM tabela1
FULL JOIN tabela2 ON tabela1.kolumna_wspolna = tabela2.kolumna_wspolna;

Przykład: Jeśli chcemy zobaczyć wszystkich użytkowników oraz wszystkie zamówienia, niezależnie od tego, czy są one powiązane, możemy użyć FULL JOIN.

SELECT Uzytkownicy.Imie, Uzytkownicy.Nazwisko, Zamowienia.Data
FROM Uzytkownicy
FULL JOIN Zamowienia ON Uzytkownicy.ID = Zamowienia.User_ID;

To zapytanie zwróci wszystkich użytkowników oraz wszystkie zamówienia. Jeśli użytkownik nie złożył zamówienia, kolumna Data będzie miała wartość NULL, a jeśli zamówienie nie jest przypisane do użytkownika, kolumny dotyczące użytkownika będą miały wartość NULL.

Podsumowanie

Operacje JOIN są kluczowe dla efektywnej pracy z relacyjnymi bazami danych, pozwalając na łączenie danych z wielu tabel w jednym zapytaniu. W zależności od potrzeb możemy używać różnych typów JOIN: INNER JOIN zwraca tylko dopasowane rekordy, LEFT JOIN zwraca wszystkie rekordy z lewej tabeli, a RIGHT JOIN wszystkie z prawej. FULL JOIN łączy oba te podejścia, zwracając wszystkie rekordy z obu tabel, niezależnie od tego, czy mają dopasowanie.

Znajomość różnych typów JOIN oraz ich zastosowanie jest niezbędna dla każdej osoby pracującej z bazami danych, ponieważ umożliwiają one wydobywanie danych w sposób bardziej elastyczny i kompleksowy.

Gratulacje! Ukończyłeś lekcję 7.
Przejdź teraz do lekcji 8 >> Funkcje agregujące i grupowanie danych (GROUP BY)


Spis Treści - darmowy kurs SQL


Wprowadzenie: Czym jest baza danych?
Lekcja 1: Instalacja dedykowanego środowiska dla SQL
Lekcja 2: Tworzenie bazy danych
Lekcja 3: Tworzenie tabel w SQL
Lekcja 4: Wstawianie danych do bazy danych SQL
Lekcja 5: Pobieranie danych z bazy danych SQL
Lekcja 6: Aktualizacja i usuwanie danych SQL
Lekcja 7: Operacje na danych (JOIN)
Lekcja 8: Funkcje agregujące i grupowanie danych (GROUP BY)
Lekcja 9: Podzapytania (Subqueries)
Lekcja 10: Indeksy w bazach danych
Lekcja 11: Optymalizacja zapytań SQL
Lekcja 12: Transakcje w bazach danych
Lekcja 13: Zarządzanie blokadami (Locks) i dostępem do danych
Lekcja 14: Replikacja danych w bazach danych
Lekcja 15: Partycjonowanie danych SQL
Lekcja 16: Widoki (Views) w bazach danych
Lekcja 17: Procedury składowane (Stored Procedures) i funkcje w SQL
Lekcja 18: Wyzwalacze (Triggers) w bazach danych
Lekcja 19: Zaawansowane indeksowanie w bazach danych
Lekcja 20: Narzędzia do zarządzania dużymi danymi (Big Data) w SQL
Lekcja 21: Bezpieczeństwo baz danych


Dodatki: 
- Spis najważniejszych funkcji SQL

Jeśli chciałbyś być poinformowany o następnych kursach to zapisz się do naszego newslettera: