Questão de Banco de Dados — SQL — FGV 2023
- Código
- fg060286
- Banca
- FGV
- Órgão
- Banco do Brasil
- Ano
- 2023
- Nível
- Superior
- Cargo
- Analista Tecnológico
- A0.
- B1.
- C50.
- D99.
- E100.
GabaritoB — 1.
Gabarito: letra B. Apenas uma linha será deletada: a linha com o menor valor na coluna A. O comando DELETE FROM T WHERE NOT EXISTS (SELECT * FROM T tt WHERE T.A > tt.A) deleta cada linha para a qual não existe nenhuma linha com valor menor. Como a coluna A é chave primária (valores únicos), apenas a linha de menor valor não possui nenhum valor menor; todas as demais possuem ao menos um valor menor (o próprio menor). Portanto, exatamente 1 linha é removida.
A subconsulta (SELECT * FROM T tt WHERE T.A > tt.A) é correlacionada: para cada linha da tabela T (referenciada externamente), ela verifica se existe uma linha na própria tabela (apelidada de tt) cujo valor de tt.A seja menor que o valor da linha externa. Se existir pelo menos uma linha menor, o EXISTS retorna verdadeiro, e o NOT EXISTS retorna falso — a linha externa não é deletada. Se não existir nenhuma linha menor, NOT EXISTS é verdadeiro e a linha é deletada.
O raciocínio independe da ordem dos dados. Como todos os valores são distintos (chave primária), sempre haverá um único valor mínimo.
Considere uma tabela com valores {10, 20, 30, …, 1000} (todos distintos).
Para o valor 10: não existe nenhum valor menor → deletado.
Para qualquer outro valor (ex.: 20): existe o valor 10 que é menor → não deletado.
Portanto, apenas a linha com o menor valor é deletada.
Como a tabela tem 100 linhas, e apenas o menor valor é deletado, o número de linhas removidas é 1.
Gabarito: letra B.
Link permanente: /questoes/fg060286