Questão nº 50
Questão de Tecnologia da Informação · FGV BANESTES 2021 (nº 50)
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).
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:
- Apreservação de todas as linhas;
- Bremoção da linha 2, 110, 10;
- Cremoção da linha 2, 120, 10;
- Dremoção das linhas 2, 120, 10 / 2, 110, 10; (alternativa correta)
- Eremoção de todas as linhas.
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 tabelaT3original têmA = 1. O resultado é1. Como1 > 1é falso, esta linha não é excluída. - Para a linha (2, 110, 10):
t3.Aé2. A subconsulta conta quantas linhas na tabelaT3original têmA = 2. O resultado é2(as linhas (2, 110, 10) e (2, 120, 10)). Como2 > 1é verdadeiro, esta linha é marcada para exclusão. - Para a linha (2, 120, 10):
t3.Aé2. A subconsulta conta quantas linhas na tabelaT3original têmA = 2. O resultado é2. Como2 > 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 ocount(*)após a exclusão de uma das linhas comA=2, mas as subconsultas emDELETEoperam 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.
