Questão nº 48

Questão de Tecnologia da Informação · FGV DATAPREV 2024 (nº 48)

FGV2024Analista de Tecnologia da Informação - Arquitetura, Engenharia e Sustentação TecnológicaTecnologia da Informação
Gabarito: Cver comentário ↓

O esquema de um banco de dados relacional, especificado pelos comandos SQL a seguir, atenderá às consultas

create table candidato
(
    num_inscr int             primary key,
    cpf_cand  char(11)        unique,
    nome      varchar(30)
);

create table questao
(
    id        int             primary key,
    texto     varchar(20)     not null,
    gabarito  char(1)         check (gabarito in
              ('A','B','C','D','E'))
);

create table candidato_questao
(
    num_cand   int,
    cpf_cand   char(11),
    id_quest   int,
    opcao_marc char(1),
    primary key(num_cand,id_quest),
    unique(cpf_cand,id_quest),
    foreign key(num_cand) references candidato,
    foreign key(cpf_cand) references candidato(cpf_cand),
    foreign key(id_quest) references questao
);

Considere que todos os candidatos que responderam questões tenham suas respostas registradas na tabela candidato_questao.

select c.num_inscr, c.nome from candidato c
where not exists
    ( select 1 from candidato_questao cq
      where cq.num_cand = c.num_inscr );

A execução da consulta SQL especificada produz como resultado o número de inscrição e nome dos candidatos que responderam a

Resposta comentada

Gabarito Alternativa C

NOT EXISTS é um operador SQL que verifica a ausência de linhas em uma subconsulta. Se a subconsulta não retornar nenhuma linha, NOT EXISTS é verdadeiro; caso contrário, é falso. A consulta principal seleciona dados apenas para as linhas onde a condição NOT EXISTS é verdadeira.

  • (A) Incorreta: A consulta busca candidatos para os quais não existe nenhuma resposta registrada na tabela candidato_questao, o que é o oposto de ter respondido "alguma questão". Se fosse para encontrar quem respondeu alguma questão, usaríamos EXISTS (ou INNER JOIN).
  • (B) Incorreta: A consulta não realiza contagem de respostas; ela apenas verifica a existência (ou não existência) de qualquer registro. Para verificar "exatamente uma questão", seria necessário usar uma subconsulta com COUNT(*) e comparar o resultado com 1.
  • (C) Correta: A cláusula NOT EXISTS (SELECT 1 FROM candidato_questao cq WHERE cq.num_cand = c.num_inscr) é verdadeira para um candidato c se não houver nenhum registro na tabela candidato_questao associado ao seu num_inscr. Isso significa que o candidato não respondeu a nenhuma questão.
  • (D) Incorreta: A consulta não compara as respostas dos candidatos (opcao_marc) com o gabarito das questões (gabarito); ela apenas verifica a existência de registros de respostas. Para isso, seria necessário um JOIN com a tabela questao e uma condição de comparação.
  • (E) Incorreta: Para verificar se um candidato respondeu a "todas as questões", seria necessária uma lógica de "divisão" mais complexa, geralmente envolvendo duas cláusulas NOT EXISTS aninhadas ou uma comparação de contagens, o que não é o caso nesta consulta.

Fonte: FGV DATAPREV 2024 Analista de Tecnologia da Informação - Arquitetura, Engenharia e Sustentação Tecnológica (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho