Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] junção de mais de duas tabelas em um JOIN

Quando quer fazer o join de uma tabela para outra fica clara , qual tabela deve ser unida com a outra, porém, não ficou claro quando faz dois join na mesma query.

-- juntando apenas duas tabelas
SELECT * 
FROM aluno
JOIN aluno_curso on aluno_curso.aluno_id = aluno.id

Pelo que entendi está selecionando a tabela aluno e juntando com a tabela aluno_curso quando os ids forem iguais.

Já no código abaixo, como o select fromestá em aluno, para mim o segundo join (curso) deveria ser comparado com a tabela aluno e não com a tabela aluno_curso. Ou criar um novo select from

select * 
from aluno_curso
join curso on curso.id = aluno_curso.curso_id
-- Juntando mais de duas tabelas em uma query
SELECT * 
FROM aluno
JOIN aluno_curso on aluno_curso.aluno_id = aluno.id
JOIN curso       on curso.id = aluno_curso.curso_id
1 resposta
solução!

Olá Anthony, tudo bem?

Eu entendo o que está sentindo quanto a isso, pois tive muita dificuldade. Vou buscar te explicar da forma como me apresentaram esse conceito de união entre tabelas.

Simplificando: a união, o join, dependerá do que você quer ver.

Por exemplo:

Criei tabelas de um possível modelo de dados, um hipótese fictícia (criei apenas para explicar, sem compromisso com a realidade ou normalização do banco de dados) :

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Se você pretende saber as informações das matrículas, pode simplesmente fazer um select apontando apenas para essa tabela - nesse exemplo:

select * from matricula;

Mas, e se você precisar saber o nome do aluno e não apenas o id_aluno dele?

Neste caso você precisa fazer uma união do aluno com a tabela de matricula, onde:

 select * from matricula
      join aluno
        on matricula.id_aluno = aluno.id_aluno;

Fazendo assim você trará tudo das tabelas matrícula e aluno, nessa ordem.

Quando for olhar para o curso:

 select * from matricula
     join curso
       on matricula.id_curso = curso.id_curso; 

As duas tabelas:

 select * 
    from matricula
      join aluno
        on matricula.id_aluno = aluno.id_aluno
      join curso
       on  matricula.id_curso = curso.id_curso;

Nesse último caso a tabela de ligação entre elas é a matrícula, pois ela possui as duas foreign keys (chaves primárias nas tabelas próprias). Logo, a tabela matrícula se relaciona com as demais.

A partir desse exemplo que eu passei, olhando para a sua dúvida agora, seria o seguinte:

-- Juntando mais de duas tabelas em uma query
SELECT * 
FROM aluno
JOIN aluno_curso on aluno_curso.aluno_id = aluno.id
JOIN curso       on curso.id = aluno_curso.curso_id

Aluno_curso, no modelo de dados desse exemplo, deve ser como a "matrícula" que criei; pois ela tem o código do aluno e o código do curso.

Espero que tenha ficado mais claro e te ajudado a compreender essa parte do relacionamento entre tabelas e os joins.

Bons estudos e cuide-se!