Sie sind auf Seite 1von 108

Modelo Relacional e a Álgebra Relacional

Maria Salete Marcon Gomes Vaz


Modelo Relacional
Estrutura de Banco de Dados Relacional

Operações Fundamentais da Álgebra Relacional

Operações Adicionais da Álgebra Relacional

Operações Estendidas da Álgebra Relacional

Valores Nulos

Modificação do Banco de Dados

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 2


Modelo Relacional

Definido por E. F. Cood em 1970


Grande aceitação comercial a partir de meados da década de
1980

Razões da grande aceitação:


Simplicidade dos conceitos básicos
Poder dos operadores de manipulação

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 3


Modelo Relacional

Operadores
União
Estruturas
Interseção
Relação Restrições
Diferença
Atributo Integridade de Domínio
Seleção
Domínio Integridade de Entidade
Projeção
Chave Primária Integridade Referencial
Junção
Chave Estrangeira
Divisão

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 4


Estrutura Básica
Dados os conjuntos D1, D2, …. Dn uma relação r é um subconjunto de D1 x D2 x …
x Dn e corresponde a um conjunto de n-tuplas (a1, a2, …, an) onde cada ai ∈ Di
Atributo
Explicita o papel de um domínio em uma relação
Os atributos de uma mesma relação devem ser diferentes
Um (ou vários) atributos identificam uma relação: Chave Primária
Chave Candidata
Uma relação pode ter mais de um atributo como identificador único
Um deles é chave primária e os outros são chaves candidatas
Chave Estrangeira
Um atributo que corresponde a uma chave primária em outra relação
Tupla
É uma n-upla <a1, a2, ..., an> de uma relação R(D1, ..., Dn) tal que ai pertence a
Di (1 <= i <= n)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 5


Modelo Relacional
Chave
Atributos
Primária

Num-pil Nome CPF Endereço


PILOTO

0101 João 12345 Recife


0035 José 234567 Castro
Tuplas .
.
.
0987 Pedro 567489 Curitiba

Chave Candidata

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 6


Modelo Relacional

Chave
Estrangeira

Num-vôo ... Num-pil ...


VÔO

.
.
.
330 ... 0101 ...
.
.
.
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 7
Tipos de Atributos
Domínio
D1, D2, ..., Dn são Domínios
n é o grau de R
representa o conjunto de valores atômicos admissíveis dos atributos
Definição: todo valor de uma n-upla pertence a D
Manipulação: 2 valores só podem ser comparados se definidos
sobre o mesmo domínio D.
Exemplo: D-FONE: inteiro dupla: <d , d >, grau = 2
1 2
tripla: <d1, d2, d3>, grau = 3
...
n­upla: < d1, d2, ... dn>, grau = n

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 8


Tipos de Atributos
Valores de Atributo são (normalmente) requeridos para ser
atômicos; isto é, indivisível
Nota 1: Valores de atributo multivalorados são não atômicos
Nota 2: Valores de atributo composto são não atômicos

O valor especial nulo é um membro de todo domínio

O valor nulo causa complicações na definição de muitas operações

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 9


Esquema de Relação
A1, A2, …, An são atributos

R = (A1, A2, …, An ) é um esquema de relação


Exemplo:
Esquema_Cliente = (código, nome, endereço)

r(R) é uma relação no esquema relação R


Exemplo:
Cliente (Esquema_Cliente)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 10


Modelo Relacional
Esquema Relacional
Conjunto de relações semanticamente ligadas por seus domínios de
definição
O conceito de relação permite ao mesmo tempo representar:
uma entidade
uma relação semântica (relacionamento)
Restrições de Integridade
De Domínio: diz respeito ao controle sintático e semântico de um dado
e faz referência ao tipo de definição do domínio.
De Entidade: valores de chave primária devem ser únicos e não nulos
Referencial: valores de um atributo chave estrangeira e os valores do
atributo chave primária devem ser correspondentes

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 11


Relações são não ordenadas
■ Ordem das tuplas é irrelevante ­ podem ser armazenadas em uma ordem arbitrária
■ Exemplo: relação Conta com tuplas não ordenadas

numc Coda saldo


A-101 03 500
A-215 01 700
A-102 02 400
A-305 04 350
A-201 03 900
A-222 01 700
A-217 02 750

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 12


Banco de Dados
Um banco de dados consiste de múltiplas relações
Informação a respeito de um empreendimento é dividido em partes, com cada relação
armazenando uma parte da informação

Conta: armazena informação a respeito de contas


Cliente_Conta: armazena informação a respeito dos clientes e sua(s) conta(s)
Cliente: armazena informação a respeito de clientes

Armazena toda informação como uma simples relação tal como


Cliente_Conta(numc, saldo, codc, ..)
resulta em
Repetição de informação
Por exemplo, dois clientes podem ser proprietários de uma conta
A necessidade de valores nulos
Por exemplo: representa um cliente sem uma conta
Teoria de normalização trata como projetar esquemas relacionais

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 13


Relações Cliente e Cliente_Conta
Cliente Cliente_Conta

codc nome codc numc


01 Salete 01 A-215
02 José 02 A-102
03 Francisco 03 A-305
04 Ronaldo 04 A-201
05 Marise 05 A-222
06 Rafaela 06 A-217
07 Sandra 07 A-215
08 Renata 08 A-101

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 14


Dado K ⊆ R
Chaves
K é uma superchave de R se valores para K são suficientes para identificar
uma única tupla de cada relação possível r(R)
por “possível r ” significa que uma relação r que pode existir na
aplicação modelada
Exemplo: {codc,numc} e
{codc}
são ambas superchaves de Cliente, se dois clientes não ter o mesmo
código
K é uma chave candidata se K é mínima
Exemplo: {cpf} é uma chave candidata para Cliente, visto que é uma
superchave (assumindo que dois cliente não podem ter o mesmo cpf), e
nenhum subconjunto é uma superchave
Chave Primária

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 15


Linguagens de Consulta
Linguagem na qual usuários requerem informações de um banco de
dados

Categorias de linguagens
Procedural
Não-procedural ou declarativa

Linguagens “Puras”:
Álgebra Relacional
Cálculo Relacional de Tuplas
Cálculo Relacional de Domínio

Linguagens puras formam a base das linguagens de consulta que as


pessoas utilizam

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 16


Álgebra Relacional
Proposta por Ed. Codd
Baseada na Teoria dos Conjuntos
É o fundamento teórico da Linguagem SQL

Operadores
- Primários (necessitam de uma única relação)
- Binários (necessitam de duas relações)
Operadores Fundamentais
Primários: Projeção, Seleção e Renomeação
Binários: Diferença, Produto e União
Operadores Adicionais - Binários
- Interseção
- Junção
- Divisão

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 17


Álgebra Relacional
Linguagens Procedurais
Seis operadores básicos
Seleção: σ
Projeção: ∏
União: ∪
Diferença: –
Produto Cartesiano: x
Renomeação: ρ
Os operadores atuam em uma ou duas relações como entradas e
produz uma nova relação com resultado

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 18


Operação Seleção – Exemplo
■ Relação r
A B C D

α α 1 7
α β 5 7
β β 12 3
β β 23 10

σA=B ^ D > 5 (r)
A B C D

α α 1 7
β β 23 10

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 19


Notação: σ p(r)
Operação Seleção
p é chamado predicado de seleção
Definida como:

σp(r) = {t | t ∈ r ∧ p(t)}

onde p é uma fórmula em cálculo proposicional consistindo de


termos conectados por : ∧ (and), ∨ (or), ¬ (not)
Cada termo é:
<atributo> op <atributo> ou <constante>
onde op é: =, ≠, >, ≥. <. ≤

Exemplo de seleção:
σ coda= 01 (Conta)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 20


Operação Seleção
Quais as cidades do Paraná?
Select *
σ cod_uf = ‘PR’ (cidade) From cidade
Where cod_uf = ‘PR’

Qual o nome das cidades do Paraná?

¶ nome (σ cod_uf = ‘PR’ (cidade) )


Select nome From cidade Where cod_uf = ‘PR’

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 21


Operação Seleção
Quais as cidades do Paraná?
select *
σ cod_uf = ‘PR’ (cidade) from cidade
where cod_uf = ‘PR’

Qual o nome das cidades do Paraná?

¶ nome (σ cod_uf = ‘PR’ (cidade) )


Select nome from cidade where cod_uf = ‘PR’
Operação Projeção
Relação r:
A B C

α 10 1
α 20 1
β 30 1
β 40 2

∏A,C (r) A C A C

α 1 α 1
α 1 = β 1
β 1 β 2
β 2

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 23


Operação Projeção
∏ A1 , A2 ,, Ak (r )
Notação:

onde A1, A2 são nomes de atributos e r é um nome de relação


O resultado é definido com a relação de k colunas obtidas pela
exclusão de colunas que não estão listadas
Linhas duplicadas são removidas do resultado, visto que relações
são conjuntos
Exemplo: Para eliminar o atributo coda de Conta

∏codc, saldo (Conta)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 24


Operação Projeção
Define quais os atributos (colunas) de uma relação são desejáveis

Exemplo 1: Qual o código das pessoas?


∏cod (pessoa) Select cod from pessoa;

Exemplo 2: Qual o código e nome das pessoas?

∏cod, nome (pessoa)

Select cod, nome from pessoa;

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 25


Operações Seleção e Projeção
Projeção

Num-pil Nome CPF Endereço


PILOTO

0101 João 12345 Recife

Seleção 0035 José 234567 Castro


.
.
.
0987 Pedro 567489 Curitiba

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 26


■ r ∪ s:
Operação União
Relações r, s: A B
A B
A B
α 1
α 1
α 2 α 2
α 2
β 3 β 1
β 1
s β 3
r
1 AA BA CA
2 AB BB CB
3 AC BC CC 1 AA BA CA
4 AD BD DD 2 AB BB CB A união de duas relações r
UNIÃO 3 AC BC CC e s é composta de
1 AA BA CA
4 AD BD DD
todas as linhas que
2 AE BE CE
2 AE BE CE
3 AF BF CF
pertencem a r ou s
3 AF BF CF
4 AG BG DG
4 AG BG DG

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 27


Operação União
Notação: r ∪ s
Definida como:
r ∪ s = {t | t ∈ r ∨ t ∈ s}
Para r ∪ s ser válida:
1. r, s deve ter a mesma aridade - mesmo número de atributos
2. Os domínios de atributos devem ser compatíveis
Exemplo: 2n colunas de r tem o mesmo tipo de valores com
as 2nd colunas de s
Exemplo: para obter todos os clientes, com uma conta ou um
empréstimo

∏ codc (Cliente_Conta) ∪ ∏ codc (Cliente_Empréstimo)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 28


Operação Diferença
Relações r, s:
A B A B

α 1 α 2
α 2 β 3
β 1 s
r

A diferença entre de duas


A B relações r e s é composta de
todas as linhas que
α 1 pertencem a r e não
pertencem a s
β 1

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 29


Operação Diferença
Notação r – s
Definida como:
r – s = {t | t ∈ r ∧ t ∉ s}

Operação diferença deve ocorrer entre relações compatíveis


r e s devem ter a mesma aridade
Domínio dos atributos de r e s devem ser compatíveis

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 30


Operação Diferença
R1 R2 R1 - R2 = {4}
R2 - R1 = {2,6}
1
1
2
3
3
4
6 1 AA BA CA
2 AB BB CB
3 AC BC CC
4 AD BD DD
2 AB BB CB
DIF E R E N Ç A 3 AC BC CC
1 AA BA CA 4 AD BD DD
2 AE BE CE
3 AF BF CF
4 AG BG DG
Operação Diferença
Obter todas as pessoas que nunca locaram qualquer
veículo

¶ cod_pessoa (pessoa) ­ ¶ cod_cliente (locacao)

Select cod_pessoa from pessoa


minus
Select cod_cliente from locacao;

Select cod_pessoa From pessoa


Where cod_pessoa not in (Select cod_cliente From locacao);
Operação Produto Cartesiano
■ Relações r, s:
A B C D E

α 1 α 10 a
β 10 a
β 2 β 20 b
r γ 10 b
s
■ r x s:
A B C D E
α 1 α 10 a
α 1 β  10 a
α 1 β 20 b
α 1 γ 10 b
β 2 α 10 a
β 2 β 10 a
β 2 β 20 b
β 2 γ 10 b

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 33


Operação Produto Cartesiano
Notação r x s

Definida como:
r x s = {t q | t ∈ r ∧ q ∈ s}

Assume que atributos de r(R) e s(S) são disjuntos


R∩ S=∅

Se atributos de r(R) e s(S) não são disjuntos então a


renomeação deve ser usada

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 34


Operação Produto Cartesiano
R1 R2 R3

1 1 A
A 1 B
2 X
B 1 C
3
C 2 A
4
2 B
2 C
. .
. .
. .
Operação Produto Cartesiano
Obter o produto cartesiano entre as relações VEÍCULO e MODELO

Veículo Modelo
placa cod_modelo
cod_modelo (FK) cod_grupo (FK)
data_aquisicao descricao
chassis
cod_filial (FK)
data_entrada

Veículo(placa,cod_modelo,data_aquisicao,chassis,codfilial,data_entrada)
Modelo(cod_modelo, cod_grupo,descricao)

veiculo X modelo Select *


From veiculo, modelo;
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 36
Operação Produto Cartesiano
Criar uma relação com o produto cartesiano entre as relações
VEÍCULO e MODELO onde o veiculo.cod_modelo=10
Veículo Modelo
placa cod_modelo
cod_modelo (FK) cod_grupo (FK)
data_aquisicao descricao
chassis
cod_filial (FK)
data_entrada

σ veiculo.cod_modelo=10 (veiculo x modelo)


Select * From veiculo, modelo where veiculo.cod_modelo=10

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 37


Composição de Operações
Pode construir expressões usando múltiplas operações
Exemplo: σA=C(r x s)
rxs σA=C(r x s)

A B C D E
A B C D E
α 1 α 10 a
α 1 β  10 a α 1 α 10 a
α 1 β 20 b β 2 β 10 a
α 1 γ  10 b β 2 β 20 b
β 2 α 10 a
β 2 β 10 a
β 2 β 20 b
β 2 γ 10 b

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 38


Operação de Renomeação
Permite nomear e referenciar os resultados da expressão da álgebra
relacional
Permite referenciar uma relação por mais que um nome
Exemplo:
ρ x (E)

retorna a expressão E de nome X


Se uma expressão da álgebra relacional E tem aridade n, então
ρx ( A ,A
1 2 ,..., An ) (E )

retorna o resultado da expressão E de nome X, e com os


atributos renomeados A1 , A2 , …., An .

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 39


Operação Renomeação
Criar uma relação com todas as colunas da tabela UF
ρ Unidade_Federacao(descricao) (¶ nome (UF))

Criar uma relação com descrição, diária e 70% da diária


ρ Tabela_Preco(grupo,valor_base,valor_desconto)(¶descrição,diária,diária * 0.7 (grupo))

Select descricao grupo, diaria valor_base,


(diaria * 0.7) valor_desconto
From Grupo Tabela_Preco;

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 40


Aplicação Exemplo
Cidade(codcid,nome)

Agência (coda,nome, caixa,codcid)

Cliente (codc,nome)

Conta (numc, coda, saldo)

Empréstimo (nume, coda, saldo)

Cliente_Conta (codc, numc)

Cliente_Empréstimo (codc, nume)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 41


Consultas Exemplos

Empréstimo (nume, coda, saldo)

Obter todos os empréstimos com saldo acima de R$1200

σsaldo > 1200 (Empréstimo)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 42


Consultas Exemplos

Empréstimo (nume, coda, saldo)

■ Obter o número dos empréstimos com saldo acima de 
R$1200
                     
∏nume (σsaldo > 1200 (Empréstimo))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 43


Consultas Exemplos

Cliente_Conta (codc, numc)


Cliente_Empréstimo (codc, nume)

Obter os códigos de todos os clientes que tem um empréstimo, uma


conta ou ambos, de um banco
∏ codc (Cliente_Empréstimo) ∪ ∏ codc (Cliente_Conta)

Em SQL:
Select codc from Cliente_Empréstimo UNION
      Select codc from Cliente_Conta;

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 44


Consultas Exemplo
Empréstimo (nume, coda, saldo)
Cliente_Empréstimo (codc, nume)
Obter o código de todos os clientes que tem um empréstimo na
agência 03.
∏codc (σcoda=03 (σCliente_Emprestimo.nume = 
Empréstimo.nume(Cliente_Empréstimo x Empréstimo)))

∏codc (σCliente_Emprestimo.nume = Empréstimo.nume ∧

coda=03 (Cliente_Empréstimo x Empréstimo))

Select codc from Cliente_Empréstimo, Empréstimo Where 
Cliente_Empréstimo.nume = Empréstimo.nume AND codc = 03;
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 45
Consultas Exemplo
Empréstimo (nume, coda, saldo)
Cliente_Conta (codc, numc)
Cliente_Empréstimo (codc, nume)
■  Obter os códigos de todos os clientes que tem um empréstimo na 
agência 03, mas não tem uma conta em qualquer agência do banco
∏codc (σcoda = 03 (σCliente_Empréstimo.nume = Empréstimo.nume 

(Cliente_Empréstimo x Empréstimo)))  –  ∏codc(Cliente_Conta)

Em SQL: (Select codc from Cliente_Empréstimo, Empréstimo where
     Cliente_Empréstimo.nume = Empréstimo.nume AND coda = 03)         
     Minus (Select codc from Cliente_Conta)

   Select codc from Cliente_Empréstimo, Empréstimo Where
     Cliente_Empréstimo.nume = Empréstimo.nume AND
     coda = 03 AND codc not in (Select codc from Cliente_Conta);
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 46
Consultas Exemplo
Emprestimo (nume, coda,saldo)
Cliente_Emprestimo (codc, nume)
Obter os códigos de todos os clientes que tem um empréstimo na agência
03
● Consulta 1

  ∏codc (σcoda = 03 (σCliente_Emprestimo.nume = Emprestimo.nume 
(Cliente_Emprestimo x Emprestimo)))

Select codc from Cliente_Emprestimo, Emprestimo


Where Cliente_Emprestimo.nume = Emprestimo.nume and
coda = 03;

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 47


Consultas Exemplo
Emprestimo (nume, coda,saldo)
Cliente_Emprestimo (codc, nume)
Obter os códigos de todos os clientes que tem um empréstimo na agência
03

●  Consulta 2

 ∏codc (σEmprestimo.nume = Cliente_Emprestimo.nume (

             (σcoda = 03 (ρEmp (Emprestimo))) x  Cliente_Emprestimo))

Select codc from


(Select * from Emprestimo where coda = 03) Emp, Cliente_Emprestimo
Where emp.nume = Cliente_Emprestimo.nume;

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 48


Consultas Exemplo
Conta (numc, coda, saldo)
Obter o maior saldo de conta
Estratégia:
Obter aqueles saldos que não são os maiores
Renomear a relação Conta como d, assim podemos comparar cada
saldo da conta com todos os outros
Usar operação diferença para obter os saldos das contas que não foram
encontrados no passo anterior
A consulta é:
∏saldo(Conta) ­ ∏Conta.saldo
    (σConta.saldo < d.saldo (Conta x ρd (Conta)))
Select saldo from Conta minus
Select Conta.saldo from Conta, Conta d where Conta.saldo < d.saldo;

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 49


Exercícios
Cidade(codc,nome)
Funcionário (codf, nome, rua,numero,codc)
Trabalha(codf,code,salario)
Empresa(code,nome,ender)
Gerencia(codf,codg)
Encontre os nomes de todos os funcionários que moram na mesma
cidade e na rua de ‘Salete’
∏Funcionario.nome (σFuncionário.rua = Endereco.rua ∧ Funcionario.codc. = Endereco.codc 
(Funcionario x ρendereco(rua,codc) (∏Funcionario.rua,Funcionario.codc(σnome.= ‘Salete’ 
(Funcionário)))
Select funcionario.nome from
(Select funcionario.rua, funcionario.codc from funcionario where
funcionario.nome = ‘Salete’) endereço, funcionario
Where endereço.codc = funcionario.codc and
endereço.rua = funcionario.rua;

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 50


Exercícios
Cidade(codc,nome)
Funcionário (codf, nome, rua,numero,codc)
Trabalha(codf,code,salario)
Empresa(code,nome,ender)
Gerencia(codf,codg)
Encontre os códigos de todos os funcionários nesse banco de dados
que não trabalham para a “UNINORTE”
∏codf(Funcionário) ­ ∏Trabalha.codf

    (σEmpresa.code. = Trabalha.code ∧ Empresa.nome. = ‘UNINORTE’ 

(Trabalha x Empresa))
Select funcionario.codf from Funcionario minus
Select trabalha.codf from Empresa, Trabalha
Where Empresa.code = Trabalha.code and Empresa.nome = ‘UNINORTE’;

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 51


Exercícios
Produto(cod_produto,descrição,preço,cod_categoria)
Categoria(cod_categoria,descrição)
Estoque(cod_estoque,qtde,qtde_mínima,qtde_máxima,cod_deposito,cod_produto)
Depósito(cod_deposito,nome)

Selecione os produtos, cuja categoria é 7.


σ categoria_cod = 7 (produto) 
2. Selecione os produtos com preço maior que 100.
σ preco > 100 (produto)

3. Selecione os produtos no estoque que possuem a quantidade inferior


a quantidade mínima.
σ qtde < qtde_minima (estoque)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 52


Exercícios
Produto(cod_produto,descrição,preço,cod_categoria)
Categoria(cod_categoria,descrição)
Estoque(cod_estoque,qtde,qtde_mínima,qtde_máxima,cod_deposito,cod_produto)
Depósito(cod_deposito,nome)

4. Apresente uma lista com os atributos descrição e preço de todos os


produtos.
Π descricao, preco (produto)

5. Liste apenas o nome dos depósitos.


Π nome (deposito)

6. Mostre o nome e o preço de todos os produtos com o preço maior ou


igual a 100.
Π descricao, preco (σ preco ≥ 100 (produto))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 53


Exercícios
Produto(cod_produto,descrição,preço,cod_categoria)
Categoria(cod_categoria,descrição)
Estoque(cod_estoque,qtde,qtde_mínima,qtde_máxima,cod_deposito,cod_produto)
Depósito(cod_deposito,nome)

7. Selecione todos os produtos da categoria “ELETRONICOS”.


σ categoria.descricao = “ELETRONICOS” ^ categoria.cod_categoria = produto.cod_categoria (produto ×
categoria)

8. Liste a descrição do produto, a quantidade e a quantidade mínima


de todos os produtos que possuem a quantidade mínima menor que
a quantidade.
Π descricao, qtde, qtde_minima (σqtde > qtde_minima ^ produto.cod_produto = estoque.cod_produto (produto
× estoque))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 54


Exercícios
Produto(cod_produto,descrição,preço,cod_categoria)
Categoria(cod_categoria,descrição)
Estoque(cod_estoque,qtde,qtde_mínima,qtde_máxima,cod_deposito,cod_produto)
Depósito(cod_deposito,nome)

9. Selecione todos os produtos que estão no depósito de nome


“CENTRO”.
σ nome = “CENTRO” ^ deposito.cod_deposito = estoque.cod_deposito (deposito × estoque)

10. Selecione a descrição dos produtos que estão no depósito de


nome “CENTRO”.
Π decrição σProduto.cod_produto = Centro.cod_produto(Produto X ρ Centro(cod_produto)(Πcodp σ nome =
“CENTRO” ^ deposito.cod_deposito = estoque.cod_deposito
(deposito × estoque)))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 55


Exercícios
Produto(cod_produto,descrição,preço,cod_categoria)
Categoria(cod_categoria,descrição)
Estoque(cod_estoque,qtde,qtde_mínima,qtde_máxima,cod_deposito,cod_produto)
Depósito(cod_deposito,nome)

11. Faça uma lista com a descrição e os preços de todos os produtos,


cujo preço seja igual ao do produto com código 4.
Π descricao, produto.preco (σproduto.preco = produto2.preco (produto × (Π preco (σ cod = 4 (ρ
produto2
(produto))))))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 56


Definição Formal
Uma expressão base na álgebra relacional consiste de:
Uma relação no banco de dados
Uma relação constante
Dadas as expressões E1 e E2 da álgebra relacional, as expressões seguintes são
todas da álgebra relacional:

E1 ∪ E2

E1 – E2

E1 x E2

σp (E1), P é um predicado de atributos em E1

∏s(E1), S é uma lista consistindo dos mesmos atributos em E1

ρ x (E1), x é o novo nome para o resultado de E1


2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 57
Operações Adicionais

Não adicionam quaisquer poderes a álgebra relacional

Simplificam consultas comuns

Operações

Interseção
Junção Natural
Divisão
Atribuição

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 58


Operação Interseção
Notação: r ∩ s

Definida como:

r∩s={t|t∈r∧t∈s}

Assume:
r, s tem a mesma aridade
atributos de r e s são compatíveis

Nota: r ∩ s = r – (r – s)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 59


Operação Interseção
Relações r, s:
Linhas que estejam em
A       B A       B ambas as tabelas
α 1 α 2
α 2 β 3
β 1

r s
r∩s 1 AA BA CA
2 AB BB CB
3 AC BC CC

A       B 4 AD BD DD
1 AA BA CA
INTERSEÇÃO
α      2 1
2
AA BA CA
AE BE CE
3 AF BF CF
4 AG BG DG

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 60


Operação Interseção
Obter o código de todos os clientes que tem alguma locação e que foram
motoristas para qualquer locação

¶ cod_motorista (locacao) ∩ ¶ cod_cliente (locacao)

Select cod_motorista
From locacao
Intersect
(Select cod_motorista
From locacao)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 61


Consulta Exemplo

Cliente_Conta (codc, numc)


Cliente_Empréstimo (codc, nume)

■ Obter os códigos de todos os clientes que tem um empréstimo e 
uma conta no banco
∏ codc (Cliente_Empréstimo) ∩ ∏ codc (Cliente_Conta)

Em SQL:
Select codc from Cliente_Empréstimo INTERSECT
      Select codc from Cliente_Conta;

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 62


Operação Junção Natural
■    Notação:  r     s
Dados r e s serem relações em esquemas R e S respectivamente.
Então, r s é uma relação no esquema R ∪ S obtida como segue:

Considerar que cada par de tuplas tr de r e ts de s

Se tr e ts tem o mesmo valor em cada um dos atributos em R ∩ S,


adicionar um tupla t para o resultado, onde

t tem o mesmo valor como tr em r

t tem o mesmo valor como ts em s


Exemplo:
R = (A, B, C, D) S = (E, B, D)
Resulta o esquema = (A, B, C, D, E)
r s é definida como:
∏ σ
( @ Profa. Dra.∧Maria Salete Marcon
2006 (r x Gomes
s)) Vaz 63
Operação Junção Natural
Relações r, s: ■ r     s

A B C D B D E A B C D E

α 1 α a 1 a α α 1 α a α
β 2 γ a 3 a β α 1 α a γ
γ 4 β b 1 a γ α 1 γ a α
α 1 γ a 2 b δ α 1 γ a γ
δ 2 β b 3 b ∈ δ 2 β b δ
r s
JUNÇÃO
1 AA BA CA 1 AA BA CA
2 AB BB CB 2 AE BE CE
3 AC BC CC 3 AF BF CF
4 AD BD DD 4 AG BG DG

1 AA BA CA 1 AA BA CA
2 AB BB CB 2 AE BE CE
3 AC BC CC 3 AF BF CF
4 AD BD DD 4 AG BG DG

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 64


Operação Junção Natural
Criar uma relação com nome UF e nome cidade


uf.nome,cidade.nome (σuf.cod_uf = cidade.cod_uf (UF x Cidade))

¶ uf.nome,cidade.nome ( UF ⋈ Cidade )
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 65
Operação Divisão
Notação: r÷s
Adaptou as consultas que incluem a “for all”.
Dadas as relações r e s nos esquemas R e S respectivamente onde
R = (A1, …, Am , B1, …, Bn )
S = (B1, …, Bn)
O resultado de r ÷ s é uma relação no esquema
R – S = (A1, …, Am)

r ÷ s = { t | t ∈ ∏ R-S (r) ∧ ∀ u ∈ s ( tu ∈ r ) }
onde tu significa a concatenação de tuplas t e u para produzir uma
tupla simples

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 66


■ Relações r, s:
Operação Divisão
A B B
α 1
1
α 2
α 3 2
β 1 s
γ 1
δ 1
δ 3
A divisão da relação r pela
δ 4 relação s é composta
∈ 6 pelas linhas de r que estão
∈ 1
β 2
ligadas a todas as linha de s.
■ r ÷ s: A r

α
β

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 67


■ Relações r, s:
Operação Divisão
■ r ÷ s:
A B C D E D E
A B C
α a α a 1 a 1
α a γ a 1 b 1 α a γ
α a γ b 1 γ a γ
β a γ a 1 s
β a γ b 3
γ a γ a 1
γ a γ b 1
γ a β b 1
1 A
2 B

r 3
4
C
D
A

DIVISÃO B
C
1
2
3

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 68


Operação Divisão
Propriedade
Dada q = r ÷ s
Então q é a relação mais extensa satisfazendo q x s ⊆ r
Definição em termos da operação básica da álgebra
Dado r(R) e s(S) ser relações, e dado S ⊆ R
r ÷ s = ∏R-S (r ) – ∏R-S ( ( ∏R-S (r ) x s ) – ∏R-S,S(r ))

Ver por que


∏R-S,S (r) simplesmente atributos reordenados de r

∏R-S (∏R-S (r ) x s ) – ∏R-S,S(r) ) dadas essas tuplas t em

∏R-S (r ) tal que para alguma tupla u ∈ s, tu ∉ r.

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 69


Operação Divisão
Quais os pilotos que conduzem todos os aviões da companhia?

Piloto Avião

V Avião R Piloto
0020 101
0020 105 101 0010
0010 101 104
105
0010 104 103
0010 105
0010 103
0015 103 Divisor
0015 104

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 70


Operação Atribuição
A operação de atribuição (←) provê um modo conveniente para expressar consultas
complexas.
Escrever consulta como um programa seqüencial consiste de:
Uma série de atribuições
Seguida por uma expressão, cujos valores são mostrados como resultado
da consulta
Atribuição deve sempre ser feita por uma variável temporária de relação
Exemplo: Escreva r ÷ s como
temp1 ← ∏ R-S (r )
temp2 ← ∏ R-S ((temp1 x s ) – ∏ R-S,S (r ))
resultado = temp1 – temp2
O resultado a direita do ← é atribuído para a variável de relação a esquerda do ←
Pode usar variável em expressões subseqüentes

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 71


Consultas Exemplos
Empréstimo (nume, coda, saldo)
Cliente_Conta (codc, numc)
Cliente_Empréstimo (codc, nume)

■ Obter os códigos de todos os clientes que tem um empréstimo e 
uma conta no banco
∏ codc (Cliente_Empréstimo) ∩ ∏ codc (Cliente_Conta)

Obter os códigos, número do empréstimo e o saldo de todos os clientes


que tem um empréstimo no banco e uma conta empréstimo

∏ codc,nume,saldo (Cliente_Empréstimo     Empréstimo )

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 72


Consultas Exemplos
Conta (numc, coda, saldo)
Cliente_Conta (codc, numc)

Obter todos os códigos de clientes que tem conta nas agências 01


e 03
● Consulta 1

∏ codc (σ coda = 01 (Cliente_Conta      Conta )) ∩

        ∏ codc (σ coda = 03 (Cliente_Conta     Conta))

● Consulta 2

 ∏ codc, coda (Cliente_Conta      Conta)

        ÷ ρ temp(coda) ({01, 03 })

Note que a Consulta 2 usa uma relação constante
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 73
Consultas Exemplos
Agência (coda,nome, caixa,codcid)
Conta (numc, coda, saldo)
Cliente_Conta (codc, numc)

Obter todos os clientes que tem uma conta em todas as


agências localizadas na cidade de código 01

∏ codc, coda (Cliente_Conta     Conta)
÷ ∏ coda (σ codcid = 01 (Agência))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 74


Operações Estendidas da Álgebra Relacional

Projeção Generalizada

Funções Agregadas

Outer Join

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 75


Projeção Generalizada
Estende a operação de projeção por funções aritméticas permitidas
para ser usadas na lista projeção
∏ F1 ,F2 ,..., Fn (E )

E é qualquer expressão da álgebra relacional

Cada uma de F1, F2, …, Fn são expressões aritméticas envolvendo


constantes e atributos no esquema de E

Dada a relação Crédito(codc, limite, valor), obter quanto cada pessoa


gasta:
∏ codc, limite – valor (Crédito)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 76


Funções e Operações Agregadas
Função Agregação obtém uma coleção de valores e retorna um valor
simples como resultado
avg: valor média
min: valor mínimo
max: valor máximo
sum: soma de valores
count: número de valores
Operação Agregação na álgebra relacional
G1,G2 ,,Gn
ϑF ( A ),F ( A ,,F ( A ) (E )
1 1 2 2 n n

E é qualquer expressão da álgebra relacional


G1, G2 …, Gn é uma lista de atributos para o grupo (pode ser vazia)
Cada Fi é uma função agregada
Cada Ai é um nome de atributo
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 77
Operação Agregada
Relação r:
A B C

α α 7
α β 7
β β 3
β β 10

■ g sum(c) (r) sum(c )

27

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 78


Operação Agregada
Relação Conta agrupada pelo código da agência

numc Coda saldo


A-101 03 500
A-215 01 700
A-102 02 400
A-305 04 350
A-201 03 900
Coda Sum(saldo)
A-222 01 700
03 1400
A-217 02 750
01 1400

coda g sum(saldo) (Conta) 02 1150


04 350

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 79


Funções Agregadas
Resultado da agregação não tem um nome

Pode usar a operação de renomeação para dar um nome

Por conveniência, é permitido renomear como parte da operação agregação

coda g sum(saldo) as soma_saldo (Conta)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 80


Operação Junção Externa
Uma extensão da operação Junção que evita perda de informação

Computa a junção e então adiciona tuplas formando uma relação


que não casa tuplas na outra relação para o resultado da junção

Usa valores nulos:


nulo significa que o valor é desconhecido ou não existe
Todas as comparações envolvendo nulo são falsas por definição.

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 81


Operação Junção Externa
Empréstimo Cliente_Empréstimo
nume Coda saldo codc nume
L-170 03 3000 01 L-170
L-230 01 4000 02 L-230
L-260 02 1700 04 L-155

Inner Join : Empréstimo Cliente_Empréstimo

nume Coda saldo codc


L-170 03 3000 01
L-230 01 4000 02

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 82


Operação Junção Externa
Empréstimo Cliente_Empréstimo
nume Coda saldo codc nume
L-170 03 3000 01 L-170
L-230 01 4000 02 L-230
L-260 02 1700 04 L-155
■ Junção Externa Esquerda (Left outer Join)
    Empréstimo                Cliente_Empréstimo

nume Coda saldo codc


L-170 03 3000 01
L-230 01 4000 02
L-260 02 1700 null

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 83


Operação Junção Externa
Empréstimo Cliente_Empréstimo
nume Coda saldo codc nume
L-170 03 3000 01 L-170
L-230 01 4000 02 L-230
L-260 02 1700 04 L-155

■ Junção Externa Direita (right outer Join)
    Empréstimo           Cliente_Empréstimo

nume Coda saldo codc


L-170 03 3000 01
L-230 01 4000 02
L-155 Null Null 04

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 84


Operação Junção Externa
Empréstimo Cliente_Empréstimo
nume Coda saldo codc nume
L-170 03 3000 01 L-170
L-230 01 4000 02 L-230
L-260 02 1700 04 L-155
■ Junção Externa Completa (full outer join)
    Empréstimo               Cliente_Empréstimo
nume Coda saldo codc
L-170 03 3000 01
L-230 01 4000 02
L-260 02 1700 Null
L-155 Null Null 04

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 85


Valores Nulos
É possível tuplas ter valor nulo, denotado por null, para alguns de
seus atributos
null significa um valor desconhecido ou que o valor não existe
O resultado de qualquer expressão aritmética envolvendo null é nulo
Funções Agregadas simplesmente ignoram valores nulos (como na
SQL)
Para eliminação duplicada e agrupamento, nulo é tratado semelhante
a qualquer outro valor e dois nulos são assumidos para ser o mesmo
(como na SQL)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 86


Valores Nulos
Comparações com valores nulos retornam o valor especial: desconhecido
Se false foi usado ao em vez de desconhecido, então not (A < 5)
não seria equivalente a A >= 5
Operadores Lógicos usando o valor verdade desconhecido:
OR: (desconhecido or true) = true,
(desconhecido or false) = desconhecido
(desconhecido or desconhecido) = desconhecido

AND: (true and desconhecido) = desconhecido,


(false and desconhecido) = false,
(desconhecido and desconhecido) = desconhecido

NOT: (not desconhecido) = desconhecido

Em SQL “P é desconhecido” avaliado para true se o predicado P avaliado para


desconhecido

Resultado do predicado é tratado como false se avaliado desconhecido

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 87


Modificação do Banco de Dados
O conteúdo do banco de dados pode ser modificado usando as
operações:

Deleção
Inserção
Atualização

Todas essas operações são expressadas usando o operador


atribuição

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 88


Deleção
A requisição de deleção é expressa similarmente como uma
consulta, exceto as tuplas mostradas para o usuário, as tuplas
selecionadas são removidas do banco de dados

Pode deletar somente tuplas

Não pode deletar valores em atributos particulares

Uma deleção é expressa na álgebra relacional por:


r←r–E
onde r é uma relação e E é uma consulta da álgebra relacional.

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 89


Exemplos de Deleção
Cidade(codcid,nomec)
Agência (coda,nomea, caixa,codcid)
Cliente (codc,nome)
Conta (numc, coda, saldo)
Empréstimo (nume, coda, saldo)
Cliente_Conta (codc, numc)
Cliente_Empréstimo (codc, nume)

Deletar todos os registros de Conta, cujo coda = 01

Conta ← Conta – σ coda = 01 (Conta )
■   Deletar todos os registros de empréstimo com saldo entre 0 a 50

Emprestimo ← Emprestimo – σ saldo ≥ 0 and saldo ≤  50 (Emprestimo)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 90


Exemplos de Deleção
Cidade(codcid,nomec)
Agência (coda,nomea, caixa,codcid)
Cliente (codc,nome)
Conta (numc, coda, saldo)
Empréstimo (nume, coda, saldo)
Cliente_Conta (codc, numc)
Cliente_Empréstimo (codc, nume)

■   Deletar todas as contas das agências localizadas na cidade cujo código igual 01

r1 ← σ codcid = 01 (Conta      Agencia )

r2 ← ∏ numc, coda, saldo (r1)

r3 ← ∏  codc, numc (r2     Cliente_Conta)
Cliente_Conta ← Cliente_Conta – r3
Conta ← Conta – r2
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 91
Inserção
Inserir dados em uma relação:
Especificar uma tupla a ser inserida
Escrever uma consulta cujo resultado é um conjunto de tuplas a
ser inserido

Em álgebra relacional, uma inserção é expressa por:


r← r ∪ E
onde r é uma relação e E é uma expressão da álgebra relacional

A inserção de uma tupla simples é expressa por E, que é uma


relação constante contendo uma tupla

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 92


Exemplos de Inserção
Cidade(codcid,nome)
Agência (coda,nome, caixa,codcid)
Cliente (codc,nome)
Conta (numc, coda, saldo)
Empréstimo (nume, coda, saldo)
Cliente_Conta (codc, numc)
Cliente_Empréstimo (codc, nume)

Inserir informação no banco de dados especificando que o número do cliente é 01,


agência A-973 e saldo 1200. A relação Cliente_Conta possui o código do cliente 02
e e número da conta 01.

Conta ←  Conta  ∪  {(01, A­973, 1200)}
Cliente_Conta ←  Cliente_Conta  ∪  {(02, 01)}

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 93


Exemplos de Inserção
Cidade(codcid,nome)
Agência (coda,nome, caixa,codcid)
Cliente (codc,nome)
Conta (numc, coda, saldo)
Empréstimo (nume, coda, saldo)
Cliente_Conta (codc, numc)
Cliente_Empréstimo (codc, nume)

■  Provê todos os clientes e seus empréstimos, na Agência 01, com saldo 200 na conta. 
 Dado o número do empréstimo, com o número da conta para uma nova conta.

r1 ← (σ coda = 01 (Cliente_Emprestimo    Emprestimo))
Conta ← Conta ∪ ∏ numc, coda,200 (r1)
Cliente_Emprestimo ← Cliente_Emprestimo ∪ ∏ codc, nume (r1)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 94


Atualização
Um mecanismo para trocar um valor em uma tupla sem trocar todos
os valores na tupla
Use o operador de projeção generalizada para fazer esta tarefa
r ← ∏ F ,F ,,F , ( r )
1 2 l

Cada Fi é também
o I_ésimo atributo de r, se o I_ésimo atributo não é atualizado ou
Se o atributo será atualizado para a expressão Fi , envolvendo
somente constantes e os atributos de r, as quais dá um novo
valor para os atributos

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 95


Exemplos de Atualização
Cidade(codcid,nome)
Agência (coda,nome, caixa,codcid)
Cliente (codc,nome)
Conta (numc, coda, saldo)
Empréstimo (nume, coda, saldo)
Cliente_Conta (codc, numc)
Cliente_Empréstimo (codc, nume)

Atualizar e acrescentar no saldo de todas as contas em 5%.

Conta ← ∏ numc, coda, saldo * 1.05 (Conta)

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 96


Exemplos de Atualização
Cidade(codcid,nome)
Agência (coda,nome, caixa,codcid)
Cliente (codc,nome)
Conta (numc, coda, saldo)
Empréstimo (nume, coda, saldo)
Cliente_Conta (codc, numc)
Cliente_Empréstimo (codc, nume)

■  Atualizar e acrescentar 5% para as contas menor ou igual a 10.000 ou 6% para as 
contas maior que 10.000

 Conta←  ∏ numc, coda, saldo * 1.06 (σ saldo > 10000 (Conta ))
                    ∪  ∏ numc, coda, saldo * 1.05 (σsaldo ≤ 10000 (Conta))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 97


Exercícios
Loja(cod_loja,nome,cidade,estado)
ContasPagar(cod,descrição,data_cp,data_vcto,data_pgto,valor,cod_fornecedor,cod_loja)
ContasReceber(cod,descrição,data_cr,data_vcto,data_pgto,valor,cod_cliente,cod_loja)
Fornecedor(cod_fornecedor,nome_fornecedor,contato,fone,email)
Cliente(cod_cliente,nome_cliente,fone,email)

1.Faça uma lista das contas a pagar com vencimento para


“01/01/2007”, trazendo apenas os atributos descrição e valor.

ContasPagar1 ← Π descricao, valor (σ data_vcto = “01/01/2007” (ContasPagar))

2. Faça uma lista das contas a receber com vencimento para


“01/01/2007”, trazendo apenas os atributos descrição e valor.

ContasReceber1 ← Π descricao, valor (σ data_vcto = “01/01/2007” (ContasReceber))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 98


Exercícios
Loja(cod_loja,nome,cidade,estado)
ContasPagar(cod,descrição,data_cp,data_vcto,data_pgto,valor,cod_fornecedor,cod_loja)
ContasReceber(cod,descrição,data_cr,data_vcto,data_pgto,valor,cod_cliente,cod_loja)
Fornecedor(cod_fornecedor,nome_fornecedor,contato,fone,email)
Cliente(cod_cliente,nome_cliente,fone,email)

3. Faça uma lista que una ambos os resultados da questão 1 e da


questão 2, trazendo em uma única lista todas as contas a pagar e a
receber.
ContasPagar1 U ContasReceber1
4. Mostre o nome de todos os clientes que possuem débito não pago
no contas a receber ou seja tuplas no contas a receber que o atributo
data_pgto está vazio.
Πnome_cliente (σdata_pagto = “ ” ^ Cliente.cod_cliente = ContasReceber.cod_cliente(Cliente ×
ContasReceber))
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 99
Exercícios
Loja(cod_loja,nome,cidade,estado)
ContasPagar(cod,descrição,data_cp,data_vcto,data_pgto,valor,cod_fornecedor,cod_loja)
ContasReceber(cod,descrição,data_cr,data_vcto,data_pgto,valor,cod_cliente,cod_loja)
Fornecedor(cod_fornecedor,nome_fornecedor,contato,fone,email)
Cliente(cod_cliente,nome_cliente,fone,email)

5.Faça uma lista com todas as contas a pagar, apresentando apenas os atributos
descrição, nome_fornecedor, datavcto, valor, com vencimento no mês de outubro, para
relacionar o fornecedor a contas a pagar (utilize Junção Natural).

Π descricao, nome_fornecedor, data_vcto, valor (σ data_pagto ≥ “01/10/2006” ^ data_vcto ≤ “31/10/2006”


(ContasPagar
Fornecedor))

6. Faça uma lista com todas as contas a pagar das lojas de Curitiba, apresentando a loja,
descrição, data_vcto, nome, e valor. (Utilize Divisão)

Π cod_loja,descricao, data_vcto, valor (ContasPagar) ÷ Π cod_loja (σ cidade = “CURITIBA”


(Loja))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 100


Exercícios

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 101


Exercícios
1. Mostre o título dos filmes cujo gênero seja “Ficção”.

Π titulo(σ descricao = “Ficção” ^ codGenero = Genero_Cod_Genero


(Genero × Filme))

ou

Π titulo(σ descricao = “Ficção”


(Genero Filme))

2. Mostre o nome de todos os clientes que estão com locações a pagar.

Π nome(σ codCliente = Cliente_codCliente ^ valorApagar <> 0


(Cliente × Locacao))

Ou

Π nome(σ valorApagar <> 0


(Cliente Locacao))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 102


Exercícios
3. Mostre o titulo de todos os filmes que o cliente “Paulo” comprou.

R1← Π codVenda
(σ codCliente = Cliente_codCliente ^ nome = “Paulo”
(Cliente× Venda))

Π titulo (σ codVenda = Venda_codVenda ^ Filme_codFilme = codFilme


(Filme × (ItemVenda × R1)))

Ou

R1← Π codVenda
(σ nome = “Paulo” (Cliente Venda))

Π titulo (Filme (ItemVenda R1)))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 103


Exercícios
4. Mostre o nome do diretor do filme “Matrix”.
R1← Π Elenco_codElenco(σ codFilme = Filme_codFilme ^ titulo = “Matrix” (Filme × ElencoFilme))
Π nome (σ Elenco_codElenco= codElenco ^ função_codFuncao = codFuncao ^ descricao = “Diretor” (Função×
(Elenco × R1)))

5. Mostre o registro e o nome dos clientes responsáveis.

Π cod_registro, nome
(σ responsavel = True
(Registro Cliente))

6. Mostre o nome de todos os diretores de todos os filmes de ação.

R1← Π codFilme(σ codGenero= Gênero_codGenero ^ descricao = “Ação” (Genero × Filme))


R2← Π função_codFuncao (σ cod_Filme = Filme_codFilme ^ codElenco = Elenco_CodElenco(Elenco ×
(ElencoFilme × R1)))
Π nome(σ Função_codFuncao = codFuncao ^ descricao = “Diretor” (Elenco × (Função × R2)))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 104


Exercícios
7. Mostre o título e o gênero de todos os filmes que o cliente “João” locou.
R1← Π codLocacao(σ nome = ”João” ^ codCliente = Cliente_codCliente (Cliente× Locacao))
R2← Π Genero_codGenero, titulo (σ codLocacao = Locacao_codLocacao ^ filme_codFilme = codFilme (Filme × (ItemLocacao ×
R1)))
Π titulo, descricao (σ genero_codGenero= codGenero (R2 × Genero))

8. Selecione todos os filmes do gênero “Romance” em que o ator “Brad Pitt” atuou.
R1← Π codFilme, titulo(σ codGenero = Gênero_codGenero ^ descricao = “Romance” (Genero× Filme))
R2← Π Função_codFuncao (σ codFilme = Filme_codFilme ^ Elenco_codElenco = codElenco ^ nome = “Brad Pitt” (Elenco ×
(ElencoFilme × R1)))
Π R1.titulo(σ Funcao_codFuncao = codFuncao ^ descricao = “Ator” (R2 × Genero))

9. Mostre o nome de todos os clientes que compram e nunca locaram.

R1← Π codCliente (σ codCliente = Cliente_codCliente (Cliente × Venda))


R2← Π codCliente (σ codCliente = Cliente_codCliente (Cliente × Locacao))
R3← R1­ R2
Π nome(σ cliente.codCliente= R3.codCliente (Cliente × R3))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 105


Exercícios
10. Mostre o nome de todos os clientes que compraram e locaram filmes.

R1← Π codCliente (σ codCliente = Cliente_codCliente (Cliente× Venda))


R2← Π codCliente (σ codCliente = Cliente_codCliente (Cliente× Locacao))
R3← R1 ∩ R2
Π nome(σ codCliente= codCliente (Cliente × R3))

11. Mostre o título de todos os filmes que foram vendidos e nunca foram locados.

R1← Π codFilme (σ codFilme = Filme_codFilme ^ Venda_codVenda = codVenda (Venda × (ItemVenda × Filme)))


R2← Π codFilme (σ codFilme = Filme_codFilme ^ Locacao_codLocacao= codLocacao(Locacao× (ItemLocacao × Filme)))
R3← R1­R2
Π título(σ codFilme= codFilme(Filme × R3))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 106


Exercícios
12. Mostre o título de todos os filmes que foram vendidos e locados.

R1← Π codFilme (σ codFilme = Filme_codFilme ^ Venda_codVenda = codVenda (Venda × (ItemVenda × Filme)))


R2← Π codFilme (σ codFilme = Filme_codFilme ^ Locacao_codLocacao= codLocacao(Locacao× (ItemLocacao × Filme)))
R3← R1 ∩ R2
Π título(σ codFilme= codFilme(Filme × R3))

13. Mostre o nome e o telefone de todos os clientes que locam filmes de comédia e
não locam filmes de terror.
R1← Π codFilme(σ descricao = “Comédia” ^ codGenero = Genero_codGenero(Genero × Filme))
R2← Π Cliente_codCliente(σ filme_codFilme = codFilme ^ codLocacao = locacao_codLocacao(Locacao × (R1 × ItemLocacao)))
R3 ←Π codFilme(σ descricao <>”Terror” ^ codGenero = genero_codGenero(Genero × Filme))
R4 ←Π Cliente_codCliente(σ filme_codFilme = codFilme ^ codLocacao = locação_codLocacao(Locacao × (R3 × ItemLocacao)))
R5 ← R2 – R4
Π nome, fone(σ Cliente_CodCliente = codCliente(Cliente × R5))

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 107


Bibliografia
Sistema de Banco de Dados
A. Silberschatz; H. F. Korth; S. Sudarschan. Makron Books, Terceira Edição, 2006.
Projeto de Banco de Dados ­ Uma Visão Prática
Felipe Machado; Maurício Abreu. 10a. Edição. Editora Érica, São Paulo, 2003.
Projeto de banco de Dados
Carlos Alberto Heuser. 3a. Edição, Sagra Luzzatto, Rio Grande do Sul, 2000.

Modelagem Conceitual e Projeto de banco de Dados


Paulo Cougo. Editora Campus, Rio de Janeiro, 1997.

Banco de Dados: Fundamentos, Projeto e Implementação


David M. Kroenke. Livros Técnicos e Científicos, Sexta Edição, 1999.

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 108

Das könnte Ihnen auch gefallen