You are on page 1of 34

Banco de Dados

lgebra Relacional

Daniel Teixeira

lgebra Relacional
uma linguagem de consulta terica
Usurios no a usam diretamente.
muito complicada para ser usada
diretamente
Outras linguagens de consulta so traduzidas
em lgebra relacional

Operaes da lgebra Relacional


Operaes derivadas da teoria dos conjuntos
Unio
Interseo

Diferena

Produto Cartesiano

Operaes relacionais especiais


Seleo
Projeo
Juno (natural)

Operaes da lgebra Relacional


Unio
R U S: Obtm a unio das tuplas em R e S
Ilegal se R e S tm nmeros diferentes de
atributos

Operaes da lgebra Relacional


Diferena
R - S: obtm as tuplas em R que no esto
em S
Ilegal se R e S tm nmeros diferentes de
atributos

Operaes da lgebra Relacional


Interseo
R S: Obtm a interseo das tuplas de R
eS
Ilegal se R e S tm nmeros diferentes de
atributos

Operaes da lgebra Relacional


Seleo:
Seleciona todas as tuplas que satisfazem
condio de seleo de uma relao R

Operaes da lgebra Relacional


Projeo:
Produz uma nova relao com apenas
alguns atributos de R, removendo tuplas
duplicadas

Operaes da lgebra Relacional


Produto Cartesiano:
A relao resultante consiste de todas as
possveis tuplas resultantes da combinao
de duas tuplas, uma de cada relao
envolvida na operao

Operaes da lgebra Relacional


Juno:
A juno de R com S
(R x S) [ expresso de seleo]

Operaes da lgebra Relacional


Juno Natural:
Quando a condio de juno for a
igualdade do valor de um atributo comum
e o atributo comum aparecer s uma vez
no resultado

Operaes da lgebra Relacional

Operaes da lgebra Relacional


EMPREGADOS ( E )
enome

CPF

salrio

CPF_Supersisor

dnmero

Chico

1234

5000

9012

01

Maria

5678

6500

9012

02

Jos

9012

4000

NULL

03

PROJETOS ( P )

DEPARTAMENTO ( D )
dnome

dnmero

pnome

CPF_gerente

pnmero

dnmero

Qumica

01

1234

CLife

01

03

Fsica

02

5678

H2O

02

03

Biologia

03

9012

BBad

03

01

TRABALHA ( T )
CPF_Emp

pnmero

1234

03

9012

01

Consultas Bsicas em SQL


select < lista de atributos>
from < lista de nomes de relao>
where < condio de seleo> ;
select nome, idade, sexo, .
from Empregados, Passagens, Livros, ...
where <condio>;

Consultas Bsicas em SQL


(R1 x ... x Rm) [ <condio> ] [A1,...,An]

Produto cartesiano

Seleo

Projeo

Consultas Bsicas em SQL


Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

CPF_gerente

Liste todas informaes em E sobre


empregados com salrio R$ 1000.
select *
from E
where E.salrio = 1000;

dnmero

Consultas Bsicas em SQL


Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

CPF_gerente

Liste todas as informaes em D


select *
from D;
A clusula where opcional.

dnmero

Implementando Juno
Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

dnmero

CPF_gerente

Liste todos os empregados e o nome dos


seus departamentos
select enome, dnome
from E, D
where E.dnmero = D.dnmero;

Implementando Juno
Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

dnmero

CPF_gerente

Nome dos empregados do departamento de


Qumica e que tem um salrio < R$1000?
select enome
from E, D
where E.dnmero = D.dnmero AND
D.dnome = Qumica AND
salrio < 1000;

Implementando Juno
Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

dnmero

CPF_gerente

Nome dos empregados que ganham mais


que seu gerente?
select E1.enome
from E E1, E E2, D
where E1.dnmero = D.dnmero AND
D.CPF_gerente = E2.CPF AND
E2.salrio < E1.salrio;

Implementando Juno
Esquema Exemplo
E enome
CPF
salrio
D

dnome

dnmero

CPF_Supersisor

dnmero

CPF_gerente

Nome dos gerentes que ganham menos que


os seus empregados?
SQL no elimina tuplas duplicadas! Voc
deve requisitar explicitamente dizendo
select distinct.

Implementando Juno
Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

dnmero

CPF_gerente

Outer Join
Encontre o nome do departamento de cada
empregado. Devem constar inclusive os
empregados sem departamento.
select E.enome, D.dnome
from E, D
where E1.dnmero *= D.dnmero;

Implementando Juno
EMPREGADOS ( E )
enome
Chico
Maria
Jos
Renato

CPF
1234
5678
9012
50500

salrio
5000
6500
4000
7000

CPF_Supersisor
9012
9012
NULL
NULL

DEPARTAMENTO ( D )
dnome
Qumica
Fsica
Biologia

dnmero CPF_gerente
01
1234
02
5678
03
9012

dnmero
01
02
03
NULL
RESULTADO

enome
Chico
Maria
Jos
Renato

dnome
Qumica
Fsica
Biologia
NULL

Subconsultas
Testa membros de um conjunto:
IN
NOT IN
Verificao de Relaes Vazias:
EXISTS
NOT EXISTS
Comparao de Conjuntos: Subconsultas
introduzidas com um operador de
comparao ( =,<>, >, >=, <, <= ) seguida
por ANY ou ALL

Subconsultas
Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

dnmero

CPF_gerente

Quem est no mesmo departamento de


Vera?
select E2.enome
from E E1, E E2
where E1.dnmero = E2.dnmero AND
E1.enome = 'Vera';

Subconsultas
Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

dnmero

CPF_gerente

Quem est no mesmo departamento de


Vera?
select enome
from E
where E.dnmero IN
(select dnmero
from E
where enome = Vera);

Subconsultas
Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

dnmero

CPF_gerente

Nomes dos empregados que no tm


departamento?
select enome
from E
where NOT EXISTS
(select *
from D
where E.dnmero = dnmero);

Subconsultas
Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

CPF_gerente

> all --- Maior do que todos


Quem tem o maior salrio?
select enome
from E
where salrio >= all (select salrio
from E );

dnmero

Subconsultas
Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

dnmero

CPF_gerente

> any --- Maior do que ao menos um

Quem ganha mais do que algum no


departamento de Fsica?
select enome
from E
where salrio >= any (select salrio
from E, D
where D.dnome = 'Fsica' AND
E.dnmero = D.dnmero);

Ordenando Resultados
Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

dnmero

CPF_gerente

DESC --- ordem decrescente

Imprima E. Ordene as tuplas pelo nmero do


depto. Para cada depto, ordene do mais alto
para o mais baixo salrio. Se existir empate
de salario, use ordem alfabtica no nome.
select *
from E
order by dnmero, salrio DESC, enome;

Ordenando Resultados
EMPREGADOS ( E )
enome
Chico
Maria
Jos
Renato
Adriano

CPF
1234
5678
9012
50500
12121

salrio
5000
6500
4000
7000
4000

CPF_Supersisor
9012
9012
NULL
NULL
9012

dnmero
01
01
02
02
02

RESULTADO
enome
Maria
Chico
Renato
Adriano
Jos

CPF
5678
1234
50500
12121
9012

salrio
6500
5000
7000
4000
4000

CPF_Supersisor
9012
9012
NULL
9012
NULL

dnmero
01
01
02
02
02

Funes de Agregao
Esquema Exemplo
E enome
CPF
salrio
D

dnome

dnmero

CPF_Supersisor

dnmero

CPF_gerente

Na clusula select , pode-se usar:


avg(A), sum(A), min(A), max(A), count(A)

Funes de Agregao
Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

dnmero

CPF_gerente

Qual a mdia de salrio dos empregados


no departamento de Biologia?
select avg(salrio)
from E, D
where E.dnmero = D.dnmero AND
D.dnome = Biologia;

Funes de Agregao
Esquema Exemplo
enome
CPF
E
D

dnome

dnmero

salrio

CPF_Supersisor

dnmero

CPF_gerente

Quantos empregados trabalham em mais de


um departamento?
select count (distinct enome)
from E E1
where enome in (select E2.enome
from E E2
where E2.enome = E1.enome AND
E2.dno != E1.dno);

You might also like