Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024
- Código
- ce403626
- Banca
- CESPE / CEBRASPE
- Órgão
- MPO
- Ano
- 2024
- Cargo
- APO ( )
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: Certo. A construção CASE dentro do comando UPDATE permite realizar atualizações condicionais em um único comando, avaliando os predicados na ordem em que são escritos e aplicando o primeiro resultado correspondente — o que evita problemas de ordem nas atualizações, pois todas as tuplas são avaliadas com base nos valores originais antes de qualquer modificação ser efetivada.
O comando UPDATE é um comando da DML (Data Manipulation Language), utilizado para alterar dados existentes em uma tabela. Sua sintaxe básica é UPDATE nome_da_tabela SET coluna1 = valor1, coluna2 = valor2 WHERE condição;. A construção CASE é uma expressão condicional do SQL que permite avaliar uma série de condições e retornar um valor específico para cada uma delas. Quando usada dentro de um UPDATE, ela permite que diferentes linhas da tabela sejam atualizadas com valores diferentes, dependendo do predicado que cada linha satisfaz, tudo em um único comando.
A grande vantagem dessa abordagem é que todas as avaliações dos predicados são feitas com base no estado original da tabela, antes de qualquer atualização ser aplicada. Isso significa que a ordem em que as linhas são processadas não influencia o resultado final, pois cada linha é avaliada independentemente contra os predicados, e o valor atribuído é o resultado do primeiro predicado verdadeiro. Se fossem usados múltiplos comandos UPDATE sequenciais, a ordem das atualizações poderia afetar o resultado, pois uma atualização posterior poderia sobrescrever ou depender do valor já alterado por uma atualização anterior.
Por exemplo, considere uma tabela de funcionários com uma coluna salario. Para dar um aumento de 10% para funcionários do departamento 'A' e de 5% para os demais, poderíamos usar:
UPDATE funcionarios
SET salario = CASE
WHEN departamento = 'A' THEN salario * 1.10
ELSE salario * 1.05
END;Neste caso, cada linha é avaliada com base no valor original de salario e departamento, e o novo valor é calculado de forma consistente, independentemente da ordem em que as linhas são processadas pelo SGBD.
A pegadinha que a banca explora neste tema é a confusão entre a ordem de avaliação dos predicados dentro do CASE e a ordem de atualização das linhas. O CASE avalia os predicados na ordem em que são escritos, mas isso não tem relação com a ordem em que as linhas são atualizadas — todas as linhas são avaliadas contra os predicados com base em seus valores originais, e a atualização é aplicada de forma atômica para cada linha.
Guarde a distinção entre a avaliação condicional dentro do CASE e a ordem de processamento das linhas: é exatamente nela que a questão se decide.
A afirmação está correta. A construção CASE dentro do comando UPDATE permite que as atualizações nas tuplas sejam realizadas com um único comando, evitando problemas com a ordem das atualizações. Isso ocorre porque todas as tuplas são avaliadas com base nos valores originais antes de qualquer modificação ser efetivada, garantindo que o resultado seja consistente independentemente da ordem de processamento.
A construção CASE é uma expressão condicional que avalia os predicados na ordem em que são escritos, retornando o resultado do primeiro predicado verdadeiro. Quando usada em um UPDATE, ela permite atualizações condicionais em massa, sem a necessidade de múltiplos comandos sequenciais.
Gabarito: Certo
Link permanente: /questoes/ce403626