Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL Inner Join – Como juntar 3 tabelas em SQL e MySQL


Ao trabalhar com seu banco de dados, talvez seja necessário reunir dados de algumas tabelas diferentes. Este artigo irá mostrar-lhe como.

Já escrevi sobre junções SQL aqui e aqui, mas vamos analisar primeiro como uma junção funciona e, particularmente, a sintaxe específica do MySQL.

Instrução de junção SQL


Join é uma instrução que permite reunir duas tabelas, combinando linhas relacionadas entre si e mantendo apenas as linhas que podem ser correspondidas, não mantendo linhas desemparelhadas.
SELECT * FROM table1 
  INNER JOIN table2
  ON table1.id = table2.id;

O SELECT ... FROM indica qual é a primeira tabela, então o nome da segunda tabela é escrito logo após o INNER JOIN palavras-chave.

Como as duas tabelas devem ser unidas está escrito no ON demonstração. Neste caso, as duas tabelas são unidas usando o relacionamento table1.id = table2.id .

É possível usar várias instruções de junção juntas para unir mais de uma tabela ao mesmo tempo.
SELECT *
  FROM table1
  INNER JOIN table2
  ON table1.id = table2.id
  INNER JOIN table3
  ON table2.id = table3.id;

Para fazer isso, você adiciona um segundo INNER JOIN instrução e um segundo ON instrução para indicar a terceira tabela e a segunda relação.

Vamos falar um pouco sobre os relacionamentos que você pode ter entre as tabelas e por que você pode querer unir três tabelas.

Relações entre tabelas em SQL


Quando você tem tabelas relacionadas entre si, seus relacionamentos podem ser de vários tipos.

um para muitos


Em um tipo de relacionamento um para muitos, uma linha da primeira tabela pode estar relacionada a várias linhas da segunda tabela.

Em um banco de dados relacional isso pode ser implementado com a segunda tabela tendo um first_table_id coluna que diz a qual linha da primeira tabela essa linha está relacionada.

muitos-para-um


Em um tipo de relacionamento muitos para um, uma linha da primeira tabela pode ser relacionada a uma única linha da segunda tabela e uma linha da segunda tabela pode ser relacionada a várias linhas da primeira tabela.

Em um banco de dados relacional isso pode ser implementado com a primeira tabela tendo um second_table_id coluna que diz a qual linha da segunda tabela essa linha está relacionada.

muitos-para-muitos


Nesse caso, várias linhas estão relacionadas a várias linhas.

Esse tipo de relacionamento não pode ser representado como é com tabelas SQL – você precisa adicionar uma tabela de acoplamento entre as duas tabelas para que apenas relacionamentos muitos-para-um e um-para-muitos estejam presentes entre as tabelas.

Cada linha da tabela no meio representa um relacionamento entre as linhas da tabela da esquerda e as linhas da tabela da direita.

Na prática no MySQL, essa tabela do meio terá uma coluna para first_table_id e uma coluna para second_table_id , sendo cada combinação única.

Juntar tabelas SQL na prática


Vamos imaginar que temos o banco de dados de uma organização, onde temos uma tabela com equipes (o nome e outras informações de identificação) e uma tabela com projetos (nome, progresso e assim por diante).
id team_name especialidade
1 Atiradores de banana Bananas
2 Roedor de madeira Roendo madeira
3 Os elefantes cor-de-rosa Pisando no chão
4 Batatas fofas Trabalhando e dormindo
id project_name progresso
1 Construção de barragens É necessário mais um pouco de roer madeira e pisar no chão
2 Bolo de Banana Alguém está comendo todas as bananas
3 Pesquisa do sono Dormir demais não pesquisa suficiente

Como uma equipe pode trabalhar em vários projetos e um projeto pode ser trabalhado por várias equipes, há também uma terceira tabela que acompanha as correspondências de equipe e projeto.
id_projeto group_id
1 2
1 3
2 1
3 1
3 2
3 3
3 4

Podemos usar um JOIN declaração para juntar tudo quando precisamos visualizar as informações das tabelas de forma legível, assim:
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;

Escolhemos quais colunas mostrar de cada tabela com um SELECT demonstração.

Especificamos como as linhas das tabelas devem ser combinadas com um ON demonstração.

E ordenamos as linhas da maneira que preferirmos com um ORDER BY demonstração.

O ON declarações teams.id = matches.team_id e matches.projects_id = projects.id significa que as linhas são combinadas usando as linhas do matches tabela. Cada linha da tabela de saída tem o nome do projeto e o nome da equipe combinados usando os pares de ID do projeto e ID da equipe em matches tabela.

A tabela de saída ficará como abaixo.
Team_name Nome_do_projeto
Atiradores de banana Bolo de Banana
Atiradores de banana Pesquisa do Sono
Roedor de madeira Construção de barragens
Roedor de madeira Pesquisa do Sono
Os elefantes cor-de-rosa Construção de barragens
Os elefantes cor-de-rosa Construção de barragens
Batatas fofas Pesquisa do Sono

Não há coluna diretamente do matches tabela. O matches tabela não é mostrada na saída, mas é usada como instruções de como combinar as linhas das teams e projects mesas.

Conclusão


O JOIN A instrução permite unir uma ou mais tabelas. Ele deve ser usado em conjunto com o ON instrução para determinar a relação entre as linhas de uma tabela e as linhas de uma tabela diferente.

Neste artigo você aprendeu como usar o JOIN para unir três tabelas diferentes.