sql >> Databáze >  >> RDS >> Mysql

SQL Inner Join – Jak spojit 3 tabulky v SQL a MySQL

Při práci s databází možná budete muset dát dohromady data z několika různých tabulek. Tento článek vám ukáže, jak na to.

O spojeních SQL jsem již psal zde a zde, ale pojďme si nejprve na chvíli prohlédnout, jak spojení funguje, a zejména syntaxi specifickou pro MySQL.

Prohlášení SQL Join

Join je příkaz, který vám umožní sestavit dvě tabulky, spárovat řádky, které spolu souvisejí, a ponechat pouze řádky, které lze spárovat, nikoli nezachovat nespárované řádky.

SELECT * FROM table1 
  INNER JOIN table2
  ON table1.id = table2.id;

SELECT ... FROM příkaz udává, která je první tabulka, pak se název druhé tabulky zapíše hned za INNER JOIN klíčová slova.

Jak mají být tyto dvě tabulky spojeny, je napsáno v ON prohlášení. V tomto případě jsou dvě tabulky spojeny pomocí vztahu table1.id = table2.id .

Je možné použít více příkazů spojení dohromady pro spojení více než jedné tabulky současně.

SELECT *
  FROM table1
  INNER JOIN table2
  ON table1.id = table2.id
  INNER JOIN table3
  ON table2.id = table3.id;

Chcete-li to provést, přidejte druhý INNER JOIN a druhý ON příkaz k označení třetí tabulky a druhého vztahu.

Pojďme si chvíli promluvit o vztazích, které můžete mít mezi stoly, a o tom, proč byste mohli chtít spojit tři stoly dohromady.

Vztahy mezi tabulkami v SQL

Když máte tabulky, které spolu souvisejí, jejich vztahy mohou být různého typu.

jeden k mnoha

Ve vztahu jeden k mnoha může být jeden řádek první tabulky spojen s více řádky druhé tabulky.

V relační databázi to lze implementovat pomocí druhé tabulky s first_table_id sloupec, který říká, ke kterému řádku první tabulky daný řádek souvisí.

mnoho-to-one

V typu vztahu mnoho ku jedné může být jeden řádek první tabulky spojen s jedním řádkem druhé tabulky a jeden řádek druhé tabulky může souviset s více řádky první tabulky.

V relační databázi to lze implementovat tak, že první tabulka má second_table_id sloupec, který říká, ke kterému řádku druhé tabulky daný řádek souvisí.

mnoho-k-mnoho

V tomto případě více řádků souvisí s více řádky.

Tento druh vztahu nelze reprezentovat jako u tabulek SQL – musíte mezi dvě tabulky přidat spojovací tabulku, aby mezi tabulkami byly přítomny pouze vztahy mnoho ku jedné a jedna k mnoha.

Každý řádek tabulky uprostřed představuje jeden vztah mezi řádky levé tabulky a řádky pravé tabulky.

V praxi v MySQL bude mít tato prostřední tabulka sloupec pro first_table_id a sloupec pro second_table_id , přičemž každá kombinace je jedinečná.

Spojování tabulek SQL v praxi

Představme si, že máme databázi organizace, kde máme tabulku s týmy (jejich název a další identifikační údaje) a tabulku s projekty (jméno, průběh atd.).

id název_týmu specialita
1 Vrhače banánů Banány
2 Ohryzávače dřeva Ohryzávání dřeva
3 Růžoví sloni Dupání na zem
4 Načechrané brambory Práce a spánek
id název_projektu pokrok
1 Stavba přehrady Potřebujeme ještě ohlodávat dřevo a dusat půdu
2 Banánový dort Někdo jí všechny banány
3 Průzkum spánku Příliš mnoho spánku nestačí na výzkum

Protože tým může pracovat na více projektech a na projektu může pracovat více týmů, existuje také třetí tabulka, která sleduje zápasy týmů a projektů.

id_projektu id_skupiny
1 2
1 3
2 1
3 1
3 2
3 3
3 4

Můžeme použít JOIN příkaz, abychom dali vše dohromady, když potřebujeme zobrazit informace z tabulek způsobem čitelným pro člověka, jako je tento:

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;

Pomocí SELECT vybereme, které sloupce se z každé tabulky zobrazí prohlášení.

Určujeme, jak se mají řádky tabulek kombinovat s ON prohlášení.

Řádky řadíme způsobem, který preferujeme, pomocí ORDER BY prohlášení.

ON prohlášení teams.id = matches.team_id a matches.projects_id = projects.id znamená, že řádky jsou kombinovány pomocí řádků matches stůl. Každý řádek výstupní tabulky obsahuje název projektu a název týmu kombinovaný pomocí párů ID projektu a ID týmu v matches tabulka.

Výstupní tabulka bude vypadat níže.

Název_týmu Název_projektu
Vrhače banánů Banánový dort
Vrhače banánů Průzkum spánku
Ohryzávače dřeva Budování přehrady
Ohryzávače dřeva Průzkum spánku
Růžoví sloni Stavba přehrady
Růžoví sloni Stavba přehrady
Načechrané brambory Průzkum spánku

Neexistuje žádný sloupec přímo z matches stůl. matches tabulka se ve výstupu nezobrazuje, ale používá se jako návod, jak kombinovat řádky teams a projects tabulky.

Závěr

JOIN příkaz umožňuje spojit jednu nebo více tabulek. Musí být použit ve spojení s ON příkaz k určení vztahu mezi řádky tabulky a řádky jiné tabulky.

V tomto článku jste se naučili používat JOIN příkaz ke spojení tří různých tabulek.



  1. PostgreSQL - Nahraďte HTML entity

  2. Jak dosáhnout konce dne?

  3. Jak funguje iif() v SQLite

  4. Jak aktualizovat statistiky serveru SQL pro velké tabulky