Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FUNDATEC 2023

Banco de DadosSQL
Código
qq896801
Banca
FUNDATEC
Órgão
PROCERGS
Ano
2023
Nível
Superior
Cargo
ANC - Analista em Computação - Ênfase em Programação de Sistemas na Tecnologia Java
Para responder à questão, considere o modelo entidade-relacionamento (ER) apresentado pela Figura 1 abaixo:


Imagem da questão
Figura 1 – Modelo entidade-relacionamento (ER)
Considerando o modelo ER apresentado pela Figura 1, pretende-se implementar uma expressão SQL para apresentar o nome de todos os empregados (emp_nome), a descrição APENAS do último cargo (car_descricao) que cada um assumiu, bem como a data de início (emc_inicio) nesse último cargo. Sendo assim, analise as assertivas abaixo.Imagem associada para resolução da questãoQuais estão corretas?
  1. AApenas I.
  2. BApenas I e II.
  3. CApenas I e III.
  4. DApenas II e III.
  5. EI, II e III.
Revelar gabarito e comentário

GabaritoA — Apenas I.

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”.

Consulta SQL para o último cargo de cada empregado

Gabarito: letra A. Apenas a assertiva I está correta. Para apresentar o nome de todos os empregados, a descrição apenas do último cargo que cada um assumiu e a data de início nesse cargo, é necessário usar uma subconsulta correlacionada que encontre a data de início máxima (MAX(emc_inicio)) para cada empregado, e então juntar essa informação com as tabelas de cargo e empregado. As assertivas II e III falham exatamente por não isolarem corretamente o registro mais recente de cada empregado, seja por agrupar de forma inadequada ou por usar uma subconsulta não correlacionada que retorna um único valor global.

O problema central desta questão é a necessidade de identificar, para cada empregado, o registro de cargo mais recente. Isso é um clássico problema de "último registro por grupo" em SQL. A tabela que relaciona empregados e cargos (provavelmente EMPREGADO_CARGO ou similar, com atributos como emc_inicio e emc_fim) contém o histórico de todos os cargos que cada empregado ocupou. Para obter apenas o último cargo de cada um, precisamos de uma lógica que, para cada empregado, encontre o registro com a maior data de início (emc_inicio).

A abordagem correta e mais comum é usar uma subconsulta correlacionada. Nessa técnica, a subconsulta interna referencia a consulta externa, permitindo que, para cada empregado, seja calculada a data máxima de início de seus cargos. A consulta externa então filtra os registros que possuem essa data máxima, garantindo que apenas o cargo mais recente de cada empregado seja retornado. Essa é a essência da assertiva I.

A assertiva II, por sua vez, provavelmente tenta usar GROUP BY com MAX(emc_inicio), mas sem a devida correlação ou sem a junção correta, pode acabar retornando todos os cargos de cada empregado, ou apenas um cargo qualquer, não necessariamente o último. Já a assertiva III, ao usar uma subconsulta não correlacionada, retorna um único valor global de data máxima, que não é específico para cada empregado, falhando em identificar o último cargo de cada um.

A pegadinha da banca está em confundir o candidato com a necessidade de correlação entre a subconsulta e a consulta externa. Muitos candidatos podem achar que um simples GROUP BY com MAX resolve, mas sem a correlação, o resultado não é o esperado. É fundamental entender que, para problemas de "último registro por grupo", a subconsulta correlacionada é a ferramenta mais adequada.

  1. 1Subconsulta correlacionada
  2. 2MAX(emc_inicio) por empregado
  3. 3Junção com cargo e empregado
  4. 4Filtra registro mais recente
LEVEL · soulevel.com.br

Assertiva I — ✅ Correta

A assertiva I está correta porque descreve a abordagem correta para resolver o problema. Ela utiliza uma subconsulta correlacionada que, para cada empregado, encontra a data de início máxima (MAX(emc_inicio)) e, em seguida, junta essa informação com as tabelas de empregado e cargo para obter a descrição do cargo e a data de início. Essa técnica garante que apenas o último cargo de cada empregado seja retornado, atendendo exatamente ao que o enunciado pede.

Assertiva II — ❌ Incorreta

A assertiva II está incorreta porque, embora possa parecer uma solução plausível, ela não isola corretamente o último cargo de cada empregado. Provavelmente, ela utiliza um GROUP BY sem a correlação adequada, o que pode resultar em múltiplos registros por empregado ou em um registro que não é o mais recente. A falta de correlação entre a subconsulta e a consulta externa impede que a data máxima seja calculada individualmente para cada empregado, levando a um resultado incorreto.

Assertiva III — ❌ Incorreta

A assertiva III está incorreta porque utiliza uma subconsulta não correlacionada, que retorna um único valor global de data máxima. Esse valor não é específico para cada empregado, portanto, não é possível identificar corretamente o último cargo de cada um. A subconsulta não correlacionada não consegue relacionar a data máxima com o empregado correto, resultando em um resultado que não atende ao requisito do enunciado.

Gabarito: letra A — apenas a assertiva I está correta.

Link permanente: /questoes/qq896801