Pular para o conteúdo principal

Questão de Banco de Dados — SQL — CESPE / CEBRASPE 2024

Banco de DadosSQL
Código
ce178256
Banca
CESPE / CEBRASPE
Órgão
MPO
Ano
2024
Nível
Superior
Cargo
Analista de Planejamento e Orçamento - Especialidade: Gestão de Dados Orçamentários
Julgue o item seguinte, relativo à 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.Imagem da questão
  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”.

Comando UPDATE com CASE em SQL

Gabarito: Certo (C). A construção CASE dentro de um comando UPDATE permite realizar atualizações condicionais em um único comando, avaliando os predicados na ordem em que aparecem e aplicando o primeiro resultado correspondente — o que, de fato, evita problemas com a ordem das atualizações, pois todas as tuplas são avaliadas com base no estado original da tabela. Essa é uma característica da linguagem de manipulação de dados (DML) do SQL, especificamente do comando UPDATE.

O comando UPDATE é um dos comandos da DML (Data Manipulation Language), responsável por alterar dados existentes em uma tabela. A construção CASE é uma expressão condicional que permite definir diferentes resultados com base em condições (predicados). Quando usada dentro de um UPDATE, ela possibilita que diferentes linhas sejam atualizadas com valores diferentes, dependendo de cada condição, tudo em uma única instrução.

A grande vantagem dessa abordagem é que o SGBD processa a atualização de forma atômica e consistente: todas as linhas são avaliadas e atualizadas com base no estado original da tabela, antes de qualquer modificação ser aplicada. Isso elimina o problema clássico de "ordem de atualização", onde, se você executasse vários comandos UPDATE separados, o resultado de um poderia influenciar o processamento do próximo, levando a resultados inesperados ou incorretos.

Por exemplo, suponha uma tabela funcionarios com uma coluna salario. Se você quiser dar um aumento de 10% para funcionários do departamento 'A' e de 5% para os demais, poderia fazer:

UPDATE funcionarios
SET salario = CASE
    WHEN departamento = 'A' THEN salario * 1.10
    ELSE salario * 1.05
END;

Nesse caso, cada linha é avaliada individualmente: se o departamento for 'A', o salário é multiplicado por 1,10; caso contrário, por 1,05. Como a avaliação é feita com base no valor original de salario, não há risco de uma atualização afetar a outra.

A pegadinha que a banca explora é justamente a confusão entre a ordem de avaliação das condições dentro do CASE e a ordem de execução de múltiplos comandos UPDATE. No CASE, a ordem dos WHEN importa para a escolha do resultado (o primeiro WHEN verdadeiro é o que vale), mas isso não gera o problema de "ordem de atualizações" que ocorreria com comandos separados. O item está correto ao afirmar que a construção CASE evita problemas com a ordem das atualizações, pois todas as atualizações são feitas em um único comando, de forma atômica.

Guarde essa distinção: a ordem dos WHEN dentro do CASE define a prioridade das condições, mas a atualização em si é única e não sofre interferência de outras atualizações. É exatamente isso que o item afirma e que o torna correto.

  1. 1Avalia predicados na ordem
  2. 2Aplica 1º WHEN verdadeiro
  3. 3Base: estado original
  4. 4Atualização única e atômica
LEVEL · soulevel.com.br

Item — ✅ CERTO

O item descreve corretamente o uso da construção CASE em um comando UPDATE. A afirmação de que "as atualizações nas tuplas são realizadas com um único comando" está correta, pois o UPDATE com CASE é uma única instrução SQL que pode atualizar diferentes linhas com valores diferentes, conforme as condições especificadas. Além disso, a afirmação de que isso "evita problemas com a ordem das atualizações" também está correta, pois, ao contrário de executar vários comandos UPDATE sequenciais, onde o resultado de um pode afetar o processamento do próximo, o UPDATE com CASE avalia todas as linhas com base no estado original da tabela, garantindo consistência e previsibilidade.

A construção CASE é uma expressão condicional padrão do SQL, suportada pela maioria dos SGBDs relacionais (Oracle, SQL Server, PostgreSQL, MySQL, etc.). Sua sintaxe geral é:

CASE
    WHEN condicao1 THEN resultado1
    WHEN condicao2 THEN resultado2
    ...
    ELSE resultado_padrao
END

Quando usada no SET de um UPDATE, ela permite que cada linha seja atualizada com um valor diferente, dependendo de qual condição ela satisfaz. Isso é extremamente útil para atualizações condicionais em massa, evitando a necessidade de múltiplos comandos UPDATE e os problemas de ordem que eles poderiam causar.

NÃO CAIA NESSA!

A banca pode tentar confundir o candidato sugerindo que a ordem dos WHEN dentro do CASE causa o mesmo problema de ordem que múltiplos UPDATE. Não caia nessa: a ordem dos WHEN apenas define a prioridade das condições (o primeiro WHEN verdadeiro é o que vale), mas a atualização é única e atômica, avaliada com base no estado original da tabela. O problema de ordem só existiria se fossem executados vários comandos UPDATE separados, onde o resultado de um poderia influenciar o próximo.

Gabarito: Certo (C).

Link permanente: /questoes/ce178256