-
Alternativa c)
Simplesmente ele comparar os números diferentes que tem na tabela numeros e não está na tabela teste (where not exists).
Sobrando apenas os números 2,9,9,9 e 10 => 5
-
A consulta fica um pouco confusa quando lida dessa maneira, não é? É melhor separar o comando em linhas:
insert into teste
select numero from numeros n
where not exists (select * from teste t where t.numero = n.numero)
Veja que iremos inserir na tabela teste os valores do atributo numero da tabela números, para os quais não são retornados registros para a subquery em questão, já que é usado o comando NOT EXISTS.
select * from teste t where t.numero = n.numero
Dessa consulta, podemos entender que a ideia é inserir em teste todos os valores da tabela números que ainda não existem em teste.
Assim, temos que os valores em destaque a seguir serão inseridos em teste: 1, 2, 3, 4, 5, 5, 9, 9, 9, 10.
Repare que o valor 9 será inserido 3 vezes, isso porque a avaliação da subquery ocorre uma só vez, antes da inserção do novo conjunto de valores ser realizada. No momento em que o NOT EXISTS é avaliado, todas as ocorrências de 9 satisfazem ao comando, já que ainda não existe nenhum valor igual na tabela teste.
Se essa conferência fosse feita de forma sequencial, uma vez após cada inserção, o número 9 iria entrar só uma vez, pois após a primeira inserção de um valor 9, o NOT EXISTS iria parar de retornar verdadeiro. Contudo, como esse não é o caso, temos a inserção de 5 valores em teste: 2, 9, 9, 9 e 10.
Gabarito: C
-
A consulta fica um pouco confusa quando lida dessa maneira, não é?
É melhor separar o comando em linhas:
insert into teste
select numero from numeros n
where not exists (select * from teste t where t.numero = n.numero)
Veja que iremos inserir na tabela teste os valores do atributo numero da tabela números, para os quais não são retornados registros para a subquery em questão, já que é usado o comando NOT EXISTS.
select * from teste t where t.numero = n.numero
Dessa consulta, podemos entender que a ideia é inserir em teste todos os valores da tabela números que ainda não existem em teste.
Assim, temos que os valores em destaque a seguir serão inseridos em teste: 1, 2, 3, 4, 5, 5, 9, 9, 9, 10.
Repare que o valor 9 será inserido 3 vezes, isso porque a avaliação da subquery ocorre uma só vez, antes da inserção do novo conjunto de valores ser realizada.
No momento em que o NOT EXISTS é avaliado, todas as ocorrências de 9 satisfazem ao comando, já que ainda não existe nenhum valor igual na tabela teste.
Se essa conferência fosse feita de forma sequencial, uma vez após cada inserção, o número 9 iria entrar só uma vez, pois após a primeira inserção de um valor 9, o NOT EXISTS iria parar de retornar verdadeiro. Contudo, como esse não é o caso, temos a inserção de 5 valores em teste: 2, 9, 9, 9 e 10.
-
Como saber q a clásula "exists" é booleano ou não?