Escolar Documentos
Profissional Documentos
Cultura Documentos
Algebra Relacional
Algebra Relacional
- Operaes primrias: operam sobre uma nica relao: select, project, rename. - Operaes binrias: operam sobre duas relaes: union, set difference, cartesian product.
O resultado da seleo
- podem ser usados comparaes do tipo: =,,,>,,< e os conectivos: (e) (ou) Operao PROJECT: denotada pela letra grega pi (), esta operao retorna a relao com somente os atributos selecionados, eliminando as linhas em duplicidade. Os atributos aparecem ao lado de pi, subscrito, e a relao aparece entre parnteses.
Ex: nome_agncia,saldo(agencia)
nome_agencia NOH-1 SAL-1 POA-1 SAL-2 cidade_agencia Novo Hamburgo So Leopoldo Porto Alegre So Leopoldo saldo 260050 455580 1250369 125588 agencia nome_agencia NOH-1 SAL-1 POA-1 SAL-2 saldo 260050 455580 1250369 125588
Operao UNION: considere a seguinte consulta: selecionar todos os nomes de clientes que tenham um emprstimo, uma conta ou ambos. Deve-se utilizar as relaes depositante e devedor.
nome_cliente(devedor) nome_cliente(depositante)
(depositante) (esto nas 2 relaes) (devedor)
Linhas eliminadas
nome_cliente(devedor) nome_cliente(depositante)
depositante nome_cliente Joo Pedro Francisco Maria Paulo Jos Ana numero_conta 0001 0002 0003 0004 0007 0006 0005 nome_client e Joo Ana nome_client e Joo Ana Helena E-001 E-005 E-008 devedor num_emprestimo
r s = r (r - s)
r r-s
r (r - s)
- Quantas e quais tuplas aparecero na relao (devedor x emprestimo) ? Se a relao (devedor) possui n tuplas e a relao emprstimo tem m tuplas, ento o produto cartesiano (devedor x emprstimo) tem n*m tuplas.
devedor x emprestimo nome_cliente Joo Joo Joo Ana Ana Ana Helena Helena Helena devedor.num_emprestimo E-001 E-001 E-001 E-005 E-005 E-005 E-008 E-008 E-008 nome_agencia SAL-1 POA-1 NOH-1 SAL-1 POA-1 NOH-1 SAL-1 POA-1 NOH-1 emprestimo.num_emprestimo E-001 E-005 E-008 E-001 E-005 E-008 E-001 E-005 E-008 total 40000 25400 5420 40000 25400 5420 40000 25400 5420
OPS !!!
Obs: Como a operao produto cartesiano associa todas as tuplas de emprstimos a todas as tuplas de devedor, ento existem emprstimos que esto 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_agncia = SAL-1 (devedor x emprstimo))
nome_client e Joo devedor.num_emprestimo E-001 nome_agencia SAL-1 emprestimo.num_emprestimo E-001 total 40000
cliente cidade_cliente So Leopoldo So Leopoldo Novo Hamburgo Porto Alegre So Leopoldo Novo Hamburgo Porto alegre Novo Hamburgo
x(E)
Ex: Desejamos o nome dos clientes que moram na mesma cidade de Francisco. Primeiro, necessrio descobrir em qual cidade Francisco mora, fazendo uma seleo: nome_cliente = Francisco(cliente), E depois uma projeo: cidade_cliente(nome_cliente = Francisco(cliente)) Para encontrar os outros clientes, necessrio fazer uma varredura na relao cliente, comparando o atributo cidade_cliente com o atributo da relao obtida aps a projeo anterior, ficando assim: nome_cliente(cliente.cidade_cliente = cid_francisco.cidade_cliente (cliente x
nome_cliente Joo Pedro Francisco Maria Paulo Jos Ana Beatriz
Ana Beatriz
nome_cliente Francisco
rua_cliente Getlio Vargas Getlio Vargas Olavo Bilac Joo Pessoa Ceclia Meireles Joo Goulart Assis Brasil Floriano Peixoto
cidade_cliente So Leopoldo So Leopoldo Novo Hamburgo Porto Alegre So Leopoldo Novo Hamburgo Porto alegre Novo Hamburgo
cidade_cliente Novo Hamburgo Novo Hamburgo Novo Hamburgo Novo Hamburgo Novo Hamburgo Novo Hamburgo Novo Hamburgo Novo Hamburgo
cid_francisco(
cidade_cliente
(nome_cliente = Francisco(cliente)))))
devedor.num_emprestimo = emprestimo.num_emprestimo
(devedor x emprestimo))
No entanto, possvel simplificar esta operao utilizando o smbolo da juno natural: A juno natural forma um produto cartesiano das duas relaes, e j executa uma seleo, fazendo a equivalncia dos atributos que aparecem em ambos os esquemas da relao, e por ltimo, remove os atributos em duplicidade.
emprstimo)
s=
RS(
Em que R S = {A1,A2,...,An} Propriedades: - a juno natural associativa, portanto: cliente conta depositante = (cliente conta) depositante = cliente s=rxs (conta depositante)
S A1 a1 a2 a3
R A1 a1 a2 a3 a4 a1 a3 a2 R A2 b1 b1 b1 b1 b2 b2 b3 b3 b3 b4 b4 b4
a3 a4 a1 a2 a3
A2 b1 b4
nome_agencia(cidade_agencia = So Leopoldo(agencia))
nome_agncia SAL-1 SAL-2 cidade_agncia So Leopoldo So Leopoldo saldo 455580 125588 nome_agncia SAL-1 SAL-2
nome_cliente, nome_agencia(depositante
nome_cliente Joo Pedro Francisco Maria Paulo Jos Ana Joo
conta)
nome_cliente, nome_agencia(depositante
conta)
nome_agencia(cidade_agencia = So Leopoldo(agencia))
nome_cliente Joo
(E)
Onde E uma expresso em lgebra relacional e cada Fi so expresses aritmticas envolvendo constantes e atributos no esquema de E. - Ex: Dada a relao crdito, descobrir quanto cada cliente ainda pode utilizar do seu crdito pessoal.
nome_cliente Jos Ana Pedro Maria Flvia limite_credito 4000 3200 1200 5800 3600
(credito)
credito credito_usado 2200 100 1500 5000 3600 nome_cliente Jos Ana Pedro Maria Flvia limite_credito - credito_usado 1800 3100 -300 800 0
Descobrir a rua, cidade, agncia e salrio de todos os empregados. Alternativa natural fazer uma seleo com uma juno natural:
trabalhador_integral)
salario 5000 4800 6500
problema: os dados de rua e cidade do empregado Pedro foram perdidos, bem como os dados de agncia e salrio foram perdidos da empregada Flvia. soluo: utilizar as operaes de junes externas para evitar perda de informaes, que podem ser:
trabalhador_integral
rua Joo Goulart Assis Brasil Joo Pessoa Getlio Vargas cidade Novo Hamburgo Porto Alegre Porto Alegre So Leopoldo nome_agencia NOH-1 POA-1 POA-1 Nulo salario 5000 4800 6500 Nulo
A juno esquerda pega todas as tuplas da relao esquerda que no encontraram par entre as tuplas da relao direita, preenchendo com nulo os valores no encontrados. Estas tuplas so adicionadas ao resultado da juno natural.
trabalhador_integral
rua Joo Goulart Assis Brasil Joo Pessoa Nulo cidade Novo Hamburgo Porto Alegre Porto Alegre Nulo nome_agencia NOH-1 POA-1 POA-1 SAL-1 salario 5000 4800 6500 3200
A juno direita pega todas as tuplas da relao direita que no encontraram par entre as tuplas da relao esquerda, preenchendo com nulo os valores no encontrados. Estas tuplas so adicionadas ao resultado da juno natural.
trabalhador_integral
rua Joo Goulart Assis Brasil Joo Pessoa Getlio Vargas Nulo cidade Novo Hamburgo Porto Alegre Porto Alegre So Leopoldo Nulo nome_agencia NOH-1 POA-1 POA-1 Nulo SAL-1 salario 5000 4800 6500 Nulo 3200
- funo sum: descobrir a soma total dos salrios de todos os empregados de tempo integral. sum
salario
(trabalhador_integral)
Flvia Maria
-funo count: descobrir o nmero de agncias existentes na tabela de tempo integral. count
nome_agencia
(trabalhador_integral)
count nome_agencia 4
count-distinct
nome_agencia
(trabalhador_integral)
count-distinct nome_agencia 3
(trabalhador_integral)
(trabalhador_integral)
(trabalhador_integral)
trabalhador_integral
nome_agencia
g sum
salario
(trabalhador_integral)
nome_agencia
g sum
salario
min
salario
(trabalhador_integral)
sum salario 8000 15300 4200 min salario 3000 4000 1000
- Formalmente:
E: uma expresso qualquer em lgebra relacional; Cada Gi constitui um atributo que ser agrupado; Cada Fi uma funo agregada; Cada Ai o nome de um abtributo;
nome_cliente = Joo
(conta)
cidade_agencia = So Leopoldo
(conta (r1)
agencia)
conta conta r2
conta saldo 1200 3000 4500 4000 1500 200 3750 1800
emprestimo)
(conta)
Ex: As contas com saldo acima de 2500 recebem 10%, e os demais 5%.
conta
(conta))
(conta))