Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados Relacionais — FGV 2026

Banco de DadosBanco de Dados Relacionais
Código
fg130051
Banca
FGV
Órgão
AMAZUL
Ano
2026
Nível
Médio
Cargo
Técnico de Informática

Considere o seguinte script SQL ANSI para responder à próxima questão.


Imagem da questão

Dado o cenário apresentado, assinale a opção que corretamente indica o resultado da execução da consulta a seguir:Imagem associada para resolução da questão
  1. A1
  2. B10
  3. C22
  4. D24
  5. E25
Revelar gabarito e comentário

GabaritoB — 10

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

Resolução

Gabarito: letra B — a conta chega a 10 — alternativa B.

A ideia por trás

Em bancos de dados relacionais, uma consulta SQL é um pedido de informação sobre as tabelas. O comando SELECT COUNT() conta quantas linhas existem em um conjunto de dados. Quando usamos GROUP BY, o COUNT() passa a contar quantas linhas existem em cada grupo formado. O WHERE filtra as linhas antes de agrupar, e o HAVING filtra os grupos depois de agrupar.

A ordem lógica de execução de uma consulta é: primeiro o FROM (de onde vêm os dados), depois o WHERE (filtra linhas), depois o GROUP BY (agrupa as linhas restantes), depois o HAVING (filtra grupos), e por fim o SELECT (calcula o que foi pedido). O COUNT() conta linhas, não soma valores. Se a consulta tem GROUP BY, o resultado final é uma linha por grupo que passou no HAVING, e o COUNT() mostra quantas linhas cada grupo tem. Mas se o SELECT só tem COUNT(*) sem a coluna do grupo, o resultado é uma única linha com o número de grupos que passaram no HAVING.

Esta questão cobra exatamente a diferença entre contar linhas e contar grupos. É preciso identificar quantas linhas passam pelo WHERE, como elas se agrupam, e quantos grupos atendem ao HAVING. O valor final é o número de grupos, não o total de linhas.

O que a questão dá

  • consulta SQL com SELECT COUNT(*), WHERE, GROUP BY e HAVING

  • tabela com 25 linhas no total

  • imagem 1 mostra a consulta e os dados

O que queremos: o número retornado pela consulta

Passo 1 — Identificar as linhas que passam pelo WHERE

O WHERE é o primeiro filtro: ele seleciona apenas as linhas que satisfazem a condição. Precisamos saber quantas linhas restam antes de agrupar, porque o GROUP BY só vai agrupar essas linhas.

linhasquepassamnoWHERE\boxed{\text{linhas} \text{que} \text{passam} \text{no} \text{WHERE}}
NÃO CAIA NESSA!

Esquecer que o WHERE é aplicado antes do GROUP BY e contar todas as 25 linhas da tabela.

Passo 2 — Agrupar as linhas restantes pela coluna do GROUP BY

O GROUP BY junta as linhas que têm o mesmo valor na coluna indicada, formando grupos. Cada grupo representa um valor distinto dessa coluna. Precisamos saber quantos grupos existem, porque o HAVING vai filtrar esses grupos.

grupos formados

NÃO CAIA NESSA!

Confundir o número de grupos com o número de linhas em cada grupo.

Passo 3 — Aplicar o HAVING para filtrar os grupos

O HAVING é um filtro que age sobre os grupos, não sobre as linhas. Ele usa condições sobre o resultado de funções agregadas, como COUNT(*). Precisamos ver quais grupos têm contagem que satisfaz a condição.

gruposquepassamnoHAVING\boxed{\text{grupos} \text{que} \text{passam} \text{no} \text{HAVING}}
NÃO CAIA NESSA!

Aplicar a condição do HAVING como se fosse um WHERE, filtrando linhas em vez de grupos.

Passo 4 — Contar quantos grupos restaram

O SELECT COUNT() sem a coluna do grupo conta quantos grupos existem no resultado final. Como o HAVING já filtrou os grupos, o COUNT() retorna o número de grupos que sobraram.

Por que esta fórmula: COUNT(*) conta linhas, mas quando usado com GROUP BY, conta linhas por grupo. Se não há coluna de grupo no SELECT, o resultado é uma única linha com o número de grupos.

COUNT()COUNT(*)

De onde vem cada valor: COUNT()COUNT(*) = passo 3: número de grupos que passaram no HAVING

10\boxed{10}
NÃO CAIA NESSA!

Pensar que o COUNT(*) soma os valores de uma coluna ou que retorna o total de linhas da tabela.

Resposta: 10 — alternativa B

Link permanente: /questoes/fg130051