Questão nº 72

Questão de Tecnologia da Informação · FGV TRF1 2024 (nº 72)

FGV2024Analista Judiciário - Análise de DadosTecnologia da Informação
Gabarito: Dver comentário ↓

Considere a execução do script SQL a seguir.

```
create table R1(A int, B int)
insert into R1 values (1,3),(2,2),(5,3),(4,3)
create table R2(A int, C int)
insert into R2 values (2,1),(2,2),(3,1),(2,4),(6,6)
create table R3(A int)
insert into R3 values (1),(2),(4),(6)

select A from R1
where
not exists
(select from R2
where R1.A = R2.C
and not exists
(select
from R3
where R2.A=R3.A))
order by 1
```

O resultado produzido pela execução do comando select contém, na ordem, somente os valores:

Resposta comentada

Gabarito Alternativa D

O conceito-chave aqui é o operador NOT EXISTS, que avalia uma subconsulta: ele retorna VERDADEIRO se a subconsulta não retornar nenhuma linha, e FALSO se a subconsulta retornar uma ou mais linhas. É fundamental analisar as subconsultas de dentro para fora, prestando atenção às correlações entre as tabelas.

Vamos analisar a consulta passo a passo:

  1. Tabelas:

    • R1: (A, B) = (1,3), (2,2), (5,3), (4,3)
    • R2: (A, C) = (2,1), (2,2), (3,1), (2,4), (6,6)
    • R3: (A) = (1), (2), (4), (6)
  2. Subconsulta mais interna: (select * from R3 where R2.A=R3.A)
    Esta subconsulta verifica se um valor de R2.A existe na tabela R3.
    A condição not exists (select * from R3 where R2.A=R3.A) será VERDADEIRA se o R2.A não estiver presente em R3.

    • Para R2.A = 2: 2 está em R3. Então NOT EXISTS é FALSO.
    • Para R2.A = 3: 3 não está em R3. Então NOT EXISTS é VERDADEIRO.
    • Para R2.A = 6: 6 está em R3. Então NOT EXISTS é FALSO.
      Ou seja, a condição not exists (select * from R3 where R2.A=R3.A) é VERDADEIRA apenas quando R2.A = 3.
  3. Subconsulta intermediária: (select * from R2 where R1.A = R2.C and not exists (select * from R3 where R2.A=R3.A))
    Esta subconsulta busca linhas em R2 onde:

    • R1.A = R2.C (correlação com a linha atual de R1 que está sendo avaliada)
    • R2.A = 3 (conforme determinado no passo anterior)

    Agora, vamos testar cada valor de A da tabela R1:

    • Para R1.A = 1:
      A subconsulta busca linhas em R2 onde R2.C = 1 E R2.A = 3.
      Em R2, as linhas com R2.C = 1 são (2,1) e (3,1).
      Dessas, a linha (3,1) satisfaz R2.A = 3.
      Como a subconsulta retorna uma linha ((3,1)), EXISTS é VERDADEIRO, e NOT EXISTS (da condição principal) é FALSO.
      Portanto, 1 não é selecionado.

    • Para R1.A = 2:
      A subconsulta busca linhas em R2 onde R2.C = 2 E R2.A = 3.
      Em R2, a linha com R2.C = 2 é (2,2).
      Esta linha não satisfaz R2.A = 3 (pois R2.A é 2).
      Como a subconsulta não retorna nenhuma linha, EXISTS é FALSO, e NOT EXISTS (da condição principal) é VERDADEIRO.
      Portanto, 2 é selecionado.

    • Para R1.A = 5:
      A subconsulta busca linhas em R2 onde R2.C = 5 E R2.A = 3.
      Não há linhas em R2 com R2.C = 5.
      Como a subconsulta não retorna nenhuma linha, EXISTS é FALSO, e NOT EXISTS (da condição principal) é VERDADEIRO.
      Portanto, 5 é selecionado.

    • Para R1.A = 4:
      A subconsulta busca linhas em R2 onde R2.C = 4 E R2.A = 3.
      Em R2, a linha com R2.C = 4 é (2,4).
      Esta linha não satisfaz R2.A = 3 (pois R2.A é 2).
      Como a subconsulta não retorna nenhuma linha, EXISTS é FALSO, e NOT EXISTS (da condição principal) é VERDADEIRO.
      Portanto, 4 é selecionado.

  4. Resultado final: Os valores de A selecionados de R1 são 2, 5, 4.
    Ordenando pelo valor de A (order by 1), obtemos: 2, 4, 5.

  • (A) Incorreta: O resultado contém mais valores além do 2.
  • (B) Incorreta: O resultado contém mais valores além do 5.
  • (C) Incorreta: O valor 1 não é selecionado, pois para R1.A = 1, a subconsulta intermediária retorna uma linha, tornando o NOT EXISTS principal falso. A armadilha aqui é não seguir a lógica de dupla negação corretamente.
  • (D) Correta: Os valores 2, 4, 5 são selecionados, e esta é a sequência correta após a ordenação.
  • (E) Incorreta: O resultado contém o valor 5 além do 2 e 4.

Fonte: FGV TRF1 2024 Analista Judiciário - Análise de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho