Pular para o conteúdo principal

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

Banco de DadosBanco de Dados Relacionais
Código
qq896745
Banca
FUNDATEC
Órgão
PROCERGS
Ano
2023
Nível
Superior
Cargo
ANC - Analista em Computação - Ênfase em Desenvolvimento Oracle PL/SQL
Considere o esquema relacional que representa parte de um sistema de uma empresa:Projetos(IdProjeto, nome)Pessoas(IdPessoa, nome)ProjetosPessoas(#IdProjeto,#IdPessoa)Legenda: Campos sublinhados compõem a chave primária da tabela e campo precedido de # é uma chave estrangeiraA coordenação de recursos humanos deseja saber os nomes das pessoas que já trabalharam em todos os projetos cadastrados na base de dados. A consulta que expressa correta e eficientemente o que o relatório deve mostrar é:
  1. AImagem associada para resolução da questão
  2. BImagem associada para resolução da questão
  3. CImagem associada para resolução da questão
  4. DImagem associada para resolução da questão
  5. EImagem associada para resolução da questão
Revelar gabarito e comentário

GabaritoC — [imagem]

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

Consultas SQL com Divisão Relacional

Gabarito: letra C. A consulta que busca elementos que se relacionam com todos os itens de outro conjunto é classicamente resolvida em SQL utilizando a técnica de {{divisão relacional}}, implementada através de uma estrutura de dupla negação com NOT EXISTS.

O problema pede as pessoas que trabalharam em todos os projetos. A lógica de dupla negação funciona da seguinte forma: "selecione as pessoas para as quais não existe um projeto que elas não tenham trabalhado". Ou seja, se não existe um projeto sequer que a pessoa tenha deixado de participar, então ela participou de todos.

Alternativa C — ✅ Correta ⟵ Gabarito

Esta alternativa implementa corretamente a lógica de dupla negação:

  1. O SELECT externo busca pessoas (PE).

  2. O primeiro NOT EXISTS verifica se não há projetos (PR) que satisfaçam a condição interna.

  3. O segundo NOT EXISTS (dentro do primeiro) verifica se não há uma associação na tabela ProjetosPessoas (PP) entre a pessoa atual e o projeto atual. Se essa associação não existir, significa que a pessoa não trabalhou naquele projeto, invalidando a pessoa para o resultado final.

Alternativas A, B, D e E — ❌ Incorretas

  • Alternativa A: Utiliza ALL de forma sintaticamente incorreta para o objetivo de divisão e não estabelece a relação de exclusão necessária para verificar a participação em todos os itens.

  • Alternativa B: Utiliza IN e EXISTS de forma que apenas verifica se a pessoa trabalhou em pelo menos um projeto, não em todos.

  • Alternativa D: Utiliza LEFT JOIN com EXISTS, o que não garante a restrição de "todos" os projetos, falhando na lógica de divisão.

  • Alternativa E: A estrutura está invertida, buscando projetos em vez de pessoas, e não implementa a lógica de negação necessária para a divisão relacional.

PEGA ESSA DICA!

Sempre que a questão pedir "todos", "cada" ou "somente", desconfie de consultas simples com JOIN ou IN. A estrutura de dupla negação (NOT EXISTS dentro de NOT EXISTS) é o padrão ouro para resolver problemas de divisão relacional em SQL.

Gabarito: letra C

Link permanente: /questoes/qq896745