CodeGym /Kursy /SQL SELF /Wprowadzenie do łączenia danych: JOIN

Wprowadzenie do łączenia danych: JOIN

SQL SELF
Poziom 11 , Lekcja 0
Dostępny

Dzisiaj przechodzimy do jednego z najciekawszych tematów w pracy z relacyjnymi bazami danych — łączenia danych z kilku tabel przy użyciu JOIN. To potężne narzędzie, które otwiera drzwi do tworzenia złożonych powiązań i analityki.

Wyobraź sobie, że Twoja baza danych to ogromny komiks, gdzie każda osobna tabela to osobny kadr. Żeby złożyć całą historię, musisz połączyć te kadry. Właśnie w tym pomaga Ci JOIN. Łączenie danych to proces, który pozwala zapytaniu pobrać informacje z kilku tabel i powiązać je na podstawie określonych warunków.

Relacyjne bazy danych są zbudowane wokół koncepcji powiązań między tabelami. Każda tabela przechowuje info o konkretnej encji, a żeby mieć pełniejszy obraz, często chcemy połączyć dane z różnych tabel. Na przykład:

  • Tablica students zawiera listę studentów.
  • Tablica courses przechowuje listę kursów.
  • Tablica enrollments pokazuje, kto na jakie kursy uczęszcza.

Żeby dowiedzieć się, który student jest na którym kursie, musimy połączyć te tabele. Na rozmowie kwalifikacyjnej programista, który ogarnia JOIN, wygląda naprawdę solidnie, bo to jedna z najbardziej pożądanych umiejętności w pracy z danymi.

Podstawowe typy joinów

W PostgreSQL jest kilka rodzajów JOIN i każdy z nich jest przeznaczony do konkretnych zadań. Przejdźmy przez nie ogólnie, żeby nie zawracać sobie głowy skomplikowanymi przykładami na starcie:

Typ JOIN Opis
INNER JOIN Zwraca wiersze, które mają dopasowanie w obu tabelach.
LEFT JOIN Zwraca wszystkie wiersze z lewej tabeli, a z prawej — tylko dopasowane.
RIGHT JOIN Zwraca wszystkie wiersze z prawej tabeli, a z lewej — tylko dopasowane.
FULL OUTER JOIN Zwraca wszystkie wiersze z obu tabel, wstawiając NULL tam, gdzie nie ma dopasowania.

Wybór konkretnego JOIN zależy od Twojego zadania:

  • Jeśli potrzebujesz tylko dopasowanych danych z obu tabel, użyj INNER JOIN.
  • Jeśli chcesz zachować wszystkie dane z jednej tabeli, a z drugiej tylko dopasowania, sprawdzi się LEFT JOIN albo RIGHT JOIN.
  • Jeśli potrzebujesz wszystkich danych z obu tabel, nawet jeśli nie są dopasowane, użyj FULL OUTER JOIN.

Rozpracujmy te wszystkie joiny na praktycznych przykładach.

Przykład zadania — "Kto na jakim kursie?"

Załóżmy, że mamy trzy tabele:

Tablica students

id name
1 Otto
2 Anna
3 Peter

Tablica courses

id title
101 Matematyka
102 Angielski

Tablica enrollments

student_id course_id
1 101
2 102

Te tabele są powiązane w następujący sposób:

  • Pole id w students — unikalny identyfikator studenta.
  • Pole id w courses — unikalny identyfikator kursu.
  • W tabeli enrollments kolumny student_id i course_id tworzą powiązanie między studentami a kursami.

Załóżmy, że musimy odpowiedzieć na pytanie: który student jest zapisany na który kurs?

Odpowiedź uzyskamy za pomocą JOIN. Połączymy tabele na podstawie ich powiązań:

  • Łączymy students i enrollments po id = student_id.
  • Łączymy enrollments i courses po course_id = id.

Tak będzie wyglądać zapytanie SQL:

SELECT students.name, courses.title
FROM enrollments
JOIN students ON enrollments.student_id = students.id
JOIN courses ON enrollments.course_id = courses.id;

Co robi to zapytanie:

  • FROM enrollments — zaczynamy od tabeli, która łączy studentów i kursy.
  • JOIN students ON enrollments.student_id = students.id — dołączamy studentów, żeby dostać ich imiona.
  • JOIN courses ON enrollments.course_id = courses.id — dołączamy kursy, żeby dostać tytuły.

Wynik będzie wyglądał tak:

name title
Otto Matematyka
Anna Angielski

Zwróć uwagę: jeśli student nie ma żadnego kursu, nie pojawi się w wyniku — bo JOIN domyślnie jest ścisły (INNER JOIN). Później omówimy, jak uwzględnić takich studentów za pomocą LEFT JOIN.

Jeśli coś w tym zapytaniu jest dla Ciebie niejasne, nie przejmuj się! Stopniowo się z tym oswoisz — to cel kolejnych wykładów!

Po co to w prawdziwym życiu?

Teraz, kiedy już wiesz, jak łączyć tabele, pogadajmy o realu. Zastanawiałeś się kiedyś, jak działa sklep internetowy? Na przykład, gdy wybierasz smartfona i widzisz opinie innych użytkowników.

  1. Tablica products zawiera info o produktach.
  2. Tablica reviews zawiera opinie klientów.
  3. Tablica customers zawiera info o samych klientach

Żeby wyświetlić na stronie opinie, trzeba połączyć tabele products, reviews i customers. To właśnie JOIN w akcji.

Na co zwrócić uwagę?

Zanim zagłębimy się w JOIN na kolejnych wykładach, oto kilka rzeczy, które warto zapamiętać:

  1. Kolejność w JOIN ma znaczenie. Na przykład LEFT JOIN zwraca wiersze z lewej tabeli, więc zmieniając kolejność, zmieniasz wynik.
  2. Pracuj na małych tabelach. Na początku unikaj zapytań na miliony wierszy. Nawet najprostsze zapytanie powinno być czytelne.
  3. Przyzwyczaj się myśleć o powiązaniach. Gdy zaczniesz widzieć tabele jako części jednej dużej struktury, praca z JOIN stanie się naturalna.

Od dziś zaczynamy przemieniać się w SQL-pro. W następnym wykładzie dowiesz się, jak używać INNER JOIN do pobierania danych z dwóch tabel. To będzie spory krok w Twojej nauce PostgreSQL.

2
Zadanie
SQL SELF, poziom 11, lekcja 0
Niedostępne
Użycie COALESCE do obsługi NULL w wierszach
Użycie COALESCE do obsługi NULL w wierszach
2
Zadanie
SQL SELF, poziom 11, lekcja 0
Niedostępne
Obliczanie średniej ceny z warunkiem i obsługą NULL
Obliczanie średniej ceny z warunkiem i obsługą NULL
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION