Considere as tabelas a seguir. perito (cod_perito, nome, lo...
Considere as tabelas a seguir.
perito (cod_perito, nome, localizacao), prova (cod_prova, tipo, descricao), ocorrencia (cod_ocorrencia, data, tipo, cod_perito, cod_prova) Nas quais perito.cod_perito, prova.cod_prova e ocorrência.cod_ocorrencia são as chaves primárias de suas tabelas e ocorrência.cod_perito e ocorrência.cod_prova são chaves estrangeiras associadas às tabelas perito e prova, respectivamente. A consulta que devolve as provas que não estão associadas nas ocorrências a nenhum perito é a:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a Letra A. Para entendermos o motivo, vamos primeiro discutir o tema da consulta SQL apresentado na questão. A questão envolve o conhecimento sobre subconsultas e a cláusula EXISTS, que é usada para testar a existência de linhas em uma subconsulta, retornando TRUE se a subconsulta encontrar alguma linha.
Neste caso, queremos encontrar as provas que não estão associadas a nenhum perito nas ocorrências. Isso significa que precisamos de uma consulta que retorne provas que não possuam correspondência na tabela de ocorrências, baseando-se nas chaves estrangeiras ocorrência.cod_perito e ocorrência.cod_prova.
A alternativa correta faz uso do padrão de consulta NOT EXISTS para verificar a ausência de correspondência. A subconsulta interna busca por ocorrências que tenham tanto um perito quanto uma prova associados. Se essa subconsulta interna não encontrar resultados, significa que a prova em questão não está associada a nenhum perito nas ocorrências, e por isso a prova é selecionada pela consulta externa.
O código correto na Letra A é o seguinte:
SELECT * FROM prova
WHERE NOT EXISTS (
SELECT * FROM perito
WHERE EXISTS (
SELECT cod_ocorrencia
FROM ocorrencia
WHERE (ocorrencia.cod_perito = perito.cod_perito)
AND (ocorrencia.cod_prova = prova.cod_prova)
)
);
Essa consulta funciona da seguinte maneira:
- Seleciona todos os registros da tabela prova.
- Para cada prova, verifica se existe algum registro na tabela perito tal que:
- Exista uma ocorrência correspondente na tabela ocorrência que associe o perito da subconsulta intermediária com a prova da consulta principal.
- Se tal ocorrência não existir (ou seja, se NOT EXISTS retornar verdadeiro), significa que a prova atual não está associada a nenhum perito nas ocorrências, satisfazendo a condição da questão.
E é por isso que a alternativa A é a correta.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Existe uma fórmula nessas questões que é possível eliminar pelo próprio enunciado:
EXISTS + EXISTS = "...pelo menos um..." no enunciado;
NOT EXISTS + EXISTS = "...não...nenhum..." no enunciado;
EXISTS + NOT EXISTS = "...não estão em todos..." no enunciado;
NOT EXISTS + NOT EXISTS = "...estão em todos..." no enunciado.
O enunciado determina o "A consulta que devolve as provas que NÃO estão associadas nas ocorrências a NENHUM perito é a" que pode ser construído com o NOT EXISTS + EXISTS; então a "A" é a única possível!
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo