Pular para o conteúdo principal

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

Banco de DadosSQL
Código
fg076998
Banca
FGV
Órgão
CGE-PB
Ano
2024
Nível
Superior
Cargo
Auditor de Contas Públicas - Auditoria de Tecnologia da Informação
À luz das tabelas T1 e T2, anteriormente apresentadas, analise o comando SQL exibido a seguir.select case when exists (select * from T2 where T2.E = 2 and T2.P = 3 and exists (select * from T1 where T1.P in (2,3,4) and T2.E in (2,3))) then 1 else 0 end flag Sobre uma eventual execução desse script, é correto afirmar que:
  1. Ahaveria um erro de sintaxe na última linha, no termo “flag”;
  2. Bseria produzido um resultado contendo somente a linha de títulos;
  3. Cseria produzido um resultado contendo, além da linha de títulos, uma linha com uma coluna com o valor 0;
  4. Dseria produzido um resultado contendo, além da linha de títulos, uma linha com uma coluna com o valor 1;
  5. Ehaveria um erro de sintaxe na segunda linha, pois não é permitido o uso da cláusula “exists” logo após o termo “when”.
Revelar gabarito e comentário

GabaritoD — seria produzido um resultado contendo, além da linha de títulos, uma linha com uma coluna com o valor 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”.

Comando SQL com EXISTS e CASE WHEN

Gabarito: letra D. O script SQL é sintaticamente correto e, ao ser executado, retorna uma linha com uma coluna de nome "flag" contendo o valor 1. O EXISTS externo é verdadeiro pois existe uma linha em T2 com E=2 e P=3 (a segunda linha), e a subconsulta interna, que referencia T2.E da linha corrente (valor 2), encontra ao menos uma linha em T1 com P em (2,3,4). Portanto, o CASE WHEN retorna 1.

Análise detalhada

O comando:

select case when
 exists (select * from T2
 where T2.E = 2
 and T2.P = 3
 and exists
 (select * from T1
 where T1.P in (2,3,4)
 and T2.E in (2,3)))
 then 1 else 0 end flag

A subconsulta externa verifica se existe em T2 uma linha que atenda três condições:

  1. T2.E = 2

  2. T2.P = 3

  3. exists (subconsulta interna)

Na tabela T2:

E

Q

P

1

10

2

2

40

3

m

20

8

4

10

NULL

Apenas a segunda linha (E=2, P=3) satisfaz as duas primeiras condições.

Para essa linha, a subconsulta interna é correlacionada: ela usa T2.E (que é 2) e verifica se existe em T1 um registro com P in (2,3,4) e T2.E in (2,3). Como T2.E = 2 está no conjunto (2,3), e T1 tem linhas com P=2,3,4, a condição é verdadeira. Logo, o EXISTS externo é verdadeiro e o CASE retorna 1.

Alternativas

Alternativa A — ❌ Incorreta

Não há erro de sintaxe. O alias "flag" após end é perfeitamente válido em SQL.

Alternativa B — ❌ Incorreta

O resultado inclui uma linha de dados (com o valor 1), não apenas os títulos.

Alternativa C — ❌ Incorreta

O valor retornado é 1, não 0.

Alternativa D — ✅ Correta ⟵ GABARITO

Como demonstrado, o script retorna uma linha com uma coluna "flag" contendo o valor 1.

Alternativa E — ❌ Incorreta

O uso de exists logo após when é permitido. A sintaxe CASE WHEN <condição> THEN ... aceita qualquer expressão booleana, incluindo subconsultas com EXISTS.

PEGA ESSA DICA!

Em subconsultas correlacionadas com EXISTS, a subconsulta interna pode referenciar colunas da consulta externa. O escopo da correlação é o nível imediatamente superior. Nesta questão, T2.E na subconsulta interna refere-se à linha de T2 sendo avaliada na subconsulta externa, não a todas as linhas de T2.

Gabarito: letra D.

Link permanente: /questoes/fg076998