2
respostas

Exercício 7 - Mais EXISTS

O exercício diz:

Busque todos os alunos que não tiveram nenhuma matrícula no ano de 2015, usando a instrução EXISTS

E o gabarito apresentado é:

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

A query do gabarito traz, por exemplo, o aluno Jose da Silva, que teve matricula apenas em 2014.

Pesquisei uma forma de extrair apenas o ano, o gabarito poderia ser a query abaixo?

SELECT A.NOME FROM ALUNO A 
WHERE NOT EXISTS 
    (SELECT 1 FROM MATRICULA M WHERE M.ALUNO_ID = A.ID 
    AND EXTRACT(YEAR FROM DATA) = 2015
)
;
2 respostas

Fala ai Henrique, tudo bem ?

É válida sim, contudo é bem menos performática que a solução proposta.

Mas a proposta da solução está incorreta, não? Está condicionado ao "dia" de execução da query, para o dia de hoje, por exemplo, não funcionaria corretamente, né?

Alguma outra forma mais performática ?

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