Pular para o conteúdo principal

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

Banco de DadosSQL
Código
qq890100
Banca
FUNDATEC
Órgão
BRDE
Ano
2023
Nível
Superior
Cargo
Analista de Sistemas - Administração de Banco de Dados
O desaninhamento de subconsulta é uma otimização disponível no Oracle que converte uma subconsulta em uma junção na consulta externa, permitindo que o otimizador considere a(s) tabela(s) de subconsulta durante o caminho de acesso, método de junção e seleção de ordem de junção. As consultas (a) e (b) exemplificam respectivamente uma subconsulta ALL e uma subconsulta EXISTS. Os atributos dessas tabelas usadas podem ser inferidos a partir dessas consultas SQL:(a) SELECT C.sobrenome, C.renda FROM clientes C WHERE C.codc <> ALL (SELECT V.codc FROM vendas V WHERE V.valor > 1000); (b) SELECT C.sobrenome, C.renda FROM clientes C WHERE NOT EXISTS (SELECT 1 FROM vendas V WHERE V.valor > 1000 and V.codc = C.codc); Considere as assertivas abaixo sobre a otimização baseada em desaninhamento de subconsultas no Oracle: I. O recurso fundamental do desaninhamento de subconsultas é a conversão da subconsulta com processamento relacionado em outra equivalente com processamento não relacionado. II. No caso de uma subconsulta ALL, o desaninhamento explora semi-join. III. No caso de uma subconsulta NOT EXISTS, o desaninhamento explora o anti-join. Quais estão corretas?
  1. AApenas I.
  2. BApenas II.
  3. CApenas III.
  4. DApenas II e III.
  5. EI, II e III.
Revelar gabarito e comentário

GabaritoC — Apenas III.

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

Desaninhamento de Subconsultas no Oracle

Gabarito: letra C (Apenas III). A assertiva III está correta: para subconsultas NOT EXISTS, o desaninhamento utiliza anti-join, conforme documentado na literatura. As assertivas I e II apresentam imprecisões conceituais.

O desaninhamento (unnesting) é uma técnica de otimização que converte subconsultas aninhadas em operações de junção, permitindo que o otimizador explore mais planos de execução. As transformações variam conforme o operador da subconsulta.

Desaninhamento de subconsulta (Oracle)
  • 1Técnica
  • 2Converte subconsulta em junção
  • 3Permite mais planos de execução
  • 4Operadores
  • 5IN / EXISTS (= ANY)
  • 6Semi-join
  • 7NOT EXISTS / NOT IN
  • 8Anti-join
  • 9ALL
  • 10NOT EXISTS ou MINUS
  • 11Não usa semi-join
  • 12Correlação
  • 13Pode ser correlacionada ou não
  • 14Não vira sempre não correlacionada
LEVEL · soulevel.com.br

Assertiva I – ❌ Incorreta

A afirmação de que o desaninhamento converte uma subconsulta com processamento relacionado (correlacionada) em uma equivalente com processamento não relacionado é imprecisa. O desaninhamento pode ser aplicado tanto a subconsultas correlacionadas quanto a não correlacionadas; ele simplesmente reescreve a consulta em um único bloco com junção. Nem sempre há conversão de correlacionada para não correlacionada – por exemplo, subconsultas não correlacionadas já são independentes. Além disso, em alguns casos (como ALL), a consulta desaninhada ainda pode conter correlação implícita.

Assertiva II – ❌ Incorreta

No caso de uma subconsulta ALL, o desaninhamento não explora semi-join. O semi-join é utilizado para subconsultas com IN ou EXISTS (equivalente a =ANY). Para o operador ALL, a transformação típica é via NOT EXISTS ou MINUS, não semi-join. O trecho do contexto confirma:

Elmasri & Navathe – Sistemas de Banco de Dados:

“desaninhar a subconsulta usando a semijunção” – referindo-se a IN, não a ALL.

Assertiva III – ✅ Correta

Para subconsultas NOT EXISTS (e também NOT IN), o desaninhamento emprega a operação de anti-join. O contexto é explícito:

“Mostramos outro exemplo na Seção 18.1 usando o conector “NOT IN”, que foi convertido em uma única consulta de bloco por meio da operação antijunção.”

Como NOT EXISTS possui comportamento equivalente a NOT IN (com ressalvas de nulidade), o mesmo princípio se aplica. Portanto, a assertiva está correta.

Conclusão: Apenas a assertiva III está correta. Logo, o gabarito é a letra C.

Link permanente: /questoes/qq890100