Professional Documents
Culture Documents
Valores Nulos
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
Chave Candidata
Chave
Estrangeira
.
.
.
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
...
nupla: < d1, d2, ... dn>, grau = n
Categorias de linguagens
Procedural
Não-procedural ou declarativa
Linguagens “Puras”:
Álgebra Relacional
Cálculo Relacional de Tuplas
Cálculo Relacional de Domínio
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
α α 1 7
α β 5 7
β β 12 3
β β 23 10
σA=B ^ D > 5 (r)
A B C D
α α 1 7
β β 23 10
σp(r) = {t | t ∈ r ∧ p(t)}
Exemplo de seleção:
σ coda= 01 (Conta)
α 10 1
α 20 1
β 30 1
β 40 2
∏A,C (r) A C A C
α 1 α 1
α 1 = β 1
β 1 β 2
β 2
α 1 α 2
α 2 β 3
β 1 s
r
α 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
Definida como:
r x s = {t q | t ∈ r ∧ q ∈ s}
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)
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
Cliente (codc,nome)
σsaldo > 1200 (Empréstimo)
■ Obter o número dos empréstimos com saldo acima de
R$1200
∏nume (σsaldo > 1200 (Empréstimo))
Em SQL:
Select codc from Cliente_Empréstimo UNION
Select codc from Cliente_Conta;
∏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)))
● Consulta 2
∏codc (σEmprestimo.nume = Cliente_Emprestimo.nume (
(σcoda = 03 (ρEmp (Emprestimo))) x Cliente_Emprestimo))
(σ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’;
E1 ∪ E2
E1 – E2
E1 x E2
Operações
Interseção
Junção Natural
Divisão
Atribuição
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)
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
Select cod_motorista
From locacao
Intersect
(Select cod_motorista
From locacao)
■ 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;
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
¶
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
α
β
r 3
4
C
D
A
DIVISÃO B
C
1
2
3
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
■ 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)
∏ codc,nume,saldo (Cliente_Empréstimo Empréstimo )
∏ codc (σ coda = 01 (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)
∏ codc, coda (Cliente_Conta Conta)
÷ ∏ coda (σ codcid = 01 (Agência))
Projeção Generalizada
Funções Agregadas
Outer Join
α α 7
α β 7
β β 3
β β 10
27
coda g sum(saldo) as soma_saldo (Conta)
■ Junção Externa Direita (right outer Join)
Empréstimo Cliente_Empréstimo
Deleção
Inserção
Atualização
Conta ← Conta – σ coda = 01 (Conta )
■ Deletar todos os registros de empréstimo com saldo entre 0 a 50
■ 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
Conta ← Conta ∪ {(01, A973, 1200)}
Cliente_Conta ← Cliente_Conta ∪ {(02, 01)}
■ 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)
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
Conta ← ∏ numc, coda, saldo * 1.05 (Conta)
■ 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))
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).
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)
ou
Ou
R1← Π codVenda
(σ codCliente = Cliente_codCliente ^ nome = “Paulo”
(Cliente× Venda))
Ou
R1← Π codVenda
(σ nome = “Paulo” (Cliente Venda))
Π cod_registro, nome
(σ responsavel = True
(Registro Cliente))
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))
11. Mostre o título de todos os filmes que foram vendidos e nunca foram locados.
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))