Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024

Banco de DadosConsultas 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

anomês

0,56

202312

0,28

202311

0,24

202310

. . .

. . .. . .

0,2

20037

-0,15

20036

. . .

. . .

. . .

2,25

20031

2,1

200212

3,02

200211

. . .

. . .

. . .

0,57

20011

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.

  1. AO primeiro comando produz no máximo 12 linhas, e o segundo, no máximo 23 linhas.
  2. BO primeiro comando produz no mínimo 12 linhas, e o segundo, no máximo 23 linhas.
  3. CO primeiro comando produz no mínimo 12 linhas, e o segundo, no mínimo 23 linhas.
  4. DOs dois comandos produzem 276 linhas, com diferenças nos índices.
  5. 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:

  1. 1Linha externa (i)
  2. 2Subconsulta filtra por i.mes/i.ano
  3. 3Calcula min(indice) do grupo
  4. 4Compara com indice da linha
  5. 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.

Gabarito: letra C

Link permanente: /questoes/fg165262