Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2025

Banco de DadosConsultas e Comandos em SQL
Código
ce417325
Banca
CESPE / CEBRASPE
Órgão
PF
Ano
2025
Cargo
Estat ( )

A seguir, são apresentados um modelo de banco de dados, consistindo de quatro tabelas, bem como os comandos SQL utilizados para a criação e a inserção de dados nessas tabelas.

 

Imagem associada para resolução da questão

 

criação das tabelas


CREATE TABLE Envolvido (
  idEnvolvido INT NOT NULL,
  Alcunha VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (idEnvolvido));


CREATE TABLE TipoInquerito (
  idTipoInquerito INT NOT NULL,
  TipoInquerito VARCHAR(45) NOT NULL,
  PRIMARY KEY (idTipoInquerito));


CREATE TABLE Inquerito (
  idInquerito INT NOT NULL,
  NumeroInquerito INT NOT NULL,
  idTipoInquerito INT NOT NULL,
  PRIMARY KEY (idInquerito),
    FOREIGN KEY (idTipoInquerito)
    REFERENCES TipoInquerito (idTipoInquerito));


CREATE TABLE EnvolvidoInquerito (
  idEnvolvido INT NOT NULL,
  idInquerito INT NOT NULL,
  PRIMARY KEY (idEnvolvido, idInquerito),
    FOREIGN KEY (idEnvolvido)
    REFERENCES Envolvido (idEnvolvido),
    FOREIGN KEY (idInquerito)
    REFERENCES Inquerito (idInquerito));


inserção de dados nas tabelas

 

INSERT INTO Envolvido (idEnvolvido, Alcunha)
VALUES (10, 'Gargamel');

INSERT INTO Envolvido (idEnvolvido, Alcunha)
VALUES (20, 'Vingador');

INSERT INTO Envolvido (idEnvolvido, Alcunha)
VALUES (30, 'Esqueleto');

 

INSERT INTO TipoInquerito (idTipoInquerito,
TipoInquerito) VALUES (11, 'Inquérito
Policial');

INSERT INTO TipoInquerito (idTipoInquerito,
TipoInquerito) VALUES (12, 'Inquérito Civil');
INSERT INTO TipoInquerito (idTipoInquerito,
TipoInquerito) VALUES (13, 'Notícia-Crime');

INSERT INTO Inquerito (idInquerito,
NumeroInquerito, idTipoInquerito) VALUES (1,111, 13);
INSERT INTO Inquerito (idInquerito,
NumeroInquerito, idTipoInquerito) VALUES(2,121, 12);
INSERT INTO Inquerito (idInquerito,
NumeroInquerito, idTipoInquerito) VALUES(3,131, 13);
INSERT INTO Inquerito (idInquerito,
NumeroInquerito, idTipoInquerito) VALUES (4,444, 11);
INSERT INTO Inquerito (idInquerito,
NumeroInquerito, idTipoInquerito) VALUES(5,555, 13);

 

INSERT INTO EnvolvidoInquerito (idEnvolvido,
idInquerito) VALUES (10, 1);
INSERT INTO EnvolvidoInquerito (idEnvolvido,
idInquerito) VALUES (20, 1);
INSERT INTO EnvolvidoInquerito (idEnvolvido,
idInquerito) VALUES (20, 4);
INSERT INTO EnvolvidoInquerito (idEnvolvido,
idInquerito) VALUES (30, 1);
INSERT INTO EnvolvidoInquerito (idEnvolvido,
idInquerito) VALUES (30, 3);
INSERT INTO EnvolvidoInquerito (idEnvolvido,
idInquerito) VALUES (30, 5);

 

Considerando as informações precedentes, julgue o próximo item, relativos à SQL.

 

Considere o comando SQL que se segue.

 

SELECT DISTINCT E.Alcunha,
COUNT(I.idInquerito)
AS Quantidade
FROM Envolvido AS E
INNER JOIN EnvolvidoInquerito AS EI ON
E.idEnvolvido = EI.idEnvolvido
INNER JOIN Inquerito AS I ON EI.idInquerito =
I.idInquerito
GROUP BY E.Alcunha;

 

Esse comando, ao ser executado, apresentará o resultado a seguir.

 

Alcunha          Quantidade
Gargamel              1
Vingador              1
Esqueleto             1

  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

SQL – Consulta com JOIN, GROUP BY e DISTINCT

Gabarito: Errado. O comando SQL apresentado não produzirá o resultado mostrado, pois a consulta agrupa os registros por E.Alcunha e conta o número de inquéritos associados a cada envolvido. Ao analisar os dados inseridos, o envolvido 'Esqueleto' está associado a três inquéritos (idInquerito 1, 3 e 5), portanto sua quantidade deveria ser 3, e não 1 como apresentado na tabela de resultado. A consulta está correta em sua sintaxe, mas o resultado esperado está incorreto.

A questão envolve a compreensão de como as cláusulas JOIN, GROUP BY e a função de agregação COUNT funcionam em conjunto em uma consulta SQL. O comando realiza uma junção interna (INNER JOIN) entre as tabelas Envolvido, EnvolvidoInquerito e Inquerito, conectando-as pelas chaves estrangeiras. Em seguida, agrupa os resultados pela coluna Alcunha da tabela Envolvido e conta quantos registros de Inquerito existem para cada grupo.

A função COUNT(I.idInquerito) conta o número de linhas resultantes da junção para cada grupo de Alcunha. Como a tabela EnvolvidoInquerito é uma tabela de associação (muitos-para-muitos) entre Envolvido e Inquerito, cada linha dessa tabela representa um vínculo entre um envolvido e um inquérito. Portanto, o COUNT contará exatamente quantos inquéritos cada envolvido participa.

Vamos analisar os dados inseridos:

  • Gargamel (idEnvolvido 10) está associado ao inquérito 1 (EnvolvidoInquerito: 10,1). Portanto, quantidade = 1.

  • Vingador (idEnvolvido 20) está associado aos inquéritos 1 e 4 (EnvolvidoInquerito: 20,1 e 20,4). Portanto, quantidade = 2.

  • Esqueleto (idEnvolvido 30) está associado aos inquéritos 1, 3 e 5 (EnvolvidoInquerito: 30,1; 30,3 e 30,5). Portanto, quantidade = 3.

O resultado apresentado na questão mostra:

Alcunha

Quantidade

Gargamel

1

Vingador

1

Esqueleto

1

Isso está incorreto, pois Vingador deveria ter quantidade 2 e Esqueleto quantidade 3. Portanto, o comando não apresentará o resultado mostrado.

Alternativa E — ❌ Errado ⟵ GABARITO

A alternativa está errada porque o resultado apresentado não corresponde ao que a consulta realmente retorna. A consulta está sintaticamente correta, mas o resultado esperado está incorreto. O erro está na contagem: Vingador e Esqueleto têm mais de um inquérito associado, mas a tabela de resultado mostra quantidade 1 para todos. Isso demonstra que a banca tentou confundir o candidato ao apresentar um resultado incorreto, mas a análise dos dados mostra a divergência.

NÃO CAIA NESSA!

A banca apresenta um resultado com quantidades incorretas, tentando fazer o candidato acreditar que a consulta está errada. No entanto, a consulta está correta; o erro está no resultado mostrado. O candidato deve verificar os dados inseridos e calcular as quantidades corretas para identificar a divergência.

PEGA ESSA DICA!

Para resolver questões de SQL que envolvem JOIN, GROUP BY e COUNT, é fundamental analisar os dados inseridos e simular a execução da consulta passo a passo. Verifique quantas linhas cada grupo terá após a junção e conte corretamente. Isso evita erros de interpretação.

Gabarito: letra E

Link permanente: /questoes/ce417325