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:
- haveria um erro de sintaxe na última linha, no termo “flag”;
- seria produzido um resultado contendo somente a linha de títulos;
- seria produzido um resultado contendo, além da linha de títulos, uma linha com uma coluna com o valor 0;
- seria produzido um resultado contendo, além da linha de títulos, uma linha com uma coluna com o valor 1;
- 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