Questão de Banco de Dados — DER - Diagrama de Entidade e Relacionamento — FUNDATEC 2023
Banco de Dados›DER - 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:
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;
AMostra a quantidade de empregados (total) de cada cargo (car_descricao) que já foi ocupado, ordenado pela quantidade.
BExibe quantos empregados (total) ocuparam cada cargo (car_descricao) com base no histórico dessa entidade.
CApresenta um único cargo (car_descricao) e a quantidade (total) de cargos que já foram ocupados pelos empregados.
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).
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 é:
FROM e JOIN
WHERE
GROUP BY
HAVING
SELECT
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.
1FROM / JOIN
2WHERE
3GROUP BY
4HAVING
5SELECT
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: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. A cláusula HAVING sempre vem depois do GROUP BY. Se a consulta tiver HAVING sem GROUP BY, ela está sintaticamente incorreta.