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

Dúvida exercício - Igual a 0 para NÃO e 1 para SIM

Boa tarde.

Alguém pode me explicar essa query do exercício? Li e reli umas 500 vezes e não consegui entender. Esse igual a 0 ou igual a 1 é tipo o NÃO e SIM?

"Selecionamos os alunos, contando as suas matrículas que foram do último ano, caso o resultado dessa contagem for 0, significa que o aluno não teve nenhuma matrícula no último ano".

select a.nome from aluno a where (
    select count(m.id) from matricula m where m.aluno_id = a.id and 
    m.data > (select sysdate - interval '1' year from dual)) = 0;

Se eu der um count apenas assim

    select count(m.id) from matricula m where 
    m.data > (select sysdate - interval '1' year from dual);

é retornando a quantidade de linhas que estão nessa data de 1 ano, por exemplo, retorna count = 10. Como o banco trata essa query da resposta do exercício lidando com 0 para NÃO e 1 para SIM?

Obrigado.

2 respostas
solução!

Indica que os nomes dos alunos serão mostrados:

select a.nome from aluno a

Indica a condição para mostrar quais alunos serão mostrados:

where (
    select count(m.id) from matricula m where m.aluno_id = a.id and 
    m.data > (select sysdate - interval '1' year from dual)) = 0;

Conta quantas matrículas foram realizadas:

select count(m.id) from matricula m

Define a condição que indica quais matrículas serão contadas:

where m.aluno_id = a.id and 
    m.data > (select sysdate - interval '1' year from dual)) = 0;

A primeira condição indica que o ID do aluno na tabela matrícula deve ser igual ao ID do aluno na tabela aluno.

where m.aluno_id = a.id

E a segunda condição indica que a data deve ser maior que a data retornada na expressão entre parênteses:

and 
    m.data > (select sysdate - interval '1' year from dual)) = 0;

Por fim, o valor ZERO indica que é para exibir somente os que não tem matrícula que atende a esta condição.

Boa tarde Gabriel.

Entendi. Eu estava viajando legal pensando que era tipo um TRUE ou FALSE esse ZERO e o meu UM. Entendi isso porque nos meus testes quando colocava 1 trazia um resultado que eu achava que estava correto. Nesse caso eu tenho que colocar > ZERO para retornar os resultados que atendem minha condição do COUNT, como se fosse um EXISTS.

Obrigado.