X               ...

Próximas questões
Com base no mesmo assunto
Q567884 Banco de Dados
                                            X                   Y   

                                          a   b              c   d 

                                          1   2              1   2

                                          3   3              3   4

                                          4   5              5   6

                                          5   7              7   8

                                                               9   1 

delete from y

where y.c in

(select a from x union select c from y)

Considerando-se as tabelas e o comando SQL mostrados acima, é correto concluir que o número de registros removidos da tabela Y pela execução desse comando é: 
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: E - 5

Vamos analisar a questão para compreender por que a alternativa E é a correta. Nela, estamos trabalhando com duas tabelas, X e Y, e um comando SQL de exclusão (DELETE) com uma subconsulta que utiliza o operador IN e a operação de conjunto UNION.

O comando SQL especificado é:

delete from y
where y.c in
(select a from x union select c from y)

Para resolver a query, precisamos entender o que ela faz passo a passo:

  1. Primeiro, a subconsulta dentro do IN seleciona todos os valores da coluna 'a' da tabela X e os valores da coluna 'c' da tabela Y, unindo-os com UNION.
  2. A operação UNION elimina duplicatas por padrão, portanto, o resultado será um conjunto de valores únicos de 'a' e 'c' das duas tabelas.
  3. Depois, o comando DELETE irá remover todas as linhas da tabela Y onde o valor da coluna 'c' está incluído nesse conjunto de valores únicos.

Ao executar a subconsulta, obtemos os seguintes valores para 'a' de X: {1, 3, 4, 5} e para 'c' de Y: {1, 3, 5, 7, 9}. Após a operação de UNION, temos o conjunto: {1, 3, 4, 5, 7, 9}.

Comparando esse conjunto com a coluna 'c' da tabela Y, temos:

  • 1 em Y (correspondendo a 2 registros)
  • 3 em Y (correspondendo a 1 registro)
  • 5 em Y (correspondendo a 1 registro)
  • 7 em Y (correspondendo a 1 registro)
  • 9 em Y (não possui correspondente, pois, apesar de estar no conjunto, não há registro com 'c' igual a 9 após o comando DELETE, já que este valor vem da própria tabela Y)

Somando os registros correspondentes, temos um total de 5 registros que serão deletados da tabela Y. Por isso, a alternativa correta é a letra E, que indica que 5 registros serão removidos da tabela Y.

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

select a from x union select c from y,  vai trazer de x: 1,3,4,5. De y: 1,3,5,7,9. 

Como union retira as repetidas,a query interna ficará: 1,3,4,5,7 e 9. Sendo assim irá deletar todas as linhas de Y.

delete from y >> apaga da tabela Y as linhas especificadas nas condições abaixo

where y.c in >>  o operador "in" vai comparar y.c com o resultado da sub consulta abaixo

(select a from x union select c from y) >> vai retornar 1, 3, 4, 5, 7 e 9. O operador "union" vai combinar o resultado das tabelas x e y. O resultado a principio seria 1,1,3,3,4,5,5,7,9, mais por padrão é como se o union já desse um SELECT DISTINCT automaticamente, então o resultado dessa sub consulta será 1,3,4,5,7 e 9.

Assim serão excluídas de y.c todas as linhas que contenham 1,3,4,5,7 e 9, ou seja todas as 5 linhas.

Clique para visualizar este comentário

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