Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024
Banco de Dados›Consultas e Comandos em SQL
Código
fg165262
Banca
FGV
Órgão
STN
Ano
2024
Cargo
AFFC ( )
ATENÇÃO: use a tabela relacional IPCA a seguir para responder à próxima questão.
Tabela IPCA
indice
ano
mês
0,56
2023
12
0,28
2023
11
0,24
2023
10
. . .
. . .
. . .
0,2
2003
7
-0,15
2003
6
. . .
. . .
. . .
2,25
2003
1
2,1
2002
12
3,02
2002
11
. . .
. . .
. . .
0,57
2001
1
A instância da tabela contém os valores do índice IPCA para todos os meses dos anos de 2001 até 2023. Os valores pontilhados representam a continuidade mensal da série. Todas as colunas são numéricas e não aceitam valores nulos.
No contexto da tabela IPCA apresentada, analise os dois comandos SQL a seguir.
select mes, ano, indice from IPCA i where indice = (select min(indice) from IPCA ii where ii.mes = i.mes)
order by ano, mês select ano, indice from IPCA i where indice = (select min(indice) from IPCA ii where ii.ano = i.ano) order by ano
Sobre a execução desses comandos, assinale a afirmativa correta.
AO primeiro comando produz no máximo 12 linhas, e o segundo, no máximo 23 linhas.
BO primeiro comando produz no mínimo 12 linhas, e o segundo, no máximo 23 linhas.
CO primeiro comando produz no mínimo 12 linhas, e o segundo, no mínimo 23 linhas.
DOs dois comandos produzem 276 linhas, com diferenças nos índices.
EOs dois comandos produzem os mesmos resultados.
Revelar gabarito e comentário▾
GabaritoC — O primeiro comando produz no mínimo 12 linhas, e o segundo, no mínimo 23 linhas.
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”.
Consultas SQL correlacionadas: mínimo por grupo
Gabarito: letra C. O primeiro comando retorna, para cada mês, a linha de menor índice daquele mês em toda a série (2001–2023) — como há 12 meses, o resultado tem no mínimo 12 linhas (uma por mês, podendo haver empates). O segundo comando retorna, para cada ano, a linha de menor índice daquele ano — como há 23 anos (2001 a 2023), o resultado tem no mínimo 23 linhas. A alternativa C é a única que afirma corretamente esses dois mínimos.
A questão cobra o entendimento de subconsultas correlacionadas em SQL. Uma subconsulta correlacionada é aquela que referencia uma coluna da consulta externa (no caso, i.mes e i.ano), fazendo com que a subconsulta seja reavaliada para cada linha da consulta externa. No primeiro comando, para cada linha da tabela IPCA i, a subconsulta calcula o min(indice)apenas entre as linhas que têm o mesmo mes da linha externa. Ou seja, para cada mês (1 a 12), a subconsulta encontra o menor índice daquele mês em todos os anos. A consulta externa então seleciona as linhas cujo indice é igual a esse mínimo. Como a tabela tem dados de 2001 a 2023 (23 anos), para cada um dos 12 meses existe pelo menos uma linha que é o mínimo daquele mês — logo, o resultado tem no mínimo 12 linhas. Pode haver mais de 12 se houver empate (dois ou mais anos com o mesmo índice mínimo para um mesmo mês).
O segundo comando segue a mesma lógica, mas agrupando por ano. Para cada ano (2001 a 2023), a subconsulta encontra o min(indice) entre as linhas daquele ano (12 meses). A consulta externa seleciona as linhas cujo indice é igual a esse mínimo. Como há 23 anos distintos, o resultado tem no mínimo 23 linhas (uma por ano), podendo haver mais em caso de empate entre meses do mesmo ano.
A pegadinha da banca está em inverter os conceitos de "mínimo" e "máximo" de linhas. O candidato apressado pode pensar que o primeiro comando retorna no máximo 12 linhas (um por mês), mas na verdade o mínimo é 12 — pode haver mais linhas por causa de empates. O mesmo raciocínio vale para o segundo comando: o mínimo é 23, não o máximo. A alternativa A inverte exatamente isso, dizendo "no máximo 12" e "no máximo 23", quando o correto é "no mínimo".
Vamos analisar cada alternativa:
1Linha externa (i)
2Subconsulta filtra por i.mes/i.ano
3Calcula min(indice) do grupo
4Compara com indice da linha
5Se igual, entra no resultado
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Afirma que o primeiro comando produz no máximo 12 linhas e o segundo no máximo 23 linhas. O erro está em "no máximo": como há pelo menos uma linha de mínimo para cada mês (12) e para cada ano (23), o resultado tem no mínimo essas quantidades, não no máximo. Pode haver mais linhas em caso de empate de índices mínimos.
Alternativa B — ❌ Incorreta
Afirma que o primeiro comando produz no mínimo 12 linhas (correto), mas o segundo no máximo 23 linhas (errado). O segundo comando também produz no mínimo 23 linhas, pois para cada ano existe pelo menos uma linha com o menor índice daquele ano.
Alternativa C — ✅ Correta ⟵ GABARITO
Afirma corretamente que o primeiro comando produz no mínimo 12 linhas (uma para cada mês) e o segundo no mínimo 23 linhas (uma para cada ano). Isso decorre da subconsulta correlacionada que garante, para cada grupo (mês ou ano), a existência de pelo menos uma linha com o valor mínimo.
Alternativa D — ❌ Incorreta
Afirma que os dois comandos produzem 276 linhas (12 × 23). Esse número seria o total de linhas da tabela (12 meses × 23 anos), mas os comandos retornam apenas as linhas que são mínimas em cada grupo, não todas as linhas. O resultado é no mínimo 12 e 23 linhas, respectivamente, não 276.
Alternativa E — ❌ Incorreta
Afirma que os dois comandos produzem os mesmos resultados. Isso é falso: o primeiro agrupa por mês (retorna no mínimo 12 linhas, uma por mês), enquanto o segundo agrupa por ano (retorna no mínimo 23 linhas, uma por ano). Os resultados são diferentes tanto em quantidade quanto em conteúdo.