You are on page 1of 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 Estruturas Relação Atributo Domínio Chave Primária Chave Estrangeira União Interseção Diferença Seleção Projeção Junção Divisão
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz 4

Restrições Integridade de Domínio Integridade de Entidade Integridade Referencial

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 Primária Num-pil Nome Atributos CPF Endereço

PILOTO

0101 Tuplas 0035 . . . 0987

João José

12345 234567

Recife Castro

Pedro

567489

Curitiba

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

Modelo Relacional
Chave Estrangeira VÔO Num-vôo ... Num-pil ...

. . . 330 . . . ... 0101 ...
7

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

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
s Ordem das tuplas é irrelevante ­ podem ser armazenadas em uma ordem arbitrária s Exemplo: relação Conta com tuplas não ordenadas

numc A-101 A-215 A-102 A-305 A-201 A-222 A-217

Coda 03 01 02 04 03 01 02

saldo 500 700 400 350 900 700 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 codc 01 02 03 04 05 06 07 08 nome Salete José Francisco Ronaldo Marise Rafaela Sandra Renata codc 01 02 03 04 05 06 07 08 Cliente_Conta numc A-215 A-102 A-305 A-201 A-222 A-217 A-215 A-101

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

14

Dado K ⊆ R 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

Chaves

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
s Relação r

A

B

C 1 5 12

D 7 7 3

α α β β

α β β β
B

23 10 C 1 D 7

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

A

α β

α β

23 10

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

19

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

Operação Seleção

σ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á?

σ cod_uf = ‘PR’ (cidade)

Select * From cidade Where cod_uf = ‘PR’

Qual o nome das cidades do Paraná?

nome

cod_uf = ‘PR’ (cidade)

)
21

Select nome From cidade Where cod_uf = ‘PR’
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

Operação Seleção
Quais as cidades do Paraná?

σ cod_uf = ‘PR’ (cidade)

select * 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 10 20 30 40 C 1 1 1 2 A C 1 1 2

α α β β

∏A,C (r)

A

C 1 1 1 2 =

α α β β

α β β

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

23

Operação Projeção
Notação:

A1 , A2 ,, Ak

(r )

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 Seleção 0035 . . . 0987

João José

12345 234567

Recife Castro

Pedro

567489

Curitiba

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

26

Operação União
Relações r, s: A B 1 2 r 1 A B 2 3 s

s r ∪ s:

A

B 1 2 1 3

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

α α β β

α β

CA CB CC DD CE CF DG

UNIÃO
1 2 3 4 AA AE AF AG BA BE BF BG

A união de duas relações r e s é composta de todas as linhas que pertencem a r ou s

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 1 2 1 r A B 2 3 s

α α β

α β

A

B 1 1

α β

A diferença entre de duas relações r e s é composta de todas as linhas que pertencem a r e não pertencem a s

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 1 3 4 R2 1 2 3 6 R1 - R2 = {4} R2 - R1 = {2,6}

1 2 3 4

AA AB AC AD

BA BB BC BD

CA CB CC DD 2 3 4 AB AC AD BB BC BD CB CC DD

DIF E R E N Ç A
1 2 3 4 AA AE AF AG BA BE BF BG CA CE CF 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);

s Relações r, s:

Operação Produto Cartesiano
A B 1 r 2 C D 10 10 20 10 s A B 1 1 1 1 2 2 2 2 C D 10 10 20 10 10 10 20 10 E a a b b a a b b
33

E a a b b

α β
s r x s:

α β β γ

α α α α β β β β

α β  β γ α β β γ

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

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 2 3 4

X

A B C

1 1 1 2 2 2 . . .

A B C A B C . . .

Operação Produto Cartesiano
Obter o produto cartesiano entre as relações VEÍCULO e MODELO

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

Modelo
cod_modelo cod_grupo (FK) descricao

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

veiculo X modelo

Select * From veiculo, modelo;
36

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

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
placa cod_modelo (FK) data_aquisicao chassis cod_filial (FK) data_entrada

Modelo
cod_modelo cod_grupo (FK) descricao

σ 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 B 1 1 1 1 2 2 2 2 C D 10 10 20 10 10 10 20 10 E a a b b a a b b

σA=C(r x s)
α β  β γ  α β β γ
A B 1 2 2 C D E a a b

α α α α β β β β

α β β

α 10 β 10 β 20

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)

s 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

Empréstimo (nume, coda, saldo) Cliente_Conta (codc, numc) Cliente_Empréstimo (codc, nume) s  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)

Consultas Exemplo

   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
q

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
q

 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

Cidade(codc,nome) Funcionário (codf, nome, rua,numero,codc) Trabalha(codf,code,salario) Empresa(code,nome,ender) Gerencia(codf,codg)

Exercícios

∏Funcionario.nome (σFuncionário.rua = Endereco.rua ∧ Funcionario.codc. = Endereco.codc 
(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

Encontre os nomes de todos os funcionários que moram na mesma cidade e na rua de ‘Salete’

(Funcionario x ρendereco(rua,codc) (∏Funcionario.rua,Funcionario.codc(σnome.= ‘Salete’ 

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”

Exercícios

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

σ categoria_cod = 7 (produto) 

Selecione os produtos, cuja categoria é 7.

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 = (deposito × estoque))) “CENTRO” ^ deposito.cod_deposito = estoque.cod_deposito

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 (ρ (produto)))))) produto2

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

56

Uma expressão base na álgebra relacional consiste de: Uma relação no banco de dados Uma relação constante

Definição Formal

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:
A       B α α β r 1 2 1 A       B α β s
1 2 3 4 AA AB AC AD BA BB BC BD CA CB CC DD 1 AA BA CA

Linhas que estejam em ambas as tabelas

2 3

r∩s
A       B α      2

INTERSEÇÃO
1 2 3 4 AA AE AF AG BA BE BF BG CA CE CF 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)
s 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

s    Notação:  r     s

Operação Junção Natural

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: ∏
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz ( ∧ (r x s))

σ

63

Operação Junção Natural
Relações r, s:
A B 1 2 4 1 2 C D a a b a b B 1 3 1 2 3 D a a a b b s
JUNÇÃO
1 2 3 4 AA AB AC AD BA BB BC BD CA CB CC DD 1 2 3 4 AA AE AF AG BA BE BF BG CA CE CF DG

s r     s

E

A

B 1 1 1 1 2

C

D a a a a b

E

α β γ α δ

r

α γ β γ β

α β γ δ ∈

α α α α δ

α α γ γ β

α γ α γ δ

1 2 3 4

AA AB AC AD

BA BB BC BD

CA CB CC DD

1 2 3 4

AA AE AF AG

BA BE BF BG

CA CE CF 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

)
65

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

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

s

Operação Divisão Relações r, s:
A B 1 2 3 1 1 1 3 4 6 1 2 r B 1 2 s

s r ÷ s:

α α α β γ δ δ δ ∈ ∈ β
A

A divisão da relação r pela relação s é composta pelas linhas de r que estão ligadas a todas as linha de s.

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

s

Operação Divisão Relações r, s:
A B a a a a a a a a C D a a b a b a b b E 1 1 1 1 3 1 1 1 D a b s E 1 1

s r ÷ s: A B a a C

α α α β β γ γ γ

α γ γ γ γ γ γ β r

α γ

γ γ

1 2 3 4

A B C D A B C

DIVISÃO
1 2 3

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

68

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

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

V

0020 0020 0010 0010 0010 0010 0015 0015

101 105 101 104 105 103 103 104

Avião 101 104 105 103

R

Piloto 0010

Divisor

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

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

Consultas Exemplos

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

Consulta 1 ∏ codc (σ coda = 01 (Cliente_Conta      Conta )) ∩         ∏ codc (σ coda = 03 (Cliente_Conta     Conta))

q

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

α α β β

α β β β

s 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 A-101 A-215 A-102 A-305 A-201 A-222 A-217
coda

Coda 03 01 02 04 03 01 02

saldo 500 700 400 350 900 700 750 Coda 03 01 02 04
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

Sum(saldo) 1400 1400 1150 350
79

g

sum(saldo)

(Conta)

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
nume L-170 L-230 L-260 Coda 03 01 02 saldo 3000 4000 1700

Cliente_Empréstimo
codc 01 02 04
Cliente_Empréstimo

nume L-170 L-230 L-155

Inner Join : Empréstimo
nume L-170 L-230 Coda 03 01

saldo 3000 4000

codc 01 02

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

82

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

Cliente_Empréstimo
codc 01 02 04 nume L-170 L-230 L-155

s Junção Externa Esquerda (Left outer Join)

    Empréstimo                Cliente_Empréstimo

nume L-170 L-230 L-260

Coda 03 01 02

saldo 3000 4000 1700

codc 01 02 null

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

83

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

Cliente_Empréstimo
codc 01 02 04 nume L-170 L-230 L-155

s Junção Externa Direita (right outer Join)

    Empréstimo           Cliente_Empréstimo

nume L-170 L-230 L-155

Coda 03 01 Null

saldo 3000 4000 Null

codc 01 02 04
84

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

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

Cliente_Empréstimo
codc 01 02 04 nume L-170 L-230 L-155

s Junção Externa Completa (full outer join)

    Empréstimo               Cliente_Empréstimo

nume L-170 L-230 L-260 L-155

Coda 03 01 02 Null

saldo 3000 4000 1700 Null

codc 01 02 Null 04
85

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

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

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

Valores Nulos

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

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)

Exemplos de Deleção

s   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)
s  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)
s  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 (σ Fornecedor))
data_pagto ≥ “01/10/2006” ^ data_vcto ≤ “31/10/2006”

(ContasPagar

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

2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz

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(σ ou Π titulo(σ
descricao = “Ficção” descricao = “Ficção” ^ codGenero = Genero_Cod_Genero

(Genero × Filme))

(Genero

Filme))

2. Mostre o nome de todos os clientes que estão com locações a pagar. Π nome(σ Ou Π nome(σ
valorApagar <> 0 codCliente = Cliente_codCliente ^ valorApagar <> 0

(Cliente × Locacao))

(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← Π Π titulo (σ
Ou
codVenda

codCliente = Cliente_codCliente ^ nome = “Paulo”

(Cliente× Venda))

codVenda = Venda_codVenda ^ Filme_codFilme = codFilme

(Filme × (ItemVenda × R1)))

R1← Π

codVenda

(σ nome = “Paulo” (Cliente
R1)))

Venda))

Π titulo (Filme

(ItemVenda

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