Questão nº 50

Questão de Tecnologia da Informação · FGV BANESTES 2021 (nº 50)

FGV2021Analista em Tecnologia da Informação - Desenvolvimento de SistemasTecnologia da Informação
Gabarito: Dver comentário ↓

Nas próximas cinco questões, considere as tabelas T1, T2 e T3, cujas estruturas e instâncias são exibidas a seguir. O valor NULL deve ser tratado como unknown (desconhecido).

Figura da questão de Tecnologia da Informação


Para as tabelas T1 e T3, descritas anteriormente, a execução do comando SQL

delete from T3
where E = (select min(E) from T3)
  and (select count(*) from T3 t
       where t3.A = t.A) > 1

causaria na instância da tabela T3 a:

Resposta comentada

Gabarito Alternativa D

Um comando DELETE remove linhas de uma tabela com base em condições especificadas na cláusula WHERE. Quando subconsultas são usadas no WHERE, elas geralmente avaliam o estado da tabela antes de qualquer exclusão ser efetivada, garantindo consistência na aplicação das condições para todas as linhas candidatas.

(A) Incorreta: A condição E = (select min(E) from T3) filtra as linhas onde E é igual ao menor valor de E na tabela (que é 10). A segunda condição (select count(*) from T3 t where t3.A = t.A) > 1 verifica se há mais de uma linha com o mesmo valor de A na tabela original. Existem linhas que satisfazem ambas as condições, portanto, nem todas as linhas serão preservadas.
(B) Incorreta: Esta alternativa está incompleta. A linha (2, 110, 10) de fato satisfaz as condições, mas a linha (2, 120, 10) também as satisfaz e seria removida.
(C) Incorreta: Esta alternativa está incompleta. A linha (2, 120, 10) de fato satisfaz as condições, mas a linha (2, 110, 10) também as satisfaz e seria removida.
(D) Correta: Primeiro, a subconsulta (select min(E) from T3) é avaliada uma única vez sobre a tabela T3 original, retornando 10. Assim, a primeira condição se torna E = 10. As linhas de T3 que satisfazem E = 10 são: (1, 100, 10), (2, 110, 10) e (2, 120, 10).
Em seguida, para cada uma dessas linhas, a segunda condição (select count(*) from T3 t where t3.A = t.A) > 1 é avaliada:

  • Para a linha (1, 100, 10): t3.A é 1. A subconsulta conta quantas linhas na tabela T3 original têm A = 1. O resultado é 1. Como 1 > 1 é falso, esta linha não é excluída.
  • Para a linha (2, 110, 10): t3.A é 2. A subconsulta conta quantas linhas na tabela T3 original têm A = 2. O resultado é 2 (as linhas (2, 110, 10) e (2, 120, 10)). Como 2 > 1 é verdadeiro, esta linha é marcada para exclusão.
  • Para a linha (2, 120, 10): t3.A é 2. A subconsulta conta quantas linhas na tabela T3 original têm A = 2. O resultado é 2. Como 2 > 1 é verdadeiro, esta linha é marcada para exclusão.
    Ambas as linhas (2, 110, 10) e (2, 120, 10) satisfazem ambas as condições e, portanto, são removidas. A armadilha da banca seria pensar que a subconsulta correlacionada reavaliaria o count(*) após a exclusão de uma das linhas com A=2, mas as subconsultas em DELETE operam sobre o estado da tabela antes de qualquer modificação ser efetivada.
    (E) Incorreta: Apenas as linhas que satisfazem ambas as condições são removidas. As linhas (1, 100, 10), (3, 130, 20) e (4, 140, 20) não satisfazem ambas as condições e, portanto, não são removidas.

Fonte: FGV BANESTES 2021 Analista em Tecnologia da Informação - Desenvolvimento de Sistemas (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