Post on 14-Nov-2014
description
Modelo Relacional e a Álgebra Relacional
Maria Salete Marcon Gomes Vaz
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
2
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
3
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
4
Modelo Relacional
Estruturas
Relação
Atributo
Domínio
Chave Primária
Chave Estrangeira
Operadores
União
Interseção
Diferença
Seleção
Projeção
Junção
Divisão
Restrições
Integridade de Domínio
Integridade de Entidade
Integridade Referencial
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
5
Estrutura BásicaDados 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
6
Modelo Relacional Chave
Primária
Num-pil Nome CPF Endereço
0101 João 12345 Recife
0035 José 234567 Castro...
0987 Pedro 567489 Curitiba
Atributos
Tuplas
Chave Candidata
PILOTO
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
7
Num-vôo ... Num-pil ...
.
.
.
330 ... 0101 ......
Chave Estrangeira
VÔO
Modelo Relacional
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
8
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: <d1, d2>, grau = 2 tripla: <d1, d2, d3>, grau = 3 ... n upla: < d1, d2, ... dn>, grau = n
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
9
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
10
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
11
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
Modelo Relacional
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
12
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
13
Banco de DadosUm 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 contasCliente_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
14
Relações Cliente e Cliente_Conta
codc nome
01 Salete
02 José
03 Francisco
04 Ronaldo
05 Marise
06 Rafaela
07 Sandra
08 Renata
Cliente
codc numc
01 A-215
02 A-102
03 A-305
04 A-201
05 A-222
06 A-217
07 A-215
08 A-101
Cliente_Conta
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
15
ChavesDado K RK é 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
16
Linguagens de ConsultaLinguagem na qual usuários requerem informações de um banco de dados
Categorias de linguagensProceduralNão-procedural ou declarativa
Linguagens “Puras”:Álgebra RelacionalCálculo Relacional de TuplasCá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
17
Proposta por Ed. CoddBaseada 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 FundamentaisPrimários: Projeção, Seleção e RenomeaçãoBinários: Diferença, Produto e UniãoOperadores Adicionais - Binários- Interseção- Junção- Divisão
Álgebra Relacional
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
18
Á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
19
Operação Seleção – Exemplo Relação r
A B C D
1
5
12
23
7
7
3
10
A=B ^ D > 5 (r)A B C D
1
23
7
10
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
20
Operação SeleçãoNotação: p(r)p é chamado predicado de seleçãoDefinida 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
21
Operação SeleçãoQuais as cidades do Paraná?
σ cod_uf = ‘PR’ (cidade)Select *From cidadeWhere cod_uf = ‘PR’
Qual o nome das cidades do Paraná?
Select nome From cidade Where cod_uf = ‘PR’
σ cod_uf = ‘PR’ (cidade)( )¶ nome
Quais as cidades do Paraná?
Operação Seleção
σ cod_uf = ‘PR’ (cidade)select *from cidadewhere cod_uf = ‘PR’
Qual o nome das cidades do Paraná?
Select nome from cidade where cod_uf = ‘PR’
σ cod_uf = ‘PR’ (cidade)( )¶ nome
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
23
Operação Projeção Relação r:
A B C
10
20
30
40
1
1
1
2
A C
1
1
1
2
=
A C
1
1
2
A,C (r)
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
24
Operação Projeção
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)
)( ,,, 21r
kAAA
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
25
Operação ProjeçãoDefine quais os atributos (colunas) de uma relação são desejáveis
Exemplo 1: Qual o código das pessoas?
cod (pessoa)
Exemplo 2: Qual o código e nome das pessoas?
cod, nome (pessoa)
Select cod, nome from pessoa;
Select cod from pessoa;
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
26
Operações Seleção e Projeção
Num-pil Nome CPF Endereço
0101 João 12345 Recife
0035 José 234567 Castro...
0987 Pedro 567489 Curitiba
PILOTO
Seleção
Projeção
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
27
Operação União Relações r, s:
r s:
A B
1
2
1
A B
2
3
r s
A B
1
2
1
3
A união de duas relações r e s é composta de todas as linhas que pertencem a r ou s
1
1
2
2
3
3
4
4
AA
AA
AB
AE
AC
AF
AD
AG
BA
BA
BB
BE
BC
BF
BD
BG
CA
CA
CB
CE
CC
CF
DD
1
2
3
4
AA
AB
AC
AD
BA
BB
BC
BD
CA
CB
CC
DD
DG
2
3
4
AE
AF
AG
BE
BF
BG
CE
CF
DG
UNIÃO
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
28
Operação UniãoNotaçã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
29
Operação Diferença Relações r, s:
A B
1
2
1
A B
2
3
rs
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
30
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
Operação DiferençaR1 R2 R1 - R2 = {4}
R2 - R1 = {2,6}
134
1236 1
1
2
2
2
3
3
3
4
4
4
A A
A A
A B
A B
A E
A C
A C
A F
A D
A D
A G
B A
B A
B B
B B
B E
B C
B C
B F
B D
B D
B G
C A
C A
C B
C B
C E
C C
C C
C F
D D
D D
D G
D IF E R E N Ç A
Operação Diferença
Obter todas as pessoas que nunca locaram qualquer veículo
¶ cod_pessoa (pessoa) - ¶ cod_cliente (locacao) Select cod_pessoa from pessoaminusSelect cod_cliente from locacao;
Select cod_pessoa From pessoa Where cod_pessoa not in (Select cod_cliente From locacao);
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
33
Operação Produto Cartesiano Relações r, s:
r x s:
A B
1
2
A B
11112222
C D
1010201010102010
E
aabbaabb
C D
10102010
E
aabbr
s
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
34
Operação Produto CartesianoNotaçã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
R1 R2 R3
X
Operação Produto Cartesiano
1234
ABC
111222...
ABCABC...
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
36
Obter o produto cartesiano entre as relações VEÍCULO e MODELO Operação Produto Cartesiano
cod_modelocod_grupo (FK)descricao
Veículo
placacod_modelo (FK)data_aquisicaochassiscod_filial (FK)data_entrada
Modelo
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
37
Operação Produto CartesianoCriar uma relação com o produto cartesiano entre as relações VEÍCULO e MODELO onde o veiculo.cod_modelo=10
cod_modelocod_grupo (FK)descricao
Veículo
placacod_modelo (FK)data_aquisicaochassiscod_filial (FK)data_entrada
Modelo
σ veiculo.cod_modelo=10 (veiculo x modelo)
Select * From veiculo, modelo where veiculo.cod_modelo=10
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
38
Composição de OperaçõesPode construir expressões usando múltiplas operações
Exemplo: A=C(r x s)
r x s A=C(r x s)
A B
11112222
C D
1010201010102010
E
aabbaabb
A B C D E
122
101020
aab
A
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
39
Operação de RenomeaçãoPermite 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
retorna o resultado da expressão E de nome X, e com os
atributos renomeados A1 , A2 , …., An .
)(),...,,( 21E
nAAAx
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
40
Operação RenomeaçãoCriar 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
Select descricao grupo, diaria valor_base, (diaria * 0.7) valor_descontoFrom Grupo Tabela_Preco;
Tabela_Preco(grupo,valor_base,valor_desconto)(¶descrição,diária,diária * 0.7 (grupo))
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
41
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
42
Consultas Exemplos
Obter todos os empréstimos com saldo acima de R$1200
saldo > 1200 (Empréstimo)
Empréstimo (nume, coda, saldo)
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
43
Consultas Exemplos
Obter o número dos empréstimos com saldo acima de R$1200
nume (saldo > 1200 (Empréstimo))
Empréstimo (nume, coda, saldo)
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
44
Consultas Exemplos
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;
Cliente_Conta (codc, numc)Cliente_Empréstimo (codc, nume)
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
45
Consultas Exemplo
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;
Empréstimo (nume, coda, saldo)Cliente_Empréstimo (codc, nume)
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
46
Consultas Exemplo
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 bancocodc (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);
Empréstimo (nume, coda, saldo)Cliente_Conta (codc, numc)Cliente_Empréstimo (codc, nume)
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
47
Consultas Exemplo
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)))
Emprestimo (nume, coda,saldo)
Cliente_Emprestimo (codc, nume)
Select codc from Cliente_Emprestimo, EmprestimoWhere Cliente_Emprestimo.nume = Emprestimo.nume and coda = 03;
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
48
Consultas Exemplo
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))
Emprestimo (nume, coda,saldo)
Cliente_Emprestimo (codc, nume)
Select codc from (Select * from Emprestimo where coda = 03) Emp, Cliente_EmprestimoWhere emp.nume = Cliente_Emprestimo.nume;
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
49
Consultas Exemplo
Obter o maior saldo de conta Estratégia:
Obter aqueles saldos que não são os maioresRenomear 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)))
Conta (numc, coda, saldo)
Select saldo from Conta minusSelect Conta.saldo from Conta, Conta d where Conta.saldo < d.saldo;
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
50
Exercícios
Encontre os nomes de todos os funcionários que moram na mesma cidade e na rua de ‘Salete’
Cidade(codc,nome)Funcionário (codf, nome, rua,numero,codc)Trabalha(codf,code,salario)Empresa(code,nome,ender)Gerencia(codf,codg)
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, funcionarioWhere endereço.codc = funcionario.codc and endereço.rua = funcionario.rua;
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
51
Exercícios
Encontre os códigos de todos os funcionários nesse banco de dados que não trabalham para a “UNINORTE”
Cidade(codc,nome)Funcionário (codf, nome, rua,numero,codc)Trabalha(codf,code,salario)Empresa(code,nome,ender)Gerencia(codf,codg)
codf(Funcionário) - Trabalha.codf
(Empresa.code. = Trabalha.code Empresa.nome. = ‘UNINORTE’
(Trabalha x Empresa))Select funcionario.codf from Funcionario minusSelect trabalha.codf from Empresa, TrabalhaWhere Empresa.code = Trabalha.code and Empresa.nome = ‘UNINORTE’;
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
52
Exercícios
1. Selecione os produtos, cuja categoria é 7.
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)
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
53
ExercíciosProduto(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
54
ExercíciosProduto(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
55
ExercíciosProduto(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
56
ExercíciosProduto(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
57
Definição FormalUma 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 E2E1 – E2E1 x E2p (E1), P é um predicado de atributos em E1s(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
58
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
59
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
60
Operação Interseção
Relações r, s:
r s
A B
121
A B
23
r s
A B
2
1
1
2
2
3
3
4
4
AA
AA
AB
AE
AC
AF
AD
AG
BA
BA
BB
BE
BC
BF
BD
BG
CA
CA
CB
CE
CC
CF
DD
1 AA BA CA
DG
INTERSEÇÃO
Linhas que estejam em ambas as tabelas
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
61
Operação InterseçãoObter 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
62
Consulta Exemplo
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;
Cliente_Conta (codc, numc)Cliente_Empréstimo (codc, nume)
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
63
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:
r.A, r.B, r.C, r.D, s.E (r.B = s.B r.D = s.D (r x s))
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
64
Operação Junção NaturalRelações r, s:
A B
12412
C D
aabab
B
13123
D
aaabb
E
r
A B
11112
C D
aaaab
E
s
r s
1
1
2
2
3
3
4
4
AA
AA
AB
AB
AC
AC
AD
AD
BA
BA
BB
BB
BC
BC
BD
BD
CA
CA
CB
CB
CC
CC
DD
DD
1
2
3
4
AA
AE
AF
AG
BA
BE
BF
BG
CA
CE
CF
DG
1
2
3
4
AA
AE
AF
AG
BA
BE
BF
BG
CA
CE
CF
DG
JUNÇÃO
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
65
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 ⋈ Cidade
¶uf.nome,cidade.nome ( )
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
66
Operação DivisãoNotação:
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
r s
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
67
Operação Divisão Relações r, s:
r s: A
B
1
2
A B
12311134612
r
s
A divisão da relação r pela relação s é composta pelas linhas de r que estãoligadas a todas as linha de s.
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
68
Operação Divisão
A B
aaaaaaaa
C D
aabababb
E
11113111
Relações r, s: r s:
D
ab
E
11
A B
aa
C
r
s
1
A
2
B
3
C
DIVISÃO
1
2
3
4
A
B
C
D
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
69
Operação DivisãoPropriedade
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
70
Operação Divisão
Quais os pilotos que conduzem todos os aviões da companhia?
Piloto Avião
0020 1010020 1050010 1010010 1040010 1050010 1030015 1030015 104
Avião
101104105103
Piloto
0010
V
Divisor
R
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
71
Operação AtribuiçãoA 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çãoExemplo: 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
72
codc,nume,saldo (Cliente_Empréstimo Empréstimo )
Consultas Exemplos
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
Empréstimo (nume, coda, saldo)Cliente_Conta (codc, numc)Cliente_Empréstimo (codc, nume)
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
73
Consulta 2
codc, coda (Cliente_Conta Conta)
temp(coda) ({01, 03 })
Note que a Consulta 2 usa uma relação constante
Consulta 1
codc (coda = 01 (Cliente_Conta Conta ))
codc (coda = 03 (Cliente_Conta Conta))
Consultas Exemplos
Obter todos os códigos de clientes que tem conta nas agências 01 e 03
Conta (numc, coda, saldo)Cliente_Conta (codc, numc)
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
74
codc, coda (Cliente_Conta Conta)
coda (codcid = 01 (Agência))
Obter todos os clientes que tem uma conta em todas as
agências localizadas na cidade de código 01
Consultas ExemplosAgência (coda,nome, caixa,codcid)Conta (numc, coda, saldo)Cliente_Conta (codc, numc)
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
75
Operações Estendidas da Álgebra Relacional
Projeção Generalizada
Funções Agregadas
Outer Join
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
76
Projeção GeneralizadaEstende a operação de projeção por funções aritméticas permitidas para ser usadas na lista projeção
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)
)( ,...,,21
EnFFF
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
77
Funções e Operações AgregadasFunção Agregação obtém uma coleção de valores e retorna um valor simples como resultado
avg: valor médiamin: valor mínimomax: valor máximosum: soma de valorescount: número de valores
Operação Agregação na álgebra relacional
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
)()(,,(),(,,, 221121E
nnn AFAFAFGGG
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
78
Operação AgregadaRelação r:
A B
C
7
7
3
10
g sum(c) (r) sum(c )
27
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
79
Operação AgregadaRelação Conta agrupada pelo código da agência
coda g sum(saldo) (Conta)
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
Coda Sum(saldo)
03 1400
01 1400
02 1150
04 350
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
80
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
81
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
82
Operação Junção Externa
Inner Join : Empréstimo Cliente_Empréstimo
nume Coda saldo codc
L-170 03 3000 01
L-230 01 4000 02
nume Coda saldo
L-170 03 3000
L-230 01 4000
L-260 02 1700
codc nume
01 L-170
02 L-230
04 L-155
Empréstimo Cliente_Empréstimo
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
83
Operação Junção Externa
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
nume Coda saldo
L-170 03 3000
L-230 01 4000
L-260 02 1700
codc nume
01 L-170
02 L-230
04 L-155
Empréstimo Cliente_Empréstimo
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
84
Operação Junção Externa
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
nume Coda saldo
L-170 03 3000
L-230 01 4000
L-260 02 1700
codc nume
01 L-170
02 L-230
04 L-155
Empréstimo Cliente_Empréstimo
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
85
Operação Junção Externa
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
nume Coda saldo
L-170 03 3000
L-230 01 4000
L-260 02 1700
codc nume
01 L-170
02 L-230
04 L-155
Empréstimo Cliente_Empréstimo
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
86
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
87
Valores NulosComparaçõ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
88
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
89
DeleçãoA 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
90
Exemplos de Deleção
Deletar todos os registros de Conta, cujo coda = 01
Deletar todos os registros de empréstimo com saldo entre 0 a 50
Emprestimo Emprestimo – saldo 0and saldo 50 (Emprestimo)
Conta Conta – coda = 01 (Conta )
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)
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
91
r1 codcid = 01 (Conta Agencia )
r2 numc, coda, saldo (r1)
r3 codc, numc (r2 Cliente_Conta)
Cliente_Conta Cliente_Conta – r3
Conta Conta – r2
Exemplos de Deleção
Deletar todas as contas das agências localizadas na cidade cujo código igual 01
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)
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
92
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
93
Exemplos de Inserção
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)}
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
94
r1 (coda = 01 (Cliente_Emprestimo Emprestimo))
Conta Conta numc, coda,200 (r1)
Cliente_Emprestimo Cliente_Emprestimo codc, nume (r1)
Exemplos de Inserção
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.
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
95
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
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 F i , envolvendo somente constantes e os atributos de r, as quais dá um novo valor para os atributos
)(,,,, 21rr
lFFF
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
96
Exemplos de Atualização
Atualizar e acrescentar no saldo de todas as contas em 5%.
Conta numc, coda, saldo * 1.05 (Conta)
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
97
Exemplos de Atualização
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))
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
98
ExercíciosLoja(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
99
ExercíciosLoja(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
100
ExercíciosLoja(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
101
Exercícios
2006 @ Profa. Dra. Maria Salete Marcon Gomes Vaz
102
Exercícios1. 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
103
Exercícios3. 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
104
Exercícios4. 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
105
Exercícios7. 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
106
Exercícios10. 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
107
Exercícios12. 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
108
Bibliografia
Sistema de Banco de DadosA. Silberschatz; H. F. Korth; S. Sudarschan. Makron Books, Terceira Edição, 2006.
Projeto de Banco de Dados - Uma Visão PráticaFelipe Machado; Maurício Abreu. 10a. Edição. Editora Érica, São Paulo, 2003.
Projeto de banco de DadosCarlos Alberto Heuser. 3a. Edição, Sagra Luzzatto, Rio Grande do Sul, 2000.
Modelagem Conceitual e Projeto de banco de DadosPaulo Cougo. Editora Campus, Rio de Janeiro, 1997.
Banco de Dados: Fundamentos, Projeto e ImplementaçãoDavid M. Kroenke. Livros Técnicos e Científicos, Sexta Edição, 1999.