Questão de Banco de Dados — Banco de Dados Relacionais — FGV 2026
- 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.


- A1
- B10
- C22
- D24
- E25
Considere o seguinte script SQL ANSI para responder à próxima questão.


GabaritoB — 10
Gabarito: letra B — a conta chega a 10 — alternativa B.
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.
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
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.
Esquecer que o WHERE é aplicado antes do GROUP BY e contar todas as 25 linhas da tabela.
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
Confundir o número de grupos com o número de linhas em cada grupo.
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.
Aplicar a condição do HAVING como se fosse um WHERE, filtrando linhas em vez de grupos.
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.
De onde vem cada valor: = passo 3: número de grupos que passaram no HAVING
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