"Busque todos os alunos que não tiveram nenhuma matrícula no último ano"
O que entendi do enunciado?
Que devo listar alunos que não se matricularam no ano de 2015.
Fiz a seguinte query:
select a.id, a.nome from aluno a where exists (select m.id from matricula m where not m.data between '01-JAN-2015' and '31-DEZ-2015' and a.id = m.aluno_id);
Essa query retornou 5 linhas em que as matriculas não foram feitas em 2015. Porém percebi que algumas dessas 5 ocorrências possuem matrícula em 2014 e também em 2015 não sendo essa a melhor solução.
Enviei a resposta para obter a opinião do instrutor que é a seguinte:
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));
Copiei e colei a query e ela retorna 16 linhas:
ID NOME
---------- ----------------
5 Paulo da Silva
8 Manoel Santos
3 Alberto Santos
15 Osmir Ferreira
12 Danilo Cunha
10 Paula Soares
7 Paulo Jose
4 Renata Alonso
14 Cristaldo Santos
16 Claudio Soares
9 Renata Ferreira
ID NOME
---------- ----------------
13 Zilmira Jose
1 Joao da Silva
2 Frederico Jose
11 Jose da Silva
6 Carlos Cunha
Onde já percebo que o aluno com ID 3 possuí matrícula em 2015:
ID ALUNO_ID CURSO_ID DATA TIPO
---------- ---------- ---------- -------- ------------
1 1 1 25/11/14 PAGA_PF
2 2 1 25/05/15 PAGA_PJ
3 3 3 21/07/15 PAGA_PF
4 4 4 15/05/15 PAGA_CHEQUE
5 7 1 10/03/15 PAGA_BOLETO
6 8 3 05/05/14 PAGA_PJ
7 9 2 07/02/15 PAGA_PF
8 10 7 15/01/15 PAGA_PJ
9 4 7 08/07/14 PAGA_PJ
10 8 1 01/06/14 PAGA_CHEQUE
11 1 4 10/11/14 PAGA_BOLETO
ID ALUNO_ID CURSO_ID DATA TIPO
---------- ---------- ---------- -------- ------------
12 2 4 01/10/14 PAGA_PJ
13 3 4 15/11/14 PAGA_PF
14 2 2 04/01/15 PAGA_PJ
Gostaria de uma orientação... não entendi muito bem a solução ou talvez o enunciado.
Obrigado!