Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL Inner Join – Jak połączyć 3 tabele w SQL i MySQL

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ostrzeżenie:mysqli_query():Nie można pobrać mysqli

  2. Jak działa funkcja REGEX_REPLACE() w MySQL

  3. Procedury składowane MySQL

  4. dodaj kolumnę do tabeli mysql, jeśli nie istnieje

  5. Informacje o bazie danych information_schema w MySQL