-
Toda a tabela será apagada, já que exemplo é igual a e1
-
O primeiro passo é rodar o primeiro comando:
delete from exemplo where exists (select * from exemplo e1 where exemplo.x = e1.x)
Agora temos que avaliar a subconsulta dentro do exists para saber quais serão os registros removidos da tabela exemplo, não é?
select * from exemplo e1 where exemplo.x = e1.x
Perceba que a subquery utiliza a mesma tabela que o delete, a tabela exemplo, só dando o nome e1 para ela para fazer a correlação. Se observamos bem, a condição where exemplo.x = e1.x eventualmente será verdadeira para todos os registros de exemplo, já que exemplo e e1 são a mesma tabela!
Assim, para todo registro de exemplo, sempre será retornado algum registro no exists, o que faz com que o delete remova o conteúdo da tabela por inteiro. Quando executarmos o comando a seguir:
select count(distinct x) from exemplo
Temos que o resultado inevitavelmente será zero, já que todos os registros da tabela foram removidos no passo anterior.
Gabarito: A
-
O importante é que removeu as tuplas repetidas. :)
-
Questão bastante interessante. Lembremo-nos que a cláusula EXISTS retorna verdadeiro se uma tabela existir (óbvio né?!), desta forma, o que acontece é que ele não estabelece mais nenhuma condição, a não ser a existência da tabela e sendo assim, todos os dados serão apagados. Pois há repetição de números, logo a tabela existirá, resultando no valor verdadeiro retornado pela cláusula EXISTS.
Por fim, ao realizar a contagem de elementos distintos na tabela, não encontraremos nenhum, pois o comando anterior apagou-a por completo.
Em resumo, o primeiro comando deleta algo da tabela exemplo caso seja encontrado algum valor igual entre a própria tabela, ou seja, a condição sempre será verdadeira nesse caso.
-
O primeiro passo é rodar o primeiro comando:
delete from exemplo where exists (select * from exemplo e1 where exemplo.x = e1.x)
Agora temos que avaliar a subconsulta dentro do exists para saber quais serão os registros removidos da tabela exemplo, não é?
select * from exemplo e1 where exemplo.x = e1.x
Perceba que a subquery utiliza a mesma tabela que o delete, a tabela exemplo, só dando o nome e1 para ela para fazer a correlação.
Se observamos bem, a condição where exemplo.x = e1.x eventualmente será verdadeira para todos os registros de exemplo, já que exemplo e e1 são a mesma tabela!
Assim, para todo registro de exemplo, sempre será retornado algum registro no exists, o que faz com que o delete remova o conteúdo da tabela por inteiro.
Quando executarmos o comando a seguir:
select count(distinct x) from exemplo
Temos que o resultado inevitavelmente será zero, já que todos os registros da tabela foram removidos no passo anterior.
-
valeu, samir