Pular para o conteúdo principal

Questão de Banco de Dados — DER - Diagrama de Entidade e Relacionamento — FUNDATEC 2023

Banco de DadosDER - Diagrama de Entidade e Relacionamento
Código
qq896802
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, analise a expressão SQL abaixo e assinale a alternativa correta ao executar essa expressão SQL.select car_descricao, count(1) totalfrom empregadocargoinner join empregado on empregadocargo.emp_id = empregado.emp_idinner join cargo on empregadocargo.car_id = cargo.car_idhaving count(1) > 0order by 1;
  1. AMostra a quantidade de empregados (total) de cada cargo (car_descricao) que já foi ocupado, ordenado pela quantidade.
  2. BExibe quantos empregados (total) ocuparam cada cargo (car_descricao) com base no histórico dessa entidade.
  3. CApresenta um único cargo (car_descricao) e a quantidade (total) de cargos que já foram ocupados pelos empregados.
  4. DMostra todos os cargos (car_descricao) que já foram ocupados e a quantidade de empregados (total) de cada um, ordenados alfabeticamente pela descrição dos cargos (car_descricao).
  5. EA expressão não executa porque possui erro de sintaxe.
Revelar gabarito e comentário

GabaritoE — A expressão não executa porque possui 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”.

Consulta SQL com HAVING sem GROUP BY

Gabarito: letra E. A expressão SQL não executa porque possui erro de sintaxe: a cláusula HAVING é utilizada sem a cláusula GROUP BY, o que viola a sintaxe padrão do SQL. A cláusula HAVING só pode ser usada em conjunto com GROUP BY para filtrar grupos após a agregação, e sua ausência torna a consulta inválida.

A consulta apresentada tenta contar empregados por cargo, mas a estrutura está incorreta. Vamos entender o que cada parte da consulta faz e por que ela falha.

O que a consulta tenta fazer

A consulta seleciona car_descricao e a contagem de registros (count(1)) das tabelas empregadocargo, empregado e cargo, unidas por INNER JOIN. A intenção é agrupar os resultados por cargo e contar quantos empregados ocuparam cada cargo. No entanto, falta a cláusula GROUP BY car_descricao, que é essencial para agrupar os registros por cargo antes de aplicar a função de agregação COUNT.

A regra do SQL

No SQL, a cláusula HAVING é usada para filtrar grupos de registros após a agregação. Ela só pode ser usada em conjunto com GROUP BY. Sem GROUP BY, a consulta não tem grupos para filtrar, e a sintaxe é inválida. A ordem de execução das cláusulas em uma consulta SQL é:

  1. FROM e JOIN

  2. WHERE

  3. GROUP BY

  4. HAVING

  5. SELECT

  6. ORDER BY

A cláusula HAVING é avaliada após o GROUP BY, e sem ele, não há agrupamento para filtrar. Portanto, a consulta está sintaticamente incorreta.

Por que as alternativas A, B, C e D estão incorretas

As alternativas A, B, C e D descrevem resultados que a consulta poderia produzir se estivesse correta, mas todas ignoram o erro de sintaxe. Elas assumem que a consulta é válida e descrevem possíveis saídas, mas a consulta não executa. Portanto, a única alternativa correta é a E, que identifica o erro de sintaxe.

A pegadinha da banca

A banca explora a confusão entre HAVING e WHERE. Muitos candidatos podem pensar que HAVING pode ser usado sem GROUP BY, mas isso é incorreto. A cláusula HAVING é específica para filtrar grupos, e sem GROUP BY, a consulta é inválida.

Conclusão

A expressão SQL não executa porque possui erro de sintaxe: a cláusula HAVING é utilizada sem a cláusula GROUP BY. Portanto, a alternativa correta é a letra E.

  1. 1FROM / JOIN
  2. 2WHERE
  3. 3GROUP BY
  4. 4HAVING
  5. 5SELECT
  6. 6ORDER BY
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Afirma que a consulta mostra a quantidade de empregados de cada cargo que já foi ocupado, ordenado pela quantidade. No entanto, a consulta não executa devido ao erro de sintaxe. Além disso, mesmo se executasse, a ordenação seria pela descrição do cargo (order by 1), não pela quantidade.

Alternativa B — ❌ Incorreta

Afirma que a consulta exibe quantos empregados ocuparam cada cargo com base no histórico dessa entidade. Novamente, a consulta não executa devido ao erro de sintaxe. A descrição do resultado é plausível, mas a consulta é inválida.

Alternativa C — ❌ Incorreta

Afirma que a consulta apresenta um único cargo e a quantidade de cargos que já foram ocupados pelos empregados. Isso é incorreto, pois a consulta não executa e, mesmo se executasse, a lógica de agrupamento estaria errada.

Alternativa D — ❌ Incorreta

Afirma que a consulta mostra todos os cargos que já foram ocupados e a quantidade de empregados de cada um, ordenados alfabeticamente pela descrição dos cargos. A ordenação por order by 1 ordenaria pela primeira coluna (car_descricao), mas a consulta não executa devido ao erro de sintaxe.

Alternativa E — ✅ Correta ⟵ GABARITO

A expressão SQL não executa porque possui erro de sintaxe: a cláusula HAVING é utilizada sem a cláusula GROUP BY. A cláusula HAVING só pode ser usada em conjunto com GROUP BY para filtrar grupos após a agregação. Sem GROUP BY, a consulta é inválida.

PEGA ESSA DICA!

Lembre-se da ordem de execução do SQL: FROMWHEREGROUP BYHAVINGSELECTORDER BY. A cláusula HAVING sempre vem depois do GROUP BY. Se a consulta tiver HAVING sem GROUP BY, ela está sintaticamente incorreta.

Gabarito: letra E

Link permanente: /questoes/qq896802