Questão nº 70

Questão de Fluência em Dados · FGV Receita Federal do Brasil 2023 - Manhã (nº 70)

FGV2023Analista-Tributário da Receita Federal do BrasilFluência em Dados
Gabarito: Dver comentário ↓

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.

Figura da questão de Fluência em Dados

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.

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 R da tabela, a subconsulta verifica se existe alguma linha r1 na tabela R que tenha os mesmos valores de A e B que a linha R atual. Como toda linha é igual a si mesma, essa condição EXISTS será sempre verdadeira para cada linha da tabela. Portanto, todas as 6 linhas serão deletadas.
    • Comando II: DELETE FROM R WHERE EXISTS (SELECT * FROM R r1 WHERE R.A + R.B > r1.A + r1.B)
      • Aqui, R.A + R.B representa a concatenação das strings (ex: 'a' + 'a' = 'aa'). A subconsulta verifica se, para a linha R atual, existe alguma outra linha r1 na tabela R cujo valor concatenado (r1.A + r1.B) seja menor que o valor concatenado da linha R (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 EXISTS será verdadeira para essas 5 linhas.
      • Assim, 5 linhas são deletadas.
    • 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 IN verifica se o valor concatenado de cada linha R (R.A + R.B) está presente dentro desse conjunto. Como o conjunto é formado por todos os valores concatenados da própria tabela R, o valor concatenado de qualquer linha R sempre estará presente nesse conjunto.
      • Portanto, a condição IN será sempre verdadeira para cada linha da tabela, e todas as 6 linhas serão deletadas.
    • O número de registros deletados é 6, 5 e 6, respectivamente.
  • (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.

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