2
respostas

diferença entre as queries

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

gostaria de saber qual a diferença das queries acima?

2 respostas

Oi Judemir, tudo bom?

A diferença é que na query de cima, estamos puxando o aluno pela matricula já na query de baixo estamos puxando o aluno pela resposta. Não sei como esses dados estão relacionados mas, se estamos falando do mesmo aluno, o resultado final será o mesmo. A diferença é como puxamos o aluno.

Olá Judemir, tudo bem?

Pelo que eu entendi, a diferença está em como a tabela aluno é relacionada na query. Na primeira query, a tabela aluno é relacionada com a tabela matricula e na segunda query, relacionada com a tabela resposta.

Como o André falou, não sei como os dados estão relacionados, mas se for o mesmo aluno, o resultado é o mesmo. Como na primeira tabela existe um Join a mais (o da tabela matrícula), dependendo da quantidade de dados em cada tabela, a diferença será na performance das duas queries.