X ...
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 é:
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:
- 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.
- 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.
- 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