Q2039921 Banco de Dados

Imagem associada para resolução da questão

Alternativas

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