Pular para o conteúdo principal

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

Banco de DadosConsultas e Comandos em SQL
Código
ce397763
Banca
CESPE / CEBRASPE
Órgão
TBG
Ano
2023
Cargo
Ana Jr ( )
Considerando que a tabela precedente, de nome funcionario, possui apenas os registros mostrados, julgue o item subsequente. A seguir, é apresentado o comando correto em SQL para se alterar o valor do salário (Salario) para o maior salário da tabela apenas para o funcionário que possui IdFuncionario igual a 1. UPDATE funcionario AS f, (SELECT max(salario) as maxsalario FROM funcionario) AS s SET f.salario = s.maxsalario WHERE f.idfuncionario = 1;Imagem associada para resolução 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 subconsulta no SQL

Gabarito: Certo. O comando apresentado está sintaticamente correto e atende exatamente ao que o enunciado pede: atualizar o salário do funcionário com IdFuncionario = 1 para o maior salário da tabela. A técnica utilizada é a de uma subconsulta na cláusula FROM do UPDATE, que calcula o valor máximo e o disponibiliza como uma tabela derivada (alias s), permitindo que o SET o utilize diretamente.

O comando UPDATE é a instrução da sublinguagem DML (Data Manipulation Language) responsável por modificar dados já existentes em uma tabela. Sua sintaxe básica é UPDATE nome_da_tabela SET coluna = valor WHERE condição;. No caso da questão, o valor a ser atribuído não é uma constante, mas sim o resultado de uma consulta agregada — o maior salário da tabela. Para isso, o SQL permite que uma subconsulta seja usada na cláusula FROM do UPDATE, criando uma tabela temporária (derivada) que pode ser referenciada no SET.

Vamos decompor o comando:

  • UPDATE funcionario AS f — define a tabela-alvo da atualização e atribui a ela o alias f.

  • (SELECT max(salario) as maxsalario FROM funcionario) AS s — é a subconsulta que calcula o maior salário de toda a tabela funcionario e a trata como uma tabela derivada com o alias s. Essa subconsulta retorna uma única linha com uma única coluna chamada maxsalario.

  • SET f.salario = s.maxsalario — atribui à coluna salario da tabela f (que é a tabela funcionario) o valor da coluna maxsalario da tabela derivada s.

  • WHERE f.idfuncionario = 1 — restringe a atualização apenas ao registro cujo idfuncionario é igual a 1.

Essa é uma forma válida e comum de se atualizar uma tabela com base em um valor calculado a partir dela mesma. O uso de alias (AS f e AS s) é essencial para que o banco de dados consiga distinguir a tabela original da tabela derivada, evitando ambiguidade. O comando funciona em SGBDs que suportam a sintaxe de UPDATE com FROM, como o PostgreSQL, o SQL Server e o MySQL (embora com pequenas variações de sintaxe).

Um ponto importante é que a subconsulta SELECT max(salario) FROM funcionario é executada antes da atualização, calculando o maior salário com base nos dados atuais. Como o WHERE restringe a atualização a apenas um registro (o de idfuncionario = 1), não há risco de o valor máximo ser alterado durante a execução do comando, pois apenas uma linha é modificada e ela não é a que define o máximo (a menos que o funcionário 1 já tenha o maior salário, caso em que o valor permaneceria o mesmo).

A pegadinha que a banca poderia explorar aqui seria a de inverter a ordem das cláusulas ou usar uma subconsulta na cláusula SET de forma incorreta, mas o comando apresentado está perfeitamente alinhado com a sintaxe padrão do SQL para esse tipo de operação.

NÃO CAIA NESSA!

A banca poderia tentar confundir o candidato com a ordem das cláusulas ou com a necessidade de usar JOIN em vez de uma subconsulta na FROM. Aqui, a subconsulta na FROM é a técnica correta e suficiente — não há necessidade de JOIN explícito, pois a subconsulta retorna um valor escalar (uma única linha e coluna) que é usado diretamente no SET.

  1. 1Subconsulta calcula MAX(salario)
  2. 2Tabela derivada s (maxsalario)
  3. 3SET f.salario = s.maxsalario
  4. 4WHERE f.idfuncionario = 1
LEVEL · soulevel.com.br

Alternativa C — ✅ Certo ⟵ GABARITO

O comando está correto. A subconsulta (SELECT max(salario) as maxsalario FROM funcionario) AS s calcula o maior salário da tabela e o disponibiliza como uma tabela derivada. O UPDATE então usa esse valor para atualizar o salário do funcionário com idfuncionario = 1. A sintaxe é válida em SGBDs que suportam UPDATE com FROM, e o resultado é exatamente o que o enunciado pede: o funcionário 1 passa a ter o maior salário da tabela.

Gabarito: Certo

Link permanente: /questoes/ce397763