Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Sub-queries VS Join

Fiquei um pouco confuso ainda com essa parte de sub-queries. Qual a vantagem exatamente?

No curso é dado essa query, usando a sub-queries para essa questão: Quantos cursos cada aluno faz

    SELECT A.NOME, 
        (SELECT COUNT(M.ID) FROM MATRICULA M WHERE M.ALUNO_ID = A.ID) AS QUANTIDADE 
    FROM ALUNO A;

Porém, se eu não tiver enganado e falando besteira, eu poderia fazer usando JOIN:

    SELECT A.NOME, COUNT(M.ID) AS QUANTIDADE FROM ALUNO A
        JOIN MATRICULA M ON M.ALUNO_ID = A.ID
    GROUP BY A.NOME;

Em questão de resultado a única diferença que percebi é que usando sub-queries ele retorna alunos com 0 cursos, e usando JOIN apenas alunos que tenham pelo menos 1 curso cadastrado. Por que acontece isso? E se essa for a única diferença, qual devo usar?

2 respostas
solução!

Boa tarde Thiago!

Quando você utiliza JOIN, a query retorna dados que existem nas duas tabelas.

Se você quiser que a query retorne os dados, existindo ou não registro em uma das tabelas, você precisa utilizar sub-queries ou então LEFT OUTER JOIN.

Algo assim:

SELECT A.NOME, COUNT(M.ID) AS QUANTIDADE FROM ALUNO A
        LEFT OUTER JOIN MATRICULA M ON M.ALUNO_ID = A.ID
    GROUP BY A.NOME;

Sacou?

Testa aí e me dá um retorno!

Opa, agora ficou bem claro a diferença.

Valeu!