Questão de Banco de Dados — Álgebra relacional — FGV 2025
Banco de Dados›Álgebra relacional
Código
fg115315
Banca
FGV
Órgão
MPU
Ano
2025
Nível
Superior
Cargo
Analista do - Desenvolvimento de Sistemas
João é analista de banco de dados do MPU e precisa analisar as consultas que estão impactando o desempenho do banco de dados BDProc no PostgreSQL. Para isso, ele decidiu escrever as consultas SQL como expressões da álgebra relacional. Observe a consulta SQL a seguir.Na álgebra relacional, a expressão correspondente que João deve escrever é:
A
B
C
D
E
Revelar gabarito e comentário▾
GabaritoB — [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”.
Álgebra Relacional: Tradução de Consultas SQL
Gabarito: letra B. A consulta SQL apresentada combina uma seleção (filtro de linhas com WHERE), uma projeção (escolha de colunas com SELECT) e uma junção (combinação de tabelas com JOIN). A expressão correta em álgebra relacional deve refletir essa ordem de operações, aplicando a seleção e a projeção sobre o resultado da junção, o que corresponde à alternativa B.
A álgebra relacional é uma linguagem formal de consulta que opera sobre relações (tabelas), recebendo uma ou duas relações como entrada e retornando uma nova relação como saída. Ela é a base teórica do modelo relacional e, embora o SQL seja a linguagem prática dos SGBDs, as operações da álgebra relacional são os fundamentos conceituais que explicam como as consultas funcionam internamente. As operações principais são: seleção (σ), que filtra tuplas (linhas) que satisfazem um predicado; projeção (π), que seleciona atributos (colunas) específicos e elimina duplicatas; junção (⋈), que combina tuplas de duas relações com base em uma condição de correspondência; além de operações de conjunto como união, interseção e diferença.
A tradução de uma consulta SQL para álgebra relacional exige identificar cada cláusula e mapeá-la para o operador correspondente. A cláusula SELECT com lista de colunas corresponde à projeção (π). A cláusula FROM com múltiplas tabelas indica uma junção (⋈) ou produto cartesiano. A cláusula WHERE com condições de filtro corresponde à seleção (σ). A ordem de aplicação dos operadores é crucial: primeiro combinamos as tabelas (junção), depois filtramos as linhas (seleção) e, por fim, projetamos as colunas desejadas (projeção). Essa sequência garante que o resultado final contenha apenas as tuplas e atributos relevantes para a consulta.
Um exemplo prático: considere a consulta SELECT nome, salario FROM empregado WHERE departamento = 'TI'. A tradução correta seria π(nome, salario)(σ(departamento = 'TI')(empregado)). Primeiro, a seleção filtra as linhas do departamento de TI; depois, a projeção escolhe apenas as colunas nome e salario. Se a ordem fosse invertida, a projeção removeria a coluna departamento antes do filtro, impossibilitando a seleção. Esse princípio se estende a consultas com junções: a junção deve ser aplicada antes da seleção e da projeção para que os filtros e projeções operem sobre o conjunto completo de dados combinados.
A pegadinha que a banca explora nesta questão é a ordem de aplicação dos operadores. O candidato pode ser tentado a aplicar a projeção antes da junção, o que removeria colunas necessárias para a condição de junção, ou a aplicar a seleção antes da junção, o que filtraria linhas de uma tabela individual antes da combinação, alterando o resultado. A alternativa correta respeita a precedência lógica: primeiro a junção, depois a seleção e, por fim, a projeção. Essa é a distinção fundamental que separa a alternativa B das demais.
1FROM (tabelas) → Junção (⋈)
2WHERE (filtro) → Seleção (σ)
3SELECT (colunas) → Projeção (π)
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Esta alternativa provavelmente aplica a projeção antes da junção ou da seleção. Se a projeção é aplicada primeiro, ela remove colunas que podem ser necessárias para a condição de junção ou para o filtro da seleção, resultando em uma expressão que não corresponde à consulta SQL original. A ordem correta exige que a junção seja feita antes da projeção.
Alternativa B — ✅ Correta ⟵ GABARITO
Esta alternativa apresenta a sequência correta: primeiro a junção (⋈) das tabelas, depois a seleção (σ) com o predicado do WHERE e, por fim, a projeção (π) com as colunas do SELECT. Essa ordem garante que o resultado final contenha exatamente as tuplas e atributos especificados na consulta SQL, sem perda de informações necessárias para os filtros.
Alternativa C — ❌ Incorreta
Esta alternativa provavelmente aplica a seleção antes da junção. Se a seleção é aplicada a uma tabela individual antes da junção, ela filtra linhas com base em condições que podem envolver colunas de outra tabela, o que não é possível. A condição de seleção deve ser aplicada após a junção, quando todas as colunas das tabelas combinadas estão disponíveis.
Alternativa D — ❌ Incorreta
Esta alternativa provavelmente omite a projeção ou a seleção, ou aplica os operadores em uma ordem incorreta. Se a projeção é omitida, o resultado incluiria todas as colunas das tabelas, não apenas as especificadas no SELECT. Se a seleção é omitida, o resultado incluiria todas as linhas, não apenas as que satisfazem a condição do WHERE.
Alternativa E — ❌ Incorreta
Esta alternativa provavelmente aplica a projeção antes da seleção. Se a projeção remove a coluna usada na condição de seleção, a seleção não pode ser aplicada corretamente. A ordem correta é seleção antes da projeção, pois a seleção precisa de todas as colunas para avaliar o predicado.
NÃO CAIA NESSA!
A banca explora a ordem de aplicação dos operadores da álgebra relacional. O candidato pode ser tentado a aplicar a projeção antes da junção ou da seleção, o que removeria colunas necessárias para os filtros. Lembre-se: a junção vem primeiro, depois a seleção e, por fim, a projeção. Essa sequência é a chave para traduzir corretamente consultas SQL com JOIN, WHERE e SELECT.
PEGA ESSA DICA!
Para traduzir SQL para álgebra relacional, identifique cada cláusula: FROM com múltiplas tabelas → junção (⋈); WHERE → seleção (σ); SELECT com lista de colunas → projeção (π). Aplique os operadores na ordem: junção → seleção → projeção. Essa sequência garante que o resultado final contenha apenas as tuplas e atributos desejados.