Questão nº 22
Questão de Tecnologia da Informação · FCC TRT5 2022 (nº 22)
Atenção: O Modelo Entidade-Relacionamento abaixo deve ser utilizado para responder as questões de números 21 a 25.
Para exibir todos os nomes dos departamentos e a quantidade de funcionários de cada departamento utiliza-se a instrução SQL
Este texto de apoio vale também pra questão nº 21, questão nº 23, questão nº 24, questão nº 25.
- ASELECT f.nomeDepartamento, (SELECT COUNT(f.nomeFuncionario) FROM funcionario f WHERE f.nomeDepartamento = d.nomeDepartamento) FROM departamento d;
- BSELECT f.nomeDepartamento, (SELECT COUNT(f.nomeFuncionario) FROM funcionario f WHERE d.nomeDepartamento = f.nomeDepartamento) AS Quantidade_Funcionarios FROM departamento d GROUP BY f.nomeDepartamento;
- CSELECT d.nomeDepartamento, COUNT(f.nomeFuncionario) FROM funcionario f, departamento d;
- DSELECT d.nomeDepartamento, (SELECT COUNT(f.nomeFuncionario) FROM funcionario f WHERE d.nomeDepartamento = f.nomeDepartamento) AS Quantidade_Funcionarios FROM departamento d GROUP BY d.nomeDepartamento; (alternativa correta)
- ESELECT d.nomeDepartamento, COUNT(f.nomeFuncionario) FROM funcionario f, departamento d WHERE d.nomeDepartamento = f.nomeDepartamento;
Resposta comentada
Gabarito Alternativa D
Para exibir informações agregadas por categoria, como a contagem de itens por departamento, usamos funções de agregação (`COUNT`, `SUM`, `AVG`) em conjunto com a cláusula `GROUP BY`. Uma alternativa é usar uma subconsulta correlacionada, que executa uma consulta interna para cada linha da consulta externa.
(A) Incorreta: A coluna `f.nomeDepartamento` na cláusula `SELECT` da consulta externa não está definida no escopo da consulta externa, pois `f` é um alias da subconsulta. Isso resultaria em um erro de sintaxe.
(B) Incorreta: Similar à alternativa A, `f.nomeDepartamento` na cláusula `SELECT` e no `GROUP BY` da consulta externa não está no escopo, causando um erro.
(C) Incorreta: Esta consulta realiza um produto cartesiano (junção de todas as linhas de uma tabela com todas as linhas da outra) entre `funcionario` e `departamento` por não ter uma condição `WHERE` para relacioná-los. Além disso, `COUNT(f.nomeFuncionario)` sem um `GROUP BY` retornaria a contagem total de funcionários do produto cartesiano, não por departamento.
(D) Correta: Esta instrução utiliza uma subconsulta correlacionada. Para cada `d.nomeDepartamento` da tabela `departamento` (consulta externa), a subconsulta `(SELECT COUNT(f.nomeFuncionario) FROM funcionario f WHERE d.nomeDepartamento = f.nomeDepartamento)` conta os funcionários cujo departamento corresponde ao departamento atual da consulta externa. O `GROUP BY d.nomeDepartamento` na consulta externa é tecnicamente redundante aqui, pois a subconsulta já retorna um valor escalar para cada departamento único, mas é uma prática comum e não invalida a consulta.
(E) Incorreta: (Armadilha da banca) Esta alternativa realiza corretamente a junção entre as tabelas `funcionario` e `departamento` usando a cláusula `WHERE`. No entanto, `COUNT(f.nomeFuncionario)` sem a cláusula `GROUP BY d.nomeDepartamento` fará a contagem de todos os funcionários da junção, retornando um único valor total, e não a contagem de funcionários para cada departamento. Para obter a contagem por departamento, seria essencial adicionar `GROUP BY d.nomeDepartamento` ao final da instrução.
Fonte: FCC TRT5 2022 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.
