Algebra Relacional
Algebra Relacional
Algebra Relacional
BANCO DE DADOS
aula 6 – álgebra relacional -
João 0001
SAL-2 0007 3750
Pedro 0002
SAL-2 0008 1800
Francisco 0003
Maria 0004
cliente
Paulo 0007
nome rua cidade
José 0006
João Getúlio Vargas São Leopoldo
Ana 0005
Pedro Getúlio Vargas São Leopoldo
João E-001
Paulo Cecília Meireles São Leopoldo
Ana E-005
José João Goulart Novo Hamburgo
Helena E-008
Ana Assis Brasil Porto alegre
- Operações primárias: operam sobre uma única relação: select, project, rename.
- Operações binárias: operam sobre duas relações: union, set difference, cartesian
product.
5.3. Álgebra Relacional – operações fundamentais
• Operação SELECT: seleciona as tuplas que satisfaçam um determinado predicado. A letra
sigma representa a seleção, o predicado aparece subscrito a sigma, e a relação utilizada é
colocada entre parênteses.
Ex: σnome_agencia = “SAL-1”(conta) : seleciona as tuplas da relação conta cuja agência é igual
a “SAL-1”.
nome_agencia numero_conta saldo
• Operação PROJECT: denotada pela letra grega pi (π), esta operação retorna a relação com
somente os atributos selecionados, eliminando as linhas em duplicidade. Os atributos aparecem
ao lado de pi, subscrito, e a relação aparece entre parênteses.
Ex: πnome_agência,saldo(agencia)
nome_agencia cidade_agencia saldo agencia
nome_agencia saldo
NOH-1 Novo Hamburgo 260050
NOH-1 260050
SAL-1 São Leopoldo 455580
SAL-1 455580
POA-1 Porto Alegre 1250369
POA-1 1250369
SAL-2 São Leopoldo 125588
SAL-2 125588
5.3. Álgebra Relacional – operações fundamentais
- Juntando operações SELECT E PROJECT: pode-se unir operações desde que elas tratem de
relações.
πnome_agencia,saldo(σnome_agencia = “SAL-1”(conta) )
πnome_cliente(devedor) ∪ πnome_cliente(depositante)
nome_cliente
João
Pedro
Francisco
(depositante) Maria
Paulo
Ana
(devedor)
Helena
5.3. Álgebra Relacional – operações fundamentais
- Uma operação UNION entre duas relações “r” e “s” só é possível se:
ii. os domínios dos i-ésimo atributo de “r” e o i-ésimo atributo de “s” devem ser os
mesmos para todo “i”.
• Operação Diferença entre conjuntos: sendo “r” e “s” duas relações, “r-s” tem como
resultado o conjunto de tuplas que estão na relação “r”, mas não encontram-se na relação
“s”.
- Ex: selecionar todos os clientes que tem conta mas não tem empréstimo.
πnome_cliente(depositante) - πnome_cliente(devedor)
nome_cliente
João
Pedro
Francisco
Clientes com contas
Maria
Mas sem empréstimos
Linhas eliminadas Paulo
José
Ana
5.4. Álgebra Relacional – operações adicionais
• Operação de Interseção de conjuntos: captura todas as tuplas que encontram-se em uma
relação “r”, e que também encontram-se na relação “s”.
πnome_cliente(devedor) ∩ πnome_cliente(depositante)
devedor
depositante
nome_client num_emprestimo
nome_cliente numero_conta nome_client e
e João E-001
João 0001 João
Ana E-005
Pedro 0002 Ana
Helena E-008
Francisco 0003
Maria 0004
Paulo 0007
José 0006
Ana 0005
r ∩ s = r – (r - s)
s
r
r – (r - s)
r-s
5.3. Álgebra Relacional – operações fundamentais
• Operação Produto Cartesiano: permite combinar informações de duas relações quaisquer. Representado
por “r x s”.
Ex: Qual o produto cartesiano entre as relações devedor e emprestimo.
Obs: Para evitar o problema da duplicidade de nomes de atributos insere-se o nome da relação
antes do atributo:
OPS !!!
Obs: Como a operação produto cartesiano associa todas as tuplas de empréstimos a todas as
tuplas de devedor, então existem empréstimos que estão relacionados erroneamente a alguns
clientes. Para contornar este problema, devemos exigir que o atributo devedor.num_emprestimo
seja igual ao atributo emprestimo.num_emprestimo.
- Assim temos:
σdevedor.num_emprestimo = emprestimo.num_emprestimo (σnome_agência = “SAL-1” (devedor x empréstimo))
nome_client
e
João
5.3. Álgebra Relacional – operações fundamentais cliente
ρx(E)
Ana Assis Brasil Porto alegre
Ex: Desejamos o nome dos clientes que moram na mesma cidade nome_cliente rua_cliente cidade_cliente
de Francisco. Francisco Olavo Bilac Novo Hamburgo
E depois uma projeção: Pedro Getúlio Vargas São Leopoldo Novo Hamburgo
Para encontrar os outros clientes, é necessário fazer uma José João Goulart Novo Hamburgo Novo Hamburgo
varredura na relação cliente, comparando o atributo Ana Assis Brasil Porto alegre Novo Hamburgo
cidade_cliente com o atributo da relação obtida após a Beatriz Floriano Peixoto Novo Hamburgo Novo Hamburgo
Beatriz
5.4. Álgebra Relacional – operações adicionais
• Operação de Junção Natural: a junção natural ou natural join é uma operação binária que permite
combinar seleções e um produto cartesiano em uma só operação.
- Ex: encontrar todos os nomes de clientes que tenham um empréstimo no banco, bem como o total
emprestado.
Propriedades:
• Operação de Divisão: a divisão de duas relações R ÷ S, onde os atributos de S estão contidos nos
atributos de R, A(R) ⊆ A(S), resulta na relação T, onde A(T) = { A(R) – A(S) }, onde para cada tupla
t que aparece no resultado, os valores de t devem aparecer em R, combinando com cada tupla de S.
Esta operação é utilizada nas consultas em que se emprega a frase “para todos”;
S R
A1 A1 A2
a1 a1 b1
a2 a2 b1
a3 a3 b1
a4 b1
a1 b2
a3 b2
a2 b3
a3 b3
R ÷ S
a4 b3
A2
a1 b4
b1
a2 b4
b4
a3 b4
5.4. Álgebra Relacional – operações adicionais
- Ex: encontrar todos os clientes que tenham conta em todas as agências localizadas em
São Leopoldo.
conta agencia depositante
João
Pedro
SAL-1
SAL-1
π nome_cliente, nome_agencia(depositante conta) ÷
Francisco NOH-1
π nome_agencia(σcidade_agencia = “São Leopoldo”(agencia))
Maria POA-1
Paulo SAL-2
nome_cliente
José NOH-1
João
Ana POA-1
João SAL-2
5.4. Álgebra Relacional – operações adicionais
• Operação de Atribuição (Assignment Operation): trabalha de maneira similar à atribuição das
linguagens de programação. Representada por ←
π (E)
F1, F2, ..., Fn
Onde E é uma expressão em álgebra relacional e cada Fi são expressões aritméticas envolvendo
constantes e atributos no esquema de E.
- Ex: Dada a relação crédito, descobrir quanto cada cliente ainda pode utilizar
do seu crédito pessoal.
π (credito)
nome_cliente, limite_credito – credito_usado
credito
empregado trabalhador_integral
problema: os dados de rua e cidade do empregado Pedro foram perdidos, bem como os dados de agência
e salário foram perdidos da empregada Flávia.
solução: utilizar as operações de junções externas para evitar perda de informações, que podem ser:
5.5. Álgebra Relacional – operações estendidas
Junção externa a esquerda
empregado trabalhador_integral
A junção à esquerda pega todas as tuplas
nome_empregado rua cidade nome_agencia salario
da relação à esquerda que não encontraram
José João Goulart Novo Hamburgo NOH-1 5000
Ana Assis Brasil Porto Alegre
par entre as tuplas da relação à direita,
POA-1 4800
Maria João Pessoa Porto Alegre
preenchendo com “nulo” os valores não
POA-1 6500
Pedro Getúlio Vargas São Leopoldo
encontrados. Estas tuplas são adicionadas
Nulo Nulo
ao resultado da junção natural.
empregado trabalhador_integral
A junção à direita pega todas as tuplas da
nome_empregado rua cidade nome_agencia salario
relação à direita que não encontraram par
José João Goulart Novo Hamburgo NOH-1 5000
entre as tuplas da relação à esquerda,
Ana Assis Brasil Porto Alegre POA-1 4800
preenchendo com “nulo” os valores não
Maria João Pessoa Porto Alegre POA-1 6500
encontrados. Estas tuplas são adicionadas
Flávia Nulo Nulo SAL-1 3200
ao resultado da junção natural.
empregado trabalhador_integral
nome_empregado rua cidade nome_agencia salario
Ana Assis Brasil Porto Alegre POA-1 4800 A junção externa total faz ambas operações
Maria João Pessoa Porto Alegre POA-1 6500 acima.
Pedro Getúlio Vargas São Leopoldo Nulo Nulo
count-distinct nome_agencia
count-distinct nome_agencia (trabalhador_integral) 3
3200
min salario (trabalhador_integral)
6500
max salario (trabalhador_integral)
5.5. Álgebra Relacional – operações estendidas
• Em alguns casos, aplicam-se as funções agregadas não somente a um único conjunto de tuplas, mas a
diversos grupos, onde cada grupo é um conjunto de tuplas. Isto é realizado através da operação
chamada agrupamento.
trabalhador_integral
Ex: descobrir a soma total dos salários dos empregados nome_empregado nome_agencia salario
grupos, com base na agência as quais os empregados fazem parte e, Fernando POA-1 4000
nome_agencia g sum salario (trabalhador_integral) nome_agencia g sum salario min salario (trabalhador_integral)
r: é uma relação;
E: é uma consulta em álgebra relacional
conta ← conta – r2
5.5. Álgebra Relacional – modificações no BD conta
É expressa por: r ← r ∪ E, onde r é uma relação e E: é uma consulta SAL-1 0002 3000
i. os valores dos atributos das tuplas a inserir devem ser membros SAL-2 0007 3750
João 0001
Ex: inserir que o cliente Saulo tem 3800 na conta 010 da agência NOH-1.
Pedro 0002
Maria 0004
depositante ← depositante ∪ {(“Saulo”, 010)}
Paulo 0007
José 0006
Ex: inserir uma nova caderneta de poupança de 100 reais para Ana 0005
Ana
E-001
E-005
• atualização: permite a mudança de uma tupla sem mudar todos os valores dela. Para isso usa-se o
operador de projeção generalizada:
r← π F1, F2, ..., Fn (r), em que cada Fi é o i-ésimo atributo de “r” se o i-ésimo atributo não for atualizado,
ou, se o i-ésimo atributo for atualizado, então cada Fi é uma expressão envolvendo somente constantes e os
atributos de “r”, que dá novos valores a esses atributos.
Ex: As contas com saldo acima de 2500 recebem 10%, e os demais 5%.
conta ← π nome_agencia, numero_conta, saldo ← saldo * 1.1 (σ saldo > 2500 (conta)) ∪