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.