Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FUNDATEC 2023

Banco de DadosSQL
Código
qq893504
Banca
FUNDATEC
Órgão
IF Farroupilha - RS
Ano
2023
Nível
Médio
Cargo
Técnico de Tecnologia da Informação

Para responder à questão, considere a Figura 2 abaixo:



Imagem da questão

Figura 2 – Tabelas “Cargo” e “Funcionário” 

Considerando a tabela “Cargo”, apresentada na Figura 2, quantas linhas serão retornadas pelo comando SQL abaixo?SELECT COUNT(*), NIVELFROM CARGOGROUP BY NIVELHAVING COUNT(*) > 1
  1. A0
  2. B1
  3. C2
  4. D3
  5. E4
Revelar gabarito e comentário

GabaritoB — 1

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 1 linha — alternativa B.

A ideia por trás

Em SQL, agrupar linhas significa juntar todas as que têm o mesmo valor em uma coluna, formando grupos. A função COUNT(*) conta quantas linhas existem em cada grupo. A cláusula HAVING filtra esses grupos depois de formados, mantendo apenas os que satisfazem uma condição sobre a contagem.

A ordem lógica de execução é: FROM → WHERE → GROUP BY → funções de agregação → HAVING → SELECT. O WHERE filtra linhas individuais antes do agrupamento; o HAVING filtra grupos depois da agregação. COUNT(*) conta todas as linhas do grupo, inclusive com valores nulos.

Esta questão testa exatamente a diferença entre WHERE e HAVING: o HAVING age sobre os grupos, não sobre as linhas. O resultado é o número de grupos que têm mais de uma linha.

O que a questão dá

  • tabela Cargo com coluna NIVEL

  • comando SQL: SELECT COUNT(), NIVEL FROM CARGO GROUP BY NIVEL HAVING COUNT() > 1

O que queremos: quantas linhas o comando retorna

Passo 1 — Agrupar as linhas por NIVEL

O comando pede GROUP BY NIVEL, então o banco junta todas as linhas que têm o mesmo valor na coluna NIVEL. Cada grupo representa um valor distinto de NIVEL.

NÃO CAIA NESSA!

Esquecer que GROUP BY cria grupos e pensar que a consulta retorna uma linha por registro original.

Passo 2 — Contar quantas linhas tem cada grupo

A função COUNT(*) conta o número de linhas em cada grupo. Esse valor é usado no HAVING para decidir quais grupos ficam.

Por que esta fórmula: COUNT(*) é a função de agregação que conta todas as linhas do grupo, independentemente de valores nulos.

COUNT()COUNT(*)

De onde vem cada valor: * = todas as linhas de cada grupo formado no passo 1

NÃO CAIA NESSA!

Confundir COUNT(*) com COUNT(coluna), que ignora nulos.

Passo 3 — Filtrar os grupos com mais de uma linha

O HAVING COUNT(*) > 1 mantém apenas os grupos cuja contagem é maior que 1. Isso é feito depois do agrupamento, então não afeta linhas individuais.

Por que esta fórmula: HAVING é a cláusula que filtra grupos após a agregação, diferente de WHERE que filtra linhas antes.

HAVINGCOUNT()>1HAVING COUNT(*) > 1

De onde vem cada valor: COUNT()COUNT(*) = passo 2: contagem de linhas de cada grupo · 11 = condição do enunciado: manter apenas grupos com mais de uma linha

NÃO CAIA NESSA!

Aplicar o filtro como WHERE, o que mudaria o resultado.

Passo 4 — Contar quantos grupos passaram no filtro

O SELECT retorna uma linha para cada grupo que passou no HAVING. O número de linhas do resultado é o número de grupos com contagem > 1.

1 linha\boxed{1\ \text{linha}}
NÃO CAIA NESSA!

Contar as linhas da tabela original em vez dos grupos filtrados.

Resposta: 1 linha — alternativa B

Link permanente: /questoes/qq893504