Questão nº 23

Questão de Tecnologia da Informação · FCC TRT5 2022 (nº 23)

FCC2022Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Ever comentário ↓

Atenção: O Modelo Entidade-Relacionamento abaixo deve ser utilizado para responder as questões de números 21 a 25.

Figura da questão de Tecnologia da Informação


Para exibir corretamente o nome do funcionário, nome de seu departamento e a senha de login, de todos os funcionários, sem repetição, utiliza-se a instrução

Este texto de apoio vale também pra questão nº 21, questão nº 22, questão nº 24, questão nº 25.

Resposta comentada

Gabarito Alternativa E

Para exibir dados de diferentes tabelas, como o nome de um funcionário, seu departamento e sua senha, precisamos combinar essas informações. Isso pode ser feito usando junções (JOINs) para ligar tabelas por colunas relacionadas, ou subconsultas (subqueries), que são consultas aninhadas que retornam um valor ou um conjunto de valores para a consulta principal.

(A) Incorreta: Não há condições de junção (`WHERE` clause) especificadas entre as tabelas `login`, `funcionario` e `departamento`, o que resultaria em um produto cartesiano (combinação de cada linha de uma tabela com cada linha das outras). Além disso, o `GROUP BY f.nomeFuncionario` sem funções de agregação ou as outras colunas no `GROUP BY` é sintaticamente inválido na maioria dos bancos de dados para o que se propõe.
(B) Incorreta: A condição `OR` na cláusula `WHERE` (`f.nomeDepartamento = d.nomeDepartamento OR f.emailFuncionario=l.emailFuncionario`) está incorreta para realizar junções. Ela causaria a inclusão de muitas linhas não relacionadas, pois basta que uma das condições seja verdadeira, resultando em dados misturados e incorretos. Junções corretas exigem `AND` para ligar as chaves estrangeiras.
(C) Incorreta: (Armadilha da banca) Embora a subconsulta para a senha esteja correta, a cláusula `FROM funcionario f, departamento d;` sem uma condição `WHERE` para ligar `funcionario` e `departamento` resulta em um produto cartesiano entre essas duas tabelas. Isso significa que cada funcionário seria listado para cada departamento existente, gerando repetições indesejadas e dados incorretos para o objetivo de "sem repetição". A informação `nomeDepartamento` já está disponível diretamente na tabela `funcionario`, não sendo necessário juntar com a tabela `departamento` apenas para obter o nome do departamento.
(D) Incorreta: Não há condições de junção (`WHERE` clause) entre as tabelas `login`, `funcionario` e `departamento`, o que resultaria em um produto cartesiano completo de todas as linhas de todas as tabelas, gerando um resultado massivo e completamente incorreto.
(E) Correta: Esta instrução seleciona o `nomeFuncionario` e o `nomeDepartamento` diretamente da tabela `funcionario` (já que `nomeDepartamento` é uma chave estrangeira presente na tabela `funcionario`). Para a `senha`, ela utiliza uma subconsulta correlacionada: `(SELECT l.senha FROM login l WHERE f.emailFuncionario = l.emailFuncionario)`. Essa subconsulta é executada para cada linha da tabela `funcionario` e busca a senha correspondente na tabela `login` usando o `emailFuncionario` como elo. Esta é a forma mais eficiente e correta de obter todas as informações solicitadas sem repetições desnecessárias, pois não há junções extras com a tabela `departamento` quando a informação já está em `funcionario`.

Fonte: FCC TRT5 2022 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho