Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2025

Banco de DadosConsultas e Comandos em SQL
Código
qa699088
Banca
FUNDATEC
Órgão
GHC
Ano
2025
Cargo
Prog ( )

Para responder à questão, considere o modelo Entidade-Relacionamento (ER) apresentado pela Figura 1 abaixo, bem como o dicionário de dados apresentado logo em seguida:

Imagem associada para resolução da questão

Figura 1 – Modelo Entidade-Relacionamento (ER)

Dicionário de dados

Imagem associada para resolução da questão

Analise a seguinte expressão SQL e assinale a alternativa correta.

 

select relacao_funcionarios.funcionario, relacao_funcionarios.cargo,
 case when relacao_funcionarios.area_cargo = 1 then 'Saúde' else 'Outros' end area
 from (select fun_nome funcionario, car_nome cargo,
  case
    when C.car_nome = 'Enfermeiro' then 1 else 0
    when C.car_nome = 'Medico' then 1 else 0
    when C.car_nome = 'Programador' then 2 else 0
  end area_cargo
from funcionario F, cargo C
where F.car_id = C.car_id) relacao_funcionarios


  1. AA expressão SQL está correta e cria um campo em tempo de execução chamado area_cargo.
  2. BA expressão SQL está correta e cria uma tabela em tempo de execução chamada relacao_funcionarios.
  3. CA expressão SQL está incorreta, porque apresenta os funcionários repetidos para cada area_cargo.
  4. DA expressão SQL está incorreta, porque a subconsulta pode retornar NULL.
  5. EA expressão SQL está incorreta, porque há erro de sintaxe.
Revelar gabarito e comentário

GabaritoE — A expressão SQL está incorreta, porque há erro de sintaxe.

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: Erro de Sintaxe na Expressão CASE

Gabarito: letra E. A expressão SQL está incorreta porque há erro de sintaxe na construção da cláusula CASE dentro da subconsulta: a sintaxe correta exige que cada condição WHEN seja seguida de seu respectivo THEN, e não que múltiplos WHEN sejam encadeados sem a devida separação. No comando apresentado, a estrutura when C.car_nome = 'Enfermeiro' then 1 else 0 when C.car_nome = 'Medico' then 1 else 0 é inválida, pois após o ELSE 0 do primeiro WHEN, não pode haver outro WHEN sem um novo CASE ou a devida estruturação.

A cláusula CASE no SQL é uma expressão condicional que permite retornar valores diferentes com base em condições. Sua sintaxe básica é:

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

Cada WHEN deve ser seguido de seu THEN, e a sequência de WHEN...THEN pode ser repetida quantas vezes necessário, mas sempre dentro da mesma estrutura CASE...END. O ELSE é opcional e, se presente, deve vir após todos os WHEN...THEN. No comando da questão, a subconsulta tenta usar múltiplos WHEN com ELSE intercalado, o que viola a sintaxe. O correto seria:

CASE
    WHEN C.car_nome = 'Enfermeiro' THEN 1
    WHEN C.car_nome = 'Medico' THEN 1
    WHEN C.car_nome = 'Programador' THEN 2
    ELSE 0
END

Além disso, a expressão case when relacao_funcionarios.area_cargo = 1 then 'Saúde' else 'Outros' end na consulta externa está correta, mas depende da subconsulta que contém o erro. Portanto, a falha está na subconsulta, tornando a expressão SQL inteira incorreta.

A alternativa A afirma que a expressão está correta e cria um campo em tempo de execução chamado area_cargo. De fato, a consulta tenta criar um campo calculado area_cargo na subconsulta e outro area na consulta externa, mas devido ao erro de sintaxe, a expressão não é válida. A alternativa B também afirma que a expressão está correta e cria uma tabela em tempo de execução chamada relacao_funcionarios. Na verdade, relacao_funcionarios é um alias para a subconsulta, não uma tabela criada em tempo de execução; além disso, o erro de sintaxe impede a execução. A alternativa C sugere que a expressão está incorreta porque apresenta os funcionários repetidos para cada area_cargo, mas isso não é o problema principal — o erro é de sintaxe. A alternativa D menciona que a subconsulta pode retornar NULL, o que é possível, mas não é o motivo da incorreção da expressão.

Portanto, a única alternativa que identifica corretamente o problema é a letra E, que aponta o erro de sintaxe.

  1. 1CASE
  2. 2WHEN condição THEN resultado
  3. 3WHEN condição THEN resultado
  4. 4ELSE resultado (opcional)
  5. 5END
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

A expressão SQL não está correta devido ao erro de sintaxe na cláusula CASE da subconsulta. Embora a intenção seja criar um campo calculado area_cargo em tempo de execução, a sintaxe inválida impede a execução. O campo area_cargo seria criado se a sintaxe estivesse correta, mas não é o caso.

Alternativa B — ❌ Incorreta

A expressão SQL não está correta e relacao_funcionarios não é uma tabela criada em tempo de execução, mas sim um alias para a subconsulta. Além disso, o erro de sintaxe na subconsulta torna a expressão inválida.

Alternativa C — ❌ Incorreta

A expressão SQL está incorreta, mas não porque apresenta os funcionários repetidos para cada area_cargo. O problema é o erro de sintaxe na cláusula CASE. A repetição de funcionários poderia ocorrer se houvesse um JOIN inadequado, mas não é o caso aqui.

Alternativa D — ❌ Incorreta

A subconsulta pode retornar NULL, mas isso não é o motivo da incorreção da expressão. O erro principal é de sintaxe na cláusula CASE. A possibilidade de NULL é uma característica comum em consultas SQL e não invalida a expressão por si só.

Alternativa E — ✅ Correta ⟵ GABARITO

A expressão SQL está incorreta porque há erro de sintaxe na cláusula CASE da subconsulta. A estrutura when C.car_nome = 'Enfermeiro' then 1 else 0 when C.car_nome = 'Medico' then 1 else 0 é inválida, pois após o ELSE 0 do primeiro WHEN, não pode haver outro WHEN sem a devida separação. A sintaxe correta exige que todos os WHEN...THEN sejam listados antes do ELSE, como mostrado no desenvolvimento.

NÃO CAIA NESSA!

A banca explora a confusão entre a sintaxe correta do CASE e uma estrutura incorreta com múltiplos WHEN intercalados por ELSE. O candidato pode não perceber que o ELSE deve vir apenas uma vez, após todos os WHEN...THEN. Lembre-se: a ordem correta é WHEN...THEN (repetido), ELSE (opcional), END.

PEGA ESSA DICA!

Ao revisar expressões CASE em SQL, verifique sempre se cada WHEN tem seu THEN correspondente e se o ELSE aparece apenas uma vez, no final. Uma boa prática é reescrever a expressão em um formato padronizado para identificar erros de sintaxe rapidamente.

Gabarito: letra E

Link permanente: /questoes/qa699088