1
resposta

nao entendi o conceito de subquere, poderia me explicar esse trecho

    select   a.nome
                , c.nome
                ,AVG(n.nota)media_curso
                ,(select avg(n2.nota)from nota n2)media_geral 
                ,AVG(n.nota)-(select avg(n1.nota)from nota n1) diferenca


      from nota n
                    inner join resposta r  on n.resposta_id = r.id
                    inner join exercicio e on r.exercicio_id=e.id
                    inner join secao     s on e.secao_id= s.id
                    inner join curso     c on s.curso_id= c.id
                    inner join aluno     a on r.aluno_id= a.id
                    group by a.nome , c.nome
1 resposta

Adriano, boa tarde!

Uma subquery é utilizada quando você precisa retornar uma informação, mas não pode utilizar joins para isso.

No exemplo que você passou, você precisou retornar uma média e fazer outras operações, em todos os registros de uma tabela (tendo em vista que não foi utilizada a clausula where na subquery).

Se você fosse fazer a mesma coisa com o join, não daria certo por causa do agrupamento que os dados teriam.

E em muitos casos, não é viável fazer várias consultas ao banco, às vezes precisamos de tudo seja retornado em um único select, e nesses casos usamos subquery.

podemos usar também em outros lugares como em uma where.

algo como:

SELECT
    p.nome,
    p.email

FROM tb_pessoa p
    INNER JOIN tb_compras c
        ON c.pessoa_id = p.id

WHERE
    p.ativo = 1 AND
    c.status = 1 AND
    p.tipo IN( SELECT t.tipo FROM tb_tipo_pessoa t WHERE t.status = 1 AND t.grupo = 'g' GROUP BY t.tipo );

Veja que no meu exemplo, eu preciso que as pessoas listadas, possuam um tipo específico, mas para determinar esse tipo, tenho outros wheres que não podem estar na query principal.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software