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
studentszawiera listę studentów. - Tablica
coursesprzechowuje listę kursów. - Tablica
enrollmentspokazuje, 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 JOINalboRIGHT 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
idwstudents— unikalny identyfikator studenta. - Pole
idwcourses— unikalny identyfikator kursu. - W tabeli
enrollmentskolumnystudent_idicourse_idtworzą 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
studentsienrollmentspoid = student_id. - Łączymy
enrollmentsicoursespocourse_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.
- Tablica
productszawiera info o produktach. - Tablica
reviewszawiera opinie klientów. - Tablica
customerszawiera 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ć:
- Kolejność w
JOINma znaczenie. Na przykładLEFT JOINzwraca wiersze z lewej tabeli, więc zmieniając kolejność, zmieniasz wynik. - Pracuj na małych tabelach. Na początku unikaj zapytań na miliony wierszy. Nawet najprostsze zapytanie powinno być czytelne.
- Przyzwyczaj się myśleć o powiązaniach. Gdy zaczniesz widzieć tabele jako części jednej dużej struktury, praca z
JOINstanie 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.
GO TO FULL VERSION