Considere as tabelas a seguir. perito (cod_perito, nome, lo...

Próximas questões
Com base no mesmo assunto
Q649918 Banco de Dados

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:

Alternativas

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