Você está na página 1de 23

INSTITUTO DE EXATAS E TECNOLGICAS Curso de Cincia da Computao

BANCO DE DADOS aula 6 lgebra relacional -

professor: Juliano Varella de Carvalho

5.1. lgebra Relacional relaes de exemplo


conta nome_agencia SAL-1 SAL-1 NOH-1 POA-1 POA-1 NOH-1 SAL-2 SAL-2 numero_conta 0001 0002 0003 0004 0005 0006 0007 0008 saldo 1200 3000 4500 4000 1500 200 3750 1800 agencia nome_agencia NOH-1 SAL-1 POA-1 SAL-2 depositante nome_cliente Joo Pedro Francisco cliente nome Joo Pedro Francisco Maria Paulo Jos Ana Beatriz rua Getlio Vargas Getlio Vargas Olavo Bilac Joo Pessoa Ceclia Meireles Joo Goulart Assis Brasil Floriano Peixoto cidade So Leopoldo So Leopoldo Novo Hamburgo Porto Alegre So Leopoldo Novo Hamburgo Porto alegre Novo Hamburgo devedor nome_cliente Joo Ana Helena emprestimo nome_agencia SAL-1 POA-1 NOH-1 num_emprestimo E-001 E-005 E-008 total 40000 25400 5420 num_emprestimo E-001 E-005 E-008 Maria Paulo Jos Ana numero_conta 0001 0002 0003 0004 0007 0006 0005 cidade_agencia Novo Hamburgo So Leopoldo Porto Alegre So Leopoldo saldo 260050 455580 1250369 125588

5.2. lgebra Relacional conceitos


Linguagens de Consulta: linguagem por meio da qual os usurios obtm informaes do banco de dados. Podem ser: - procedurais: o usurio descreve uma seqncia de operaes para obter o resultado desejado; Ex: pascal, pl-sql, transact-sql, etc. - no procedurais: o usurio descreve a informao desejada, sem instruir como esta ser obtida. Ex: sql, QBE (Query by example), etc. lgebra Relacional: linguagem de consulta que consiste em um conjunto de operaes, tendo como entrada uma ou duas relaes e produzindo como resultado uma nova relao. Operaes mais importantes: select; project; Union; namely natural join assignment; set difference; cartesian product; rename; set intersection; division;

- Operaes primrias: operam sobre uma nica relao: select, project, rename. - Operaes binrias: operam sobre duas relaes: union, set difference, cartesian product.

5.3. lgebra Relacional operaes fundamentais


Operao SELECT: seleciona as tuplas que satisfaam um determinado predicado. A letra sigma representa a seleo, o predicado aparece subscrito a sigma, e a relao utilizada colocada entre parnteses. Ex: nome_agencia = SAL-1(conta) : seleciona as tuplas da relao conta cuja agncia igual a SAL-1.
nome_agencia numero_conta 0001 0002 saldo 1200 3000 SAL-1 SAL-1

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

5.3. lgebra Relacional operaes fundamentais


- Juntando operaes SELECT E PROJECT: pode-se unir operaes desde que elas tratem de relaes. nome_agencia,saldo(nome_agencia = SAL-1(conta) )
conta nome_agencia SAL-1 SAL-1 NOH-1 POA-1 POA-1 NOH-1 SAL-2 numero_conta 0001 0002 0003 0004 0005 0006 0007 saldo 1200 3000 4500 4000 1500 200 3750 nome_agencia SAL-1 SAL-1 numero_conta 0001 0002 saldo 1200 3000 nome_agencia SAL-1 SAL-1 saldo 1200 3000

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)

nome_cliente Joo Pedro Francisco Maria Paulo Jos Ana Helena

5.3. lgebra Relacional operaes fundamentais


- Uma operao UNION entre duas relaes r e s s possvel se: i. as relaes r e s tm o mesmo nmero de atributos; ii. os domnios dos i-simo atributo de r e o i-simo atributo de s devem ser os mesmos para todo i. Operao Diferena entre conjuntos: sendo r e s duas relaes, r-s tem como resultado o conjunto de tuplas que esto na relao r, mas no encontram-se na relao s. - Ex: selecionar todos os clientes que tem conta mas no tem emprstimo. nome_cliente(depositante) - nome_cliente(devedor)

nome_cliente Joo Pedro

Linhas eliminadas

Clientes com contas Mas sem emprstimos

Francisco Maria Paulo Jos Ana

5.4. lgebra Relacional operaes adicionais


Operao de Interseo de conjuntos: captura todas as tuplas que encontram-se em uma relao r, e que tambm encontram-se na relao s. - Ex: Selecionar os nomes de clientes que possuem uma conta e um emprstimo.

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)

5.3. lgebra Relacional operaes fundamentais


Operao Produto Cartesiano: permite combinar informaes de duas relaes quaisquer. Representado por r x s. Ex: Qual o produto cartesiano entre as relaes devedor e emprestimo. (devedor)x(emprestimo) = (nome_cliente, num_emprestimo, nome_agencia, num_emprestimo, total) Obs: Para evitar o problema da duplicidade de nomes de atributos insere-se o nome da relao antes do atributo: total) (nome_cliente, devedor.num_emprestimo, nome_agencia, emprestimo.num_emprestimo,

- 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

5.3. lgebra Relacional operaes fundamentais


- Agora, deve-se encontrar todos os nomes de clientes que tenham um emprstimo na agncia SAL-1, atravs da operao:
Apenas Joo fez emprstimo em SAL-1.
nome_client e Joo Ana Helena

nome_agncia = SAL-1(devedor x emprestimo)


devedor.num_emprestimo E-001 E-005 E-008 nome_agencia SAL-1 SAL-1 SAL-1 emprestimo.nm_emprestimo E-001 E-001 E-001 total 40000 40000 40000

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

nome_cliente(devedor.num_emprestimo = emprestimo.num_emprestimo (nome_agncia = SAL-1 (devedor x emprstimo)))


nome_client e Joo

5.3. lgebra Relacional operaes fundamentais


Operao Rename: representado pela letra grega rho (), permite dar um nome a uma determinada expresso. Assim, a expresso em lgebra relacional E abaixo tem por resultado uma expresso sob o nome x.
nome_cliente Joo Pedro Francisco Maria Paulo Jos rua_cliente Getlio Vargas Getlio Vargas Olavo Bilac Joo Pessoa Ceclia Meireles Joo Goulart Assis Brasil Floriano Peixoto

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 Olavo Bilac

cidade_cliente Novo Hamburgo

cidade_cliente Novo Hamburgo

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

nome_cliente Francisco Jos Beatriz

cid_francisco(

cidade_cliente

(nome_cliente = Francisco(cliente)))))

5.4. lgebra Relacional operaes adicionais


Operao de Juno Natural: a juno natural ou natural join uma operao binria que permite combinar selees e um produto cartesiano em uma s operao. - Ex: encontrar todos os nomes de clientes que tenham um emprstimo no banco, bem como o total emprestado. Utilizando apenas as operaes fundamentais, poderia ser resolvido assim:

nome_cliente, emprestimo.num_emprestimo, total(

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.

nome_cliente, num_emprestimo total(devedor

emprstimo)

nome_client e Joo Ana Helena

num_emprestimo E-001 E-005 E-008

total 40000 25400 5420

5.4. lgebra Relacional operaes adicionais


Formalizando: Sendo R e S dois esquemas de relao, ou seja, uma lista de atributos e r(R) e s(S) duas relaes, a juno natural de r e s (r s ) uma relao formalmente definida assim:

s=

RS(

r.A1=s.A1 r.A2=s.A2... r.An=s.An(r x s))

Em que R S = {A1,A2,...,An} Propriedades: - a juno natural associativa, portanto: cliente conta depositante = (cliente conta) depositante = cliente s=rxs (conta depositante)

- se r(R) e s(S) so relaes sem atributos comuns, ento r

5.4. lgebra Relacional operaes adicionais


Operao de Diviso: a diviso de duas relaes R S, onde os atributos de S esto contidos nos atributos de R, A(R) A(S), resulta na relao 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 operao utilizada nas consultas em que se emprega a frase para todos;

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

5.4. lgebra Relacional operaes adicionais


- Ex: encontrar todos os clientes que tenham conta em todas as agncias localizadas em So Leopoldo.
conta nome_agencia SAL-1 SAL-1 NOH-1 POA-1 POA-1 NOH-1 SAL-2 SAL-2 numero_conta 0001 0002 0003 0004 0005 0006 0007 0008 saldo 1200 3000 4500 4000 1500 200 3750 1800 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 depositante nome_cliente Joo Pedro Francisco Maria Paulo Jos Ana Joo numero_conta 0001 0002 0003 0004 0007 0006 0005 0008

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_agencia SAL-1 SAL-1 NOH-1 POA-1 SAL-2 NOH-1 POA-1 SAL-2

nome_cliente, nome_agencia(depositante

conta)

nome_agencia(cidade_agencia = So Leopoldo(agencia))

nome_cliente Joo

5.4. lgebra Relacional operaes adicionais


Operao de Atribuio (Assignment Operation): trabalha de maneira similar atribuio das linguagens de programao. Representada por - Atribui-se a relao resultante de uma operao direita de , a uma varivel temporria, esquerda, a qual poder ser utilizada em relaes subseqentes. - Ex: operao de diviso anterior poderia ser descrita como: temp1 temp2

nome_agencia(cidade_agencia = So Leopoldo(agencia)) nome_cliente, nome_agencia(depositante


conta)

resultado temp2 temp1

5.5. lgebra Relacional operaes estendidas


Projeo generalizada: estendem as projees, permitindo que operaes aritmticas sejam usadas nas projees.

F1, F2, ..., Fn

(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

nome_cliente, limite_credito credito_usado

(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

5.5. lgebra Relacional operaes estendidas


Juno externa (outer join): extenso da operao de join para resolver informaes omitidas. - Ex: Dadas as relaes a seguir com os seguintes esquemas: empregado(nome_empregado, rua, cidade) trabalhador_integral(nome_empregado, nome_agencia, salario)
empregado nome_empregado Jos Ana Pedro Maria rua Joo Goulart Assis Brasil Getlio Vargas Joo Pessoa cidade Novo Hamburgo Porto Alegre So Leopoldo Porto Alegre nome_empregado Jos Ana Flvia Maria trabalhador_integral nome_agencia NOH-1 POA-1 SAL-1 POA-1 salario 5000 4800 3200 6500

Descobrir a rua, cidade, agncia e salrio de todos os empregados. Alternativa natural fazer uma seleo com uma juno natural:

nome_empregado, rua, cidade, nome_agencia, salario(empregado

trabalhador_integral)
salario 5000 4800 6500

nome_empregado Jos Ana Maria

rua Joo Goulart Assis Brasil Joo Pessoa

cidade Novo Hamburgo Porto Alegre Porto Alegre

nome_agencia NOH-1 POA-1 POA-1

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:

5.5. lgebra Relacional operaes estendidas


Juno externa a esquerda
empregado
nome_empregado Jos Ana Maria Pedro

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.

Juno externa a direita


empregado
nome_empregado Jos Ana Maria Flvia

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.

Juno externa total


empregado
nome_empregado Jos Ana Maria Pedro Flvia

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

A juno externa total faz ambas operaes acima.

5.5. lgebra Relacional operaes estendidas


Funes agregadas: so aquelas que, quando aplicadas, tomam uma coleo de valores e retornam um valor simples como resultado.
trabalhador_integral

- funo sum: descobrir a soma total dos salrios de todos os empregados de tempo integral. sum
salario

nome_empregado Jos Ana

nome_agencia NOH-1 POA-1 SAL-1 POA-1

salario 5000 4800 3200 6500

(trabalhador_integral)

sum salario 14505

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

- funo avg: descobrir a mdia dos salrios. avg


salario

(trabalhador_integral)

avg salario 3626.25

- funo min: descobrir o menor salrio. min


salario

min salario 3200

(trabalhador_integral)

- funo max: descobrir o maior salrio. max


salario

max salario 6500

(trabalhador_integral)

5.5. lgebra Relacional operaes estendidas


Em alguns casos, aplicam-se as funes agregadas no somente a um nico conjunto de tuplas, mas a diversos grupos, onde cada grupo um conjunto de tuplas. Isto realizado atravs da operao chamada agrupamento. Ex: descobrir a soma total dos salrios dos empregados de tempo integral, por agncia. soluo: particionar a relao trabalhador_integral em grupos, com base na agncia as quais os empregados fazem parte e, por fim aplicar a funo agregada a cada um destes grupos.
nome_empregado Jos Ana Flvia Maria Fernando Beatriz Bruno nome_agencia NOH-1 POA-1 SAL-1 POA-1 POA-1 SAL-1 NOH-1 salario 5000 4800 3200 6500 4000 1000 3000

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

nome_agencia NOH-1 POA-1 SAL-1

sum salario 8000 15300 4200

nome_agencia NOH-1 POA-1 SAL-1

- Formalmente:

G1, G2, ..., Gn

g F1A1, F2A2, FmAm (E), onde:

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;

5.5. lgebra Relacional modificaes no BD


excluso: permite a excluso de tuplas inteiras de uma relao. expressa por: r r E, onde: r: uma relao; E: uma consulta em lgebra relacional Ex: excluir todos as contas do cliente Joo. conta conta -

nome_cliente = Joo

(conta)

Ex: excluir todas as contas das agncias localizadas em So Leopoldo. r1 r2

cidade_agencia = So Leopoldo

(conta (r1)

agencia)

nome_agencia, numero_conta, saldo

conta conta r2

5.5. lgebra Relacional modificaes no BD


insero: permite a insero de um conjunto de tuplas em uma relao. expressa por: r r E, onde r uma relao e E: uma consulta em lgebra relacional Obs: i. os valores dos atributos das tuplas a inserir devem ser membros do domnio dos atributos; ii. As tuplas inseridas devem ter o mesmo grau da relao. Ex: inserir que o cliente Saulo tem 3800 na conta 010 da agncia NOH-1. conta conta {(NOH-1, 010, 3800)} depositante depositante {(Saulo, 010)} Ex: inserir uma nova caderneta de poupana de 100 reais para todos os clientes da agncia SAL-1, sendo o nmero do emprstimo o mesmo nmero usado para esta conta poupana. r1 r2
devedor nome_client e Joo Ana Helena emprestimo nome_agencia SAL-1 POA-1 NOH-1 num_emprestim o E-001 E-005 E-008 total 40000 25400 5420 nome_agencia SAL-1 SAL-1 NOH-1 POA-1 POA-1 NOH-1 SAL-2 SAL-2 numero_conta 0001 0002 0003 0004 0005 0006 0007 0008 depositante nome_cliente Joo Pedro Francisco Maria Paulo Jos Ana

conta saldo 1200 3000 4500 4000 1500 200 3750 1800

numero_conta 0001 0002 0003 0004 0007 0006 0005

num_emprestimo E-001 E-005 E-008

cidade_agencia = SAL-1 (devedor nome_agencia, num_emprestimo (r1)

emprestimo)

conta conta (r2 x {(100)}) depositante depositante

nome_cliente, num_emprestimo (r1)

5.5. lgebra Relacional modificaes no BD


atualizao: permite a mudana de uma tupla sem mudar todos os valores dela. Para isso usa-se o operador de projeo generalizada: r F1, F2, ..., Fn (r), em que cada Fi o i-simo atributo de r se o i-simo atributo no for atualizado, ou, se o i-simo atributo for atualizado, ento cada Fi uma expresso envolvendo somente constantes e os atributos de r, que d novos valores a esses atributos. Ex: A taxa de juros aumentou e o saldo de todas as contas aumentou 5%. conta

nome_agencia, numero_conta, saldo saldo * 1.05

(conta)

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))

nome_agencia, numero_conta, saldo saldo * 1.05

saldo <= 2500

(conta))

Você também pode gostar