FC ConcursosFC Concursos

Questão FC369437

Tabelas Relacionais T1 e T2 Considere as tabelas relacionais T1 e T2, de acordo com as colunas e as instâncias abaixo descritas. Na execução dos comandos SQL, assuma que o mecanism

Linguagem SQL

FGV · 2024

Tabelas Relacionais T1 e T2

 

Considere as tabelas relacionais T1 e T2, de acordo com as colunas e as instâncias abaixo descritas. Na execução dos comandos SQL, assuma que o mecanismo do banco de dados considera valores NULL como valores desconhecidos (unknown).

 

Tabela T1

 
P

N

1 10
2 40
3 20
4 10
 

Tabela T2

 

E

Q P
1 10 2
2 40 3
3 20 8
4 10 NULL
 

À 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. haveria um erro de sintaxe na última linha, no termo “flag”;
  2. seria produzido um resultado contendo somente a linha de títulos;
  3. seria produzido um resultado contendo, além da linha de títulos, uma linha com uma coluna com o valor 0;
  4. seria produzido um resultado contendo, além da linha de títulos, uma linha com uma coluna com o valor 1;
  5. haveria um erro de sintaxe na segunda linha, pois não é permitido o uso da cláusula “exists” logo após o termo “when”.
Mostrar resposta e comentário

Gabarito

D

Comentário do professor

O comando avalia a expressão CASE WHEN EXISTS(...) THEN 1 ELSE 0 END. A subconsulta externa procura linha em T2 com E = 2 e P = 3 e que satisfaça a condição aninhada.

A subconsulta interna é um EXISTS sobre T1 com T1.P IN (2,3,4) e com a condição T2.E IN (2,3) avaliada usando o valor de T2.E fixo (que é 2 na linha considerada).

Em T2 existe a linha (E=2, P=3). Para essa linha, T2.E IN (2,3) é verdadeira e em T1 existem linhas com P = 2, 3 ou 4, portanto o EXISTS interno é verdadeiro.

Como a linha de T2 que atende (E=2, P=3) também satisfaz o EXISTS interno, a expressão EXISTS(...) do CASE é verdadeira. Logo o CASE retorna 1, produzindo um único registro com a coluna flag = 1.

Obs.: valores NULL são tratados como desconhecidos e não interferem na verificação, pois já há uma linha que cumpre todas as condições.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo