Podczas pracy z bazą danych może być konieczne zebranie danych z kilku różnych tabel. W tym artykule dowiesz się, jak to zrobić.
Pisałem już o złączeniach SQL tutaj i tutaj, ale poświęćmy chwilę, aby najpierw przyjrzeć się działaniu złączenia, a zwłaszcza składni specyficznej dla MySQL.
Oświadczenie SQL Join
Join to instrukcja, która pozwala połączyć dwie tabele, dopasowując wiersze, które są ze sobą powiązane, i zachowując tylko te wiersze, które można dopasować, a nie wiersze niesparowane.
SELECT * FROM table1
INNER JOIN table2
ON table1.id = table2.id;
SELECT ... FROM instrukcja wskazuje, która jest pierwszą tabelą, następnie nazwa drugiej tabeli jest zapisywana zaraz po INNER JOIN słowa kluczowe.
Sposób łączenia obu tabel jest opisany w ON oświadczenie. W tym przypadku dwie tabele są łączone przy użyciu relacji table1.id = table2.id .
Możliwe jest użycie wielu instrukcji join, aby połączyć więcej niż jeden stół w tym samym czasie.
SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id
INNER JOIN table3
ON table2.id = table3.id;
Aby to zrobić, dodaj drugi INNER JOIN oświadczenie i drugi ON oświadczenie wskazujące trzecią tabelę i drugą relację.
Porozmawiajmy przez chwilę o relacjach, jakie możesz mieć między stołami i dlaczego warto połączyć trzy stoły.
Relacje między tabelami w SQL
Jeśli masz tabele, które są ze sobą powiązane, ich relacje mogą być jednego z różnych typów.
jeden do wielu
W relacji jeden-do-wielu jeden wiersz pierwszej tabeli może być powiązany z wieloma wierszami drugiej tabeli.
W relacyjnej bazie danych można to zaimplementować, gdy druga tabela ma first_table_id kolumna, która mówi, z którym wierszem pierwszej tabeli ten wiersz jest powiązany.
wiele-do-jednego
W relacji wiele-do-jednego jeden wiersz pierwszej tabeli może być powiązany z jednym wierszem drugiej tabeli, a jeden wiersz drugiej tabeli może być powiązany z wieloma wierszami pierwszej tabeli.
W relacyjnej bazie danych można to zaimplementować, gdy pierwsza tabela ma second_table_id kolumna, która mówi, z którym wierszem drugiej tabeli ten wiersz jest powiązany.
wielu-do-wielu
W tym przypadku wiele wierszy jest powiązanych z wieloma wierszami.
Tego rodzaju relacji nie można przedstawić tak, jak w przypadku tabel SQL — należy dodać tabelę sprzężenia między dwiema tabelami, aby między tabelami istniały tylko relacje wiele-do-jednego i jeden-do-wielu.
Każdy wiersz tabeli w środku reprezentuje jedną relację między wierszami lewej tabeli i wierszami prawej tabeli.
W praktyce w MySQL ta środkowa tabela będzie miała kolumnę dla first_table_id i kolumna dla second_table_id , a każda kombinacja jest unikalna.
Dołączanie do tabel SQL w praktyce
Wyobraźmy sobie, że mamy bazę danych organizacji, w której mamy tabelę z zespołami (ich nazwy i inne informacje identyfikujące) oraz tabelę z projektami (nazwa, postęp itd.).
| id | nazwa_zespołu | specjalność |
|---|---|---|
| 1 | Miotacze bananów | Banany |
| 2 | Przegryzacze do drewna | Obgryzanie drewna |
| 3 | Różowe słonie | Tapanie po ziemi |
| 4 | Puszyste ziemniaki | Praca i spanie |
| id | nazwa_projektu | postęp |
|---|---|---|
| 1 | Budowa tamy | Potrzebne jest trochę więcej gryzienia drewna i tupania na ziemi |
| 2 | Ciasto bananowe | Ktoś zjada wszystkie banany |
| 3 | Badanie snu | Za dużo snu, za mało badań |
Ponieważ zespół może pracować nad wieloma projektami, a nad projektem może pracować wiele zespołów, istnieje również trzecia tabela, która śledzi dopasowania zespołu do projektów.
| identyfikator projektu | identyfikator_grupy |
|---|---|
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 3 | 1 |
| 3 | 2 |
| 3 | 3 |
| 3 | 4 |
Możemy użyć JOIN oświadczenie, aby zebrać wszystko razem, gdy musimy wyświetlić informacje z tabel w sposób czytelny dla człowieka, na przykład:
SELECT
teams.team_name AS team_name,
projects.project_name AS project_name
FROM TABLE teams
INNER JOIN matches
ON teams.id = matches.team_id
INNER JOIN matches
ON matches.project_id = projects.id
ORDER BY teams.id;
Wybieramy, które kolumny z każdej tabeli mają być wyświetlane za pomocą SELECT oświadczenie.
Określamy, w jaki sposób wiersze tabel mają być łączone z ON oświadczenie.
I porządkujemy wiersze w preferowany przez nas sposób za pomocą ORDER BY oświadczenie.
ON oświadczenia teams.id = matches.team_id i matches.projects_id = projects.id oznaczają, że wiersze są łączone przy użyciu wierszy z matches stół. Każdy wiersz tabeli wyjściowej ma nazwę projektu i nazwę zespołu połączone za pomocą par identyfikatora projektu i identyfikatora zespołu w matches tabela.
Tabela wyjściowa będzie wyglądać jak poniżej.
| Nazwa_zespołu | Nazwa projektu |
|---|---|
| Miotacze bananów | Ciasto bananowe |
| Miotacze bananów | Badanie snu |
| Przegryzacze do drewna | Budowa tamy |
| Przegryzacze do drewna | Badanie snu |
| Różowe słonie | Budowa tamy |
| Różowe słonie | Budowa tamy |
| Puszyste ziemniaki | Badanie snu |
Nie ma kolumny bezpośrednio z matches stół. matches tabela nie jest pokazywana w danych wyjściowych, ale jest używana jako instrukcje łączenia wierszy teams i projects tabele.
Wniosek
JOIN instrukcja pozwala połączyć jeden lub więcej stołów. Musi być używany w połączeniu z ON instrukcja do określenia relacji między wierszami tabeli a wierszami innej tabeli.
W tym artykule nauczyłeś się używać JOIN oświadczenie o połączeniu trzech różnych stołów.