Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FGV 2024

Banco de DadosSQL
Código
fg077369
Banca
FGV
Órgão
CVM
Ano
2024
Nível
Superior
Cargo
Analista - Perfil 8 - TI / Sistemas e Desenvolvimento - Tarde
A analista Letícia realizou a seguinte consulta em Structured Query Language (SQL):WITH RECURSIVE anos (n) AS(SELECT 2020 UNION ALLSELECT n + 1 FROM anos WHERE n < 2025)SELECT * FROM anosLogo após, Letícia realizou outra consulta em SQL:SELECT 2024 FROM anosO sistema gerenciador de banco de dados usado por Letícia suporta o recurso Common Table Expression do SQL. As consultas efetuadas por Letícia retornaram, respectivamente:
  1. Auma tupla e um erro;
  2. Bseis tuplas e um erro;
  3. Cum erro e duas tuplas;
  4. Duma tupla e uma tupla;
  5. Eseis tuplas e duas tuplas.
Revelar gabarito e comentário

GabaritoB — seis tuplas e um erro;

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

Common Table Expression (CTE) Recursiva e Escopo

Gabarito: letra B — seis tuplas e um erro. A primeira consulta gera 6 tuplas (anos de 2020 a 2025) por meio de uma CTE recursiva, enquanto a segunda consulta gera um erro porque a CTE não existe fora do escopo da primeira instrução.

A questão testa dois conceitos importantes da linguagem SQL:

  1. Funcionamento de uma CTE recursiva – que linhas são produzidas e até onde a recursão avança.

  2. Escopo de uma CTE – uma CTE é definida apenas dentro da instrução que a contém; tentar referenciá-la em outra instrução resulta em erro.

Análise da primeira consulta

A CTE anos é definida com WITH RECURSIVE. O caso base (âncora) insere o valor 2020. A parte recursiva adiciona n + 1 para cada n que seja menor que 2025.

  • Primeira iteração: insere 2020 (âncora).

  • A recursão produz: 2021, 2022, 2023, 2024 e, quando n = 2024 (que é < 2025), adiciona 2025.

  • O resultado final é o conjunto: {2020, 2021, 2022, 2023, 2024, 2025} → 6 tuplas.

Consulta

Resultado

Motivo

Primeira (WITH RECURSIVE ... SELECT * FROM anos)

6 tuplas (2020, 2021, 2022, 2023, 2024, 2025)

A CTE recursiva gera os anos de 2020 a 2025, pois a condição WHERE n < 2025 controla a recursão, não o filtro final.

Segunda (SELECT 2024 FROM anos)

Erro

A CTE anos tem escopo limitado à primeira instrução; ao tentar referenciá-la em outra consulta, o SGBD retorna erro ("relation does not exist").

  1. 1WITH RECURSIVE anosCTE definida
  2. 2Âncora: SELECT 20201ª tupla
  3. 3Recursão: n+1 até 2025+5 tuplas
  4. 4Resultado: 6 tuplas
  5. 5SELECT 2024 FROM anosNova instrução
  6. 6CTE fora de escopo → erro
LEVEL · soulevel.com.br
PEGA ESSA DICA!

Em CTEs recursivas, a condição WHERE n < 2025 controla quais linhas da CTE geram novas linhas, não filtra o resultado final. Por isso o 2025 é incluído.

Análise da segunda consulta

A segunda consulta SELECT 2024 FROM anos tenta selecionar a constante 2024 da tabela anos. No entanto, a CTE anos foi definida apenas na primeira consulta. Uma CTE tem escopo limitado à instrução SQL em que foi declarada. Ao executar uma nova instrução, a CTE não existe mais, resultando em erro do tipo "relation 'anos' does not exist" (ou similar). Portanto, a segunda consulta retorna um erro.

NÃO CAIA NESSA!

A banca espera que o candidato confunda o escopo da CTE, achando que ela persiste para consultas posteriores. Em SQL, CTEs são efêmeras — duram apenas uma instrução.

Conclusão: Primeira consulta → 6 tuplas; segunda consulta → erro. Logo, alternativa B.

Gabarito: letra B.

Link permanente: /questoes/fg077369