Considere uma tabela T, com uma única coluna A, definida com...
delete from T where not exists (select * from T tt where T.A > tt.A)
Dado que a tabela tem 100 linhas preenchidas, assinale a opção que indica o número de linhas que será deletado pela execução do referido comando.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: B - 1.
Para entender essa questão, precisamos nos aprofundar um pouco no funcionamento do comando DELETE em SQL, juntamente com a cláusula WHERE e a expressão NOT EXISTS. O comando DELETE é utilizado para remover registros de uma tabela que satisfaçam uma condição específica. A cláusula WHERE especifica essa condição. Já a expressão NOT EXISTS é usada em subconsultas e serve para verificar a existência de registros que satisfaçam uma determinada condição.
No caso em questão, a subconsulta está comparando cada valor da coluna A da tabela principal T com todos os outros valores da mesma coluna na mesma tabela (renomeada como tt para diferenciação na subconsulta). O critério dado na subconsulta é que T.A deve ser maior que tt.A.
O efeito dessa consulta é que se não existir nenhum valor na coluna A que seja menor que o valor corrente de A, então o registro correpondente ao valor corrente será deletado. A única linha que satisfaz essa condição é a linha que contém o maior valor de A, porque não haverá nenhum outro valor maior que ele na tabela T. Como consequência, apenas essa linha será deletada.
Dado que a tabela tem 100 linhas, após a execução do comando, teremos 99 linhas remanescentes, pois apenas a linha com o maior valor de A terá sido removida. Portanto, a resposta correta é que apenas 1 linha será deletada.
Assim, a alternativa B está correta porque reflete o comportamento do comando SQL apresentado, que é remover somente a linha com o maior valor na coluna A, que é a chave primária e, portanto, contém valores únicos.
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
Chave primária: a coluna não tem valores repetidos.
NOT EXISTS: retorna verdadeiro, quando a query (select * from T tt where T.A > tt.A) não retornar valor. Esse caso acontece somente com o número 1, pois ele é o único da tabela que não será maior que ninguém. A partir do número 2 por exemplo, já teremos um valor verdadeiro, pois 2 > 1.
Assim, apenas a 1 linha será deletada, a que corresponde ao número 1.
GAB.: LETRA 'B'
Acho que o examinador fica pensando assim: "Vou fazer uma questão com um comando que ninguém experiente e profissional nunca faria na vida, e vou lascar a cabeça de qualquer pessoa normal com algo que não faz sentido algum para um DBA".
o not exists procura a excecao do criterio. como dito, tratand de pk, so o 1 reg nao sera maior d q nenhum outro.
esse 1 registr é a excecao
No início fiquei confuso com as explicações do pessoal, afinal a chave primária também pode ser uma string.... Mas no final vai dar na mesma quando usar o critério de ordem crescente em string.
https://www.qconcursos.com/questoes-de-concursos/questoes/014175f0-f4
Como que a banca FGV tem entendimentos diferentes para questões com o mesmo conceito em concursos diferentes? Usando o mesmo embasamento do gabarito da questão acima, não deveria excluir nenhuma linha pois fere o princípio:
Uma subconsulta em uma instrução DELETE não pode recuperar dados da mesma tabela da qual dados devem ser excluídos.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo