SóProvas


ID
3209938
Banca
FGV
Órgão
SEE-PE
Ano
2016
Provas
Disciplina
Banco de Dados
Assuntos

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
Comentários
  • 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

  • Essa questão não é muito difícil. Veja que 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:

    Então observe que, para um dado registro de T2, se houver algum registro de T1 em que o valor de é 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}.

  • 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}.