Comentários
Veja os comentários dos nossos alunos
Eu estava concordando com o Rafael Marilson mas fiz uma análise mais detalhada e este foi o resultado:
SELECT Nome, Curso
FROM ALUNO
WHERE NOT EXISTS (SELECT *
FROM HISTORICO_ESCOLAR
WHERE Numero_aluno=ALUNO.Numero_aluno AND NOT (Nota='A'));
- Primeira parte, resolver a seleção mais interna:
E o resultado de: SELECT * FROM HISTORICO_ESCOLAR WHERE Numero_aluno=ALUNO.Numero_aluno AND NOT (Nota='A') são todos os alunos que não possuem a nota A.
- Segunda parte, resolver a próxima seleção:
E o resultado de: SELECT Nome, Curso FROM ALUNO WHERE NOT EXISTS (todos os alunos que não possuem a nota A) são todos os alunos que possuem a nota A em todas as disciplinas.
Somente a letra A possui essa opção.
A grande casca de banana que existe nessa questão é a letra D), devido ao argumento IV, mas observem o erro:
SELECT Nome, Curso
FROM ALUNO
WHERE EXISTS (SELECT *
FROM HISTORICO_ESCOLAR
WHERE Numero_aluno=ALUNO.Numero_aluno AND (Nota='A'))
Analisando a seleção mais interna:
SELECT * FROM HISTORICO_ESCOLAR WHERE Numero_aluno=ALUNO.Numero_aluno AND (Nota='A'), todos os alunos que tiverem pelo menos uma nota A serão selecionados.
Agora a segunda seleção:
SELECT Nome, Curso FROM ALUNO WHERE NOT EXISTS (todos os alunos que tiverem pelo menos uma nota 10) que é igual a todos os alunos que tiverem pelo menos uma nota A. Opção Errada!
PARA QUEM FICOU NA DÚVIDA COM A LETRA D: A primeira expressão,
SELECT NOME, CURSO FROM ALUNO WHERE NOT EXISTS (SELECT * FROM HISTORICO_ESCOLAR WHERE NUMERO_ALUNO=ALUNO.NUMERO_ALUNO AND NOT (NOTA='A'));
retorna todos os nomes e cursos de alunos que não possuem nenhuma entrada no histórico escolar com uma nota diferente de 'A'. A subconsulta com a cláusula WHERE NOT EXISTS seleciona apenas os registros da tabela HISTORICO_ESCOLAR que correspondem ao registro atual da tabela ALUNO, e a cláusula NOT (NOTA='A') garante que somente as entradas com nota 'A' serão excluídas da seleção.
A segunda expressão,
SELECT NOME,CURSO FROM ALUNO WHERE EXISTS(SELECT * FROM HISTORICO_ESCOLAR WHERE NUMERO_ALUNO=ALUNO.NUMERO_ALUNO AND (NOTA='A'));
retorna todos os nomes e cursos de alunos que possuem pelo menos uma entrada no histórico escolar com nota 'A'. A subconsulta com a cláusula WHERE EXISTS seleciona todos os registros da tabela HISTORICO_ESCOLAR que correspondem ao registro atual da tabela ALUNO, e a cláusula (NOTA='A') garante que somente as entradas com nota 'A' serão incluídas na seleção.
Em resumo, a primeira expressão busca pelos alunos que não possuem nota diferente de 'A' em seus históricos escolares, enquanto a segunda busca pelos alunos que possuem pelo menos uma nota 'A' em seus históricos escolares.
GABARITO A
A questão pede as consultas que:
A - Recupera os nomes e curso de todos os alunos com notas A (alunos que têm A em todas as disciplinas).
B - Recupera os nomes e curso de todos os alunos que não têm nota A em qualquer uma das disciplinas.
Sempre que vir no enunciado pedindo "todos" é NOT EXISTS , caso peça "pelo menos 1" é EXISTS, portanto letra A é a única correta, pois são as consultas I e II que utilizam o NOT EXISTS, só seria a letra D se o enunciado pedisse: "os nomes e cursos de pelo menos um dos alunos...".
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo