Questão nº 70
Questão de Fluência em Dados · FGV Receita Federal do Brasil 2023 - Manhã (nº 70)
Num banco de dados relacional, considere uma tabela R, com duas colunas A e B, ambas do tipo string de caracteres, cuja instância é exibida a seguir.

Nesse cenário analise os comandos a seguir.
I.
DELETE FROM R
WHERE EXISTS (SELECT * FROM R r1
WHERE R.A = r1.A and R.B = r1.B)
II.
DELETE FROM R
WHERE EXISTS (SELECT * FROM R r1
WHERE R.A + R.B > r1.A + r1.B)
III.
DELETE FROM R
WHERE R.A + R.B in (SELECT A + B FROM R)
Assinale a lista que contém o número de registros deletados em cada um dos comandos I, II e III, respectivamente, quando executados separadamente e usando a mesma instância inicial descrita.
- A2, 2 e 0.
- B2, 4 e 0.
- C4, 4 e 4.
- D6, 5 e 6. (alternativa correta)
- E6, 6 e 6.
Resposta comentada
Gabarito Alternativa D
O comando DELETE remove linhas de uma tabela. Quando combinado com uma subconsulta (uma consulta aninhada dentro de outra), a subconsulta é avaliada para cada linha da tabela principal que está sendo considerada para exclusão, e o resultado dessa avaliação (verdadeiro ou falso) determina se a linha será deletada.
- (A) Incorreta: A alternativa não corresponde aos resultados corretos das operações.
- (B) Incorreta: A alternativa não corresponde aos resultados corretos das operações.
- (C) Incorreta: A alternativa não corresponde aos resultados corretos das operações.
- (D) Correta:
- Comando I:
DELETE FROM R WHERE EXISTS (SELECT * FROM R r1 WHERE R.A = r1.A and R.B = r1.B)- Para cada linha
Rda tabela, a subconsulta verifica se existe alguma linhar1na tabelaRque tenha os mesmos valores deAeBque a linhaRatual. Como toda linha é igual a si mesma, essa condiçãoEXISTSserá sempre verdadeira para cada linha da tabela. Portanto, todas as 6 linhas serão deletadas.
- Para cada linha
- Comando II:
DELETE FROM R WHERE EXISTS (SELECT * FROM R r1 WHERE R.A + R.B > r1.A + r1.B)- Aqui,
R.A + R.Brepresenta a concatenação das strings (ex: 'a' + 'a' = 'aa'). A subconsulta verifica se, para a linhaRatual, existe alguma outra linhar1na tabelaRcujo valor concatenado (r1.A + r1.B) seja menor que o valor concatenado da linhaR(R.A + R.B). - Os valores concatenados são: 'aa', 'ab', 'ba', 'bb', 'ca', 'cb'.
- A linha ('a', 'a') resulta em 'aa'. Não existe nenhum valor concatenado que seja menor que 'aa'. Portanto, a condição
EXISTSé falsa para esta linha, e ela não é deletada. - Para todas as outras 5 linhas ('a', 'b' -> 'ab'; 'b', 'a' -> 'ba'; 'b', 'b' -> 'bb'; 'c', 'a' -> 'ca'; 'c', 'b' -> 'cb'), o valor concatenado é maior que 'aa'. Como 'aa' existe na tabela, a condição
EXISTSserá verdadeira para essas 5 linhas. - Assim, 5 linhas são deletadas.
- Aqui,
- Comando III:
DELETE FROM R WHERE R.A + R.B in (SELECT A + B FROM R)- A subconsulta
(SELECT A + B FROM R)retorna o conjunto de todos os valores concatenados existentes na tabela: {'aa', 'ab', 'ba', 'bb', 'ca', 'cb'}. - A condição
INverifica se o valor concatenado de cada linhaR(R.A + R.B) está presente dentro desse conjunto. Como o conjunto é formado por todos os valores concatenados da própria tabelaR, o valor concatenado de qualquer linhaRsempre estará presente nesse conjunto. - Portanto, a condição
INserá sempre verdadeira para cada linha da tabela, e todas as 6 linhas serão deletadas.
- A subconsulta
- O número de registros deletados é 6, 5 e 6, respectivamente.
- Comando I:
- (E) Incorreta: A alternativa não corresponde aos resultados corretos das operações.
Fonte: FGV Receita Federal do Brasil 2023 - Manhã Analista-Tributário da Receita Federal do Brasil (Caderno Tipo 1). Reproduzida para fins de estudo.