Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024

Banco de DadosConsultas e Comandos em SQL
Código
ce403626
Banca
CESPE / CEBRASPE
Órgão
MPO
Ano
2024
Cargo
APO ( )
Julgue o item seguinte, relativos à linguagem de definição de dados SQL, à linguagem de manipulação de dados SQL, à linguagem de controle de dados SQL e à linguagem de consulta de dados SQL.   No exemplo de comando UPDATE a seguir, é utilizada a construção case, em que as atualizações nas tuplas são realizadas com um único comando, evitando-se problemas com a ordem das atualizações. UPDATE tabela SET coluna = case       When predicado1 then resultado1       When predicado2 then resultado2       ...       When predicado3 then resultadoN       else resultadoN     End;
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

SQL – Comando UPDATE com a construção CASE

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.

  1. 1Avalia predicados na ordem
  2. 2Usa valores originais
  3. 3Aplica 1º resultado verdadeiro
  4. 4Atualização atômica por linha
LEVEL · soulevel.com.br

Item — ✅ CERTO

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.

SE LIGUE NESSA!

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