delete from T2 ...

Próximas questões
Com base no mesmo assunto
Q1069977 Banco de Dados

Na questão, considere as tabelas T1 e T2 exibidas a seguir com suas respectivas instâncias.


                                    T1                          T2

                                    a    b                       a       c

                                   10   A                      10      7

                                    11  B                      11      9

                                    12  C                      15   NULL

                                    14  D

delete from T2

where

not exists

(select * from T1

where t1 . a = t2 . a)


No contexto das tabelas T1 e T2 definidas acima, a execução do comando SQL que, eventualmente, remove as linhas, é correto afirmar que

Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: D - somente a terceira será removida.

Para resolver esta questão, é essencial compreender a operação do comando DELETE em conjunto com a cláusula NOT EXISTS em SQL. Esta operação é utilizada para excluir registros de uma tabela (T2) com base na existência, ou não, de registros correspondentes em outra tabela (T1).

O subcomando NOT EXISTS é utilizado para verificar se uma subconsulta retorna alguma linha. Se a subconsulta não retornar linhas, a condição NOT EXISTS é verdadeira, e o DELETE é executado. Neste caso, a subconsulta compara a coluna a de ambas as tabelas T1 e T2 para determinar se um registro em T2 tem uma correspondência em T1.

Analisando os dados fornecidos, temos:

  • Registro T2 (10, 7): Tem correspondente em T1 (10, A), portanto, NÃO será excluído.
  • Registro T2 (11, 9): Tem correspondente em T1 (11, B), portanto, NÃO será excluído.
  • Registro T2 (15, NULL): NÃO tem correspondente em T1, uma vez que não existe um registro em T1 com a = 15. Portanto, SERÁ excluído.

Assim, a única linha removida será a terceira linha da tabela T2, que corresponde ao registro (15, NULL), visto que este não possui um registro correspondente na tabela T1.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Creio que seja um subselect ou subconsulta, o not exists é usado para subtrair um conjunto de dados de outro, ele encontra o primeiro resultado, validar e passar para o próximo registro.

No caso ele pede para deletar uma linha da tabela T2 onde o valor não consta na T1. Ele passa como parâmetro a T2 na T1.

Gabarito: D

A ideia é remover todos aqueles registros para os quais a subquery fornecida não retorna nada.

Para cada registro de T2, precisamos avaliar a seguinte expressão:

select * from T1 where t1.a = t2.a

Então observe que, para um dado registro de T2, se houver algum registro de T1 em que o valor de a é igual ao valor de a em T2, a consulta irá retornar esse registro.

Acontecendo isso, a expressão not exists retornará falso e o registro não será removido.

Então somente aqueles registros cujo valor de T2.a não existe em T1.a é que serão eliminados, no caso somente o terceiro registro, composto por {a = 15, b = NULL}.

tab t2 3 tupla removida.

se fosse delete from T1, seriam somente a primeira e a segunda serão removidas.

not exists procura valores distintos

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo