Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados Relacionais — CESPE / CEBRASPE 2024

Banco de DadosBanco de Dados Relacionais
Código
ce190986
Banca
CESPE / CEBRASPE
Órgão
ANAC
Ano
2024
Nível
Superior
Figura CB1A5Imagem associada para resolução da questãoNo que se refere a banco de dados, julgue o item a seguir, tendo o modelo apresentado na figura CB1A5 como referência.Imagem associada para resolução da questãoConsiderando que as tabelas do modelo apresentado na figura CB1A5 possuam os registros precedentes, é correto afirmar que a execução do seguinte comandoSELECT o.Deoperadora, COUNT(r.idreclamacao) AS QuantidadeFROM Reclamacoes rINNER JOIN Operadora o ON o.idoperadora = r.IdOperadoraGROUP BY o.Deoperadoraterá como resultado a tabela a seguir.Imagem associada para resolução da questão
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

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”.

Consulta SQL com INNER JOIN e GROUP BY

Gabarito: Certo (C). A consulta SELECT o.Deoperadora, COUNT(r.idreclamacao) AS Quantidade FROM Reclamacoes r INNER JOIN Operadora o ON o.idoperadora = r.IdOperadora GROUP BY o.Deoperadora produzirá exatamente a tabela apresentada na figura, pois o INNER JOIN combina apenas as reclamações que possuem uma operadora correspondente, e o GROUP BY agrupa os resultados por operadora, contando as reclamações de cada uma.

O comando SQL apresentado é um exemplo clássico de consulta com agregação e junção de tabelas. Vamos decompor o que ele faz passo a passo para entender por que o resultado é o esperado.

Primeiro, temos o INNER JOIN entre as tabelas Reclamacoes (aliased como r) e Operadora (aliased como o). A condição de junção é o.idoperadora = r.IdOperadora. Isso significa que apenas as linhas da tabela Reclamacoes que possuem um IdOperadora que existe na tabela Operadora serão incluídas no resultado. Reclamações com IdOperadora nulo ou com um valor que não corresponde a nenhuma operadora seriam excluídas.

Em seguida, o GROUP BY o.Deoperadora agrupa as linhas resultantes do JOIN pelo nome da operadora. Para cada grupo, a função de agregação COUNT(r.idreclamacao) conta quantas reclamações existem naquele grupo. É importante notar que COUNT(r.idreclamacao) conta apenas os valores não nulos da coluna idreclamacao. Como idreclamacao é a chave primária da tabela Reclamacoes, ela nunca é nula, então a contagem é exata.

A consulta, portanto, retorna uma linha para cada operadora que possui pelo menos uma reclamação, com o nome da operadora e a quantidade de reclamações. A tabela resultante na figura mostra exatamente isso: as operadoras que têm reclamações e a contagem correspondente. Se alguma operadora não tivesse reclamações, ela não apareceria no resultado, pois o INNER JOIN a excluiria.

A pegadinha desta questão está em entender o comportamento do INNER JOIN e do GROUP BY. O candidato pode confundir com um LEFT JOIN, que incluiria todas as operadoras, mesmo as sem reclamações, mostrando uma contagem zero. Ou pode errar na contagem, esquecendo que o GROUP BY agrupa por operadora e o COUNT conta as reclamações de cada grupo.

Item — ✅ CERTO

A afirmação de que a execução do comando terá como resultado a tabela apresentada está correta. O INNER JOIN garante que apenas as reclamações com operadora válida sejam consideradas, e o GROUP BY com COUNT agrupa e conta corretamente as reclamações por operadora. A tabela resultante na figura reflete exatamente essa operação.

Gabarito: Certo (C).

Link permanente: /questoes/ce190986