1
resposta

Muitos Joins

Achei um tanto quanto confuso o exemplo dá média de nota por Aluno/Curso. Não entendi muito bem o porque de ter tantos Joins. Será que alguém poderia me explicar?

1 resposta

Opa Rafael, vou colar a query aqui pra gente ter um contexto.

select a.nome, c.nome, avg(n.nota) from 
nota n
join resposta r on r.id = n.resposta_id
join exercicio e on e.id = r.exercicio_id
join secao s on s.id = e.secao_id
join curso c on c.id = s.curso_id
join aluno a on a.id = r.aluno_id
group by c.nome, a.nome
having avg(n.nota) < 5

O join ajuda a gente a relacionar dados de uma tabela com outra e o uso de muitos joins pode ser confuso sim. Você até pode conseguir eliminar alguns se elaborar uma lógica mais direta.

O ponto aqui é que todas as tabelas contam. A nota tá ligada a uma resposta que é relativa a um exercício que está dentro de uma sessão em um curso onde o aluno tem uma matrícula. (olha que na query nem usamos a matrícula - um join a menos).

Como cada nota, aluno, exercício, resposta, curso, etc... Precisam estar relacionados, usamos todos esses joins.

Pra ficar mais fácil de ligar os pontos, basta você ir subindo a escala de quem é o menor contexto para o maior.

Faz sentido?