← Questões de Banco de Dados

Banco de Dados · FGV · 2022

Questão comentada de Banco de Dados

Caio preparou o comando SQL exibido a seguir para deletar um conjunto de linhas de uma tabela. delete from T1 where exists(select * from T2 where T1.A1 = T2.A2) Para testar seu comando e descobrir exatamente quais seriam as linhas deletadas, Caio pretende executar um comando sem alteração de dados que permita a identificação dessas linhas. Para isso, basta que Caio substitua no comando original o termo:

Gabarito: D

A ideia da questão é simples: quando você quer descobrir quais linhas seriam afetadas por um DELETE, você troca a ação de remoção por uma consulta que apenas mostre os registros. Em SQL, o comando SELECT serve exatamente para isso: retornar linhas sem alterar dados. Assim, o teste fica seguro, porque você enxerga o conjunto que seria atingido antes de apagar qualquer coisa. No comando dado, a cláusula WHERE EXISTS filtra as linhas de T1 que possuem correspondência em T2, isto é, aquelas em que T1.A1 = T2.A2 para pelo menos uma linha de T2. Se você substituir DELETE por SELECT *, o banco não apaga nada e apenas lista as linhas de T1 que satisfazem a condição. É exatamente isso que Caio quer para conferir o resultado. As outras trocas tentam mexer na lógica da condição ou inventam sintaxe que não existe no SQL padrão. Isso muda o conjunto retornado, ou simplesmente gera erro de comando. Em prova, a banca costuma explorar essa diferença entre comando de consulta e comando de manipulação de dados: SELECT mostra, DELETE altera. Então o gabarito é a alternativa D, porque ela transforma o comando de exclusão em uma consulta equivalente para visualização das linhas atingidas, sem modificar os dados.

Continue treinando

Questões relacionadas