Analise o comando SQL mostrado a seguir juntamente com a in...
Analise o comando SQL mostrado a seguir juntamente com a instância da tabela C.
update C
set b = (select max(b) from C)
a b
1 2
2 4
3 7
4 8
Assinale a opção que apresenta o número de registros da
instância da tabela C que sofreram alguma alteração em seus
atributos, em relação à instância mostrada, devido à execução
desse comando.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: D - 3.
Para compreender o comando apresentado, precisamos entender o que a cláusula UPDATE realiza em SQL. O comando UPDATE é usado para modificar os valores existentes em uma ou mais colunas de uma tabela. Aqui, ele está sendo aplicado a toda a tabela C, sem uma condição WHERE, o que significa que todas as linhas serão afetadas.
O comando SET dentro do UPDATE indica qual coluna terá seu valor alterado, e para qual valor ele será alterado. Neste caso, estamos definindo o valor de b para o maior valor atualmente presente na coluna b de toda a tabela C, o que é determinado pela subconsulta (SELECT MAX(b) FROM C).
O funcionamento da subconsulta é como segue: ela procura o maior valor (MAX) da coluna b na tabela. Portanto, ela retorna 8, que é o valor máximo encontrado na coluna b dos dados apresentados.
Com base nisso, cada valor de b na tabela C será atualizado para 8. Portanto, todas as linhas onde o valor de b é menos que 8 serão modificadas. Olhando para a instância fornecida, podemos observar que os primeiros três registros têm valores em b que são menores que 8. Sendo assim:
- O registro com a = 1 terá b alterado de 2 para 8.
- O registro com a = 2 terá b alterado de 4 para 8.
- O registro com a = 3 terá b alterado de 7 para 8.
O quarto registro já possui b = 8, logo, não ocorrerá nenhuma alteração nele.
Resumindo, 3 registros sofrerão atualização em seus valores, fazendo da Alternativa D a correta.
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
D)
A linha que contém o 8 não será alterada.
Eu entraria com recurso nessa questão, update sem WHERE atualiza TODOS os registros.
A última linha foi alterada sim, ela é sobrescrita fisicamente no banco apesar de o valor continuar o mesmo.
Se fizer o teste no Oracle, ele iria retornar "4 rows updated", indicando que houve alteração em TODAS as linhas.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo