Pular para o conteúdo principal

Questão de Banco de Dados — Álgebra relacional — CESPE / CEBRASPE 2024

Banco de DadosÁlgebra relacional
Código
ce191204
Banca
CESPE / CEBRASPE
Órgão
CAGEPA - PB
Ano
2024
Nível
Superior

Imagem da questão

Em relação à álgebra relacional, para que o comando apresentado no texto CC1A1 retorne os valores desejados, o sistema gerenciador deve realizar
  1. Aoperação de junção.
  2. Boperação de atribuição.
  3. Coperações de união e de seleção.
  4. Doperações de produto cartesiano e de união.
  5. Eoperações de produto cartesiano e de diferença.
Revelar gabarito e comentário

GabaritoA — operação de junção.

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: junção em consulta SQL

Gabarito: letra A. O comando SQL apresentado realiza uma junção (operação ⋈) entre a tabela Cliente e ela mesma, combinando pares de linhas com base na condição de correspondência a.cpf = b.CPF_cliente_antigo. A junção é a operação da álgebra relacional que corresponde exatamente a essa combinação condicionada de tuplas de duas relações.

A álgebra relacional é uma linguagem formal de consulta composta por operações que recebem uma ou duas relações (tabelas) como entrada e produzem uma nova relação como saída — propriedade conhecida como fechamento. Entre essas operações, a junção (⋈) é a que "combina pares de linhas de duas relações com base em alguma condição de correspondência entre os atributos". É precisamente isso que o comando SQL faz: ele combina cada linha da tabela Cliente (aliás a) com cada linha da mesma tabela (aliás b) onde o CPF de uma é igual ao CPF_cliente_antigo da outra, retornando o nome do cliente antigo, o nome do cliente novo e a renda deste.

Para entender por que as demais alternativas estão incorretas, é essencial distinguir as operações da álgebra relacional. A seleção (σ) filtra tuplas que satisfazem um predicado — no SQL, corresponde à cláusula WHERE sem junção. A projeção (Π) filtra atributos especificados — corresponde à lista de colunas do SELECT. O produto cartesiano (×) combina todos os pares de linhas de duas relações, independentemente de correspondência — corresponde ao FROM com duas tabelas sem condição de junção. A união (∪) combina tuplas de duas relações compatíveis — corresponde ao UNION do SQL. A diferença (−) retorna tuplas que estão em uma relação mas não na outra — corresponde ao EXCEPT. A atribuição (←) armazena o resultado de uma operação em uma relação temporária.

No comando em questão, há duas referências à mesma tabela (Cliente a, Cliente b), o que caracteriza um auto-relacionamento (self-join). O WHERE a.cpf = b.CPF_cliente_antigo estabelece a condição de correspondência entre as duas instâncias da tabela. Essa combinação condicionada é exatamente o que a operação de junção representa na álgebra relacional. O produto cartesiano sozinho produziria todas as combinações possíveis entre as linhas das duas instâncias, sem filtrar aquelas que satisfazem a condição — o que não atenderia ao objetivo de retornar apenas os pares de cliente antigo e novo relacionados.

A pegadinha desta questão está em reconhecer que a condição WHERE com igualdade entre atributos de duas tabelas (ou da mesma tabela com aliases diferentes) caracteriza uma junção, e não uma mera seleção ou produto cartesiano. O candidato que confunde a cláusula WHERE com a operação de seleção pode ser induzido a escolher uma alternativa incorreta. A distinção fundamental: a seleção filtra linhas de UMA relação com base em um predicado sobre seus próprios atributos; a junção combina linhas de DUAS relações com base em uma condição que envolve atributos de ambas.

Guarde essa fronteira: junção = combinação condicionada de duas relações; seleção = filtro de linhas de uma relação; produto cartesiano = combinação sem condição. É exatamente nessa distinção que as alternativas se dividem.

JunçãoSeleção110LEVELsoulevel.com.br
Operações da Álgebra Relacional — só Junção: 1; só Seleção: 1; Junção∩Seleção: 0

Alternativa A — ✅ Correta ⟵ GABARITO

A operação de junção (⋈) combina pares de linhas de duas relações com base em uma condição de correspondência entre atributos. No comando, a condição a.cpf = b.CPF_cliente_antigo estabelece exatamente essa correspondência entre as duas instâncias da tabela Cliente. O SELECT a.nome, b.nome, a.renda projeta os atributos desejados do resultado da junção. Portanto, o SGBD deve realizar uma junção para retornar os valores desejados.

Alternativa B — ❌ Incorreta

A operação de atribuição (←) armazena o resultado de uma operação em uma relação temporária. Ela não combina linhas de relações — é uma operação auxiliar que dá nome a um resultado intermediário. No comando apresentado, não há qualquer atribuição a uma relação temporária; há apenas uma consulta que combina linhas da tabela Cliente consigo mesma. A atribuição não é a operação responsável por retornar os pares de cliente antigo e novo.

Alternativa C — ❌ Incorreta

A união (∪) combina tuplas de duas relações compatíveis (mesmos atributos), e a seleção (σ) filtra tuplas que satisfazem um predicado. No comando, não há união de duas relações — há uma única tabela referenciada duas vezes. Além disso, a condição a.cpf = b.CPF_cliente_antigo não é uma simples seleção sobre uma relação; ela envolve atributos de duas instâncias da tabela, caracterizando uma junção. A união nem sequer se aplica ao contexto, pois não há duas relações distintas para combinar.

Alternativa D — ❌ Incorreta

O produto cartesiano (×) combinaria todos os pares de linhas das duas instâncias da tabela, sem qualquer condição. A união (∪) não se aplica, pois não há duas relações distintas para unir. O comando, porém, aplica uma condição de correspondência (a.cpf = b.CPF_cliente_antigo) sobre o produto cartesiano, o que transforma a operação em uma junção. A alternativa erra ao afirmar que apenas produto cartesiano e união são necessários — a condição de igualdade entre atributos é o que define a junção.

Alternativa E — ❌ Incorreta

O produto cartesiano (×) sem condição produziria todas as combinações possíveis, e a diferença (−) retornaria tuplas que estão em uma relação mas não em outra. Nenhuma dessas operações corresponde ao que o comando faz. A diferença não tem qualquer papel na consulta, pois não há subtração de conjuntos de tuplas. A condição de igualdade no WHERE caracteriza a junção, não o produto cartesiano puro.

NÃO CAIA NESSA!

A banca explora a confusão entre a cláusula WHERE e a operação de seleção. Muitos candidatos veem o WHERE e pensam em seleção (σ), mas a condição a.cpf = b.CPF_cliente_antigo envolve atributos de duas instâncias da mesma tabela — isso é junção, não seleção. A seleção filtra linhas de uma única relação com base em um predicado sobre seus próprios atributos; a junção combina linhas de duas relações com base em uma condição que as relaciona. Identifique a presença de duas referências a tabelas (com aliases) e uma condição de igualdade entre atributos delas: isso é o gatilho para reconhecer a junção.

PEGA ESSA DICA!

Para distinguir as operações na prova, associe cada uma à sua tradução SQL: seleção → WHERE sem junção; projeção → lista de colunas do SELECT; produto cartesiano → FROM com duas tabelas sem condição; junção → FROM com duas tabelas e condição de igualdade no WHERE (ou JOIN ... ON); união → UNION; diferença → EXCEPT; atribuição → CREATE TABLE AS ou variável temporária. Quando a consulta usa a mesma tabela duas vezes com aliases diferentes e uma condição de igualdade entre elas, é um auto-join — sempre junção.

Gabarito: letra A — a operação de junção é a que o SGBD deve realizar para retornar os valores desejados.

Link permanente: /questoes/ce191204