Document

Propaganda
BANCO DE DADOS
Universidade do Estado de Santa Catarina
Centro de Ciências Tecnológicas
Departamento de Ciência da Computação
Prof. Alexandre Veloso de Matos
[email protected]
ROTEIRO
Operações da Álgebra Relacional
Operadores Especiais da Álgebra Relacional
Renomeação
Operadores Binários da Álgebra Relacional
União, Diferença, Intersecção
Junção
Junção Natural
ÁLGEBRA RELACIONAL
Operações que permitem ao usuário especificar solicitações de
recuperação de dados, cujo resultado será uma nova relação.
Uma sequência de operações que utilizem operadores algébricos forma
uma expressão de álgebra relacional.
OPERAÇÕES DA ÁLGEBRA RELACIONAL
Operações da AR desenvolvidas especificamente para os bancos de
dados relacionais:
Seleção.
Projeção.
Produto Cartesiano.
Junção.
Renomear.
União.
...
OPERADORES NA ÁLGEBRA RELACIONAL
Classificação dos operadores:
Fundamentais:
Unários: seleção, projeção;
Binários: produto cartesiano, união e diferença.
Derivados:
Binários: intersecção, junção e divisão.
Especiais
Renomeação (unário) e atribuição
Operador de alteração (unário)
JUNÇÃO (JOIN)
O objetivo dessa operação binária é combinar tuplas RELACIONADAS
de ambas tabelas (relações) formando uma tupla única.
Difere de uma operação simples de produto cartesiano por incluir
também uma operação de seleção.
É útil em consultas complexas em que o produto cartesiano possa
resultar em combinações inconsistentes.
Há diferentes formatos de efetuar essa operação:
Junção Natural (Natural ou Inner Join)
Junções Externas (Outer Join):
Left Join
Right Join
Full Join
JUNÇÕES EXTERNAS (OUTER JOINS)
Junção na qual as tuplas de uma ou ambas as relações que não são
combinadas são mesmo assim preservadas no resultado.
JUNÇÕES EXTERNAS (OUTER JOINS)
Três tipos:
Junção externa à esquerda (left [outer] join):
Tuplas da relação à esquerda são preservadas na tabela resultante da junção;
Preenche com valores nulos as tuplas da relação à direita que NÃO correspondem ao atributo da junção.
Notação:
Junção externa à direita (right [outer] join):
Tuplas da relação à direita são preservadas na tabela resultante da junção;
Preenche com valores nulos as tuplas da relação à esquerda que NÃO correspondem ao atributo da
junção.
Notação:
Junção externa completa (full [outer] join):
Tuplas de ambas as relações são preservadas;
Preenche com valores nulos as tuplas (de qualquer relação) que NÃO correspondem ao atributo da junção.
Notação:
EXEMPLOS
R2
R1
x
y
z
x
a
b
1
1
1
1
1
1
2
1
2
2
1
2
3
3
3
4
4
4
5
5
5
x
y
z
a
b
1
1
1
1
1
2
1
2
1
2
3
3
3
5
5
5
x
y
z
a
b
x
y
z
a
b
1
1
1
1
1
1
1
1
1
1
2
1
2
1
2
2
1
2
1
2
3
3
3
4
4
5
5
5
4
4
4
4
MAPEAMENTO PARA SQL
πa1, ..., an (σ c (t1 θ X t2))
θ = t1.x > t2.x
SELECT a1, ..., an
FROM t1 LEFT JOIN t2
ON t1.x > t2.x
WHERE c
EXEMPLOS
Álgebra
(paciente θ X consulta)
θ = paciente.cdPaciente = consulta.cdPaciente
πnome (σ data = “05/12/03”
(consulta θ X medico))
θ = medico.cdMedico = consulta.cdMedico
SQL
SELECT *
FROM paciente LEFT JOIN consulta
ON
paciente.cdPaciente =
consulta.cdPaciente
SELECT nome
FROM consulta RIGHT JOIN
medico ON
medico.cdMedico =
consulta.cdMedico
WHERE data = “2005-12-03”
OUTROS EXEMPLOS
Mostrar os nomes dos pacientes e os seus respectivos planos de saúde
incluindo os que não possuem planos.
SELECT nmPaciente, dePlanoSaude
FROM Paciente p
LEFT OUTER JOIN plano_saude ps
ON p.cdPlanoSaude = ps.cdPlanoSaude
OUTROS EXEMPLOS
Selecione a razão social do convênio, nome e especialização dos
médicos. Considerar todos os convênios, tendo eles médicos conveniados
ou não.
SELECT deRazaoSocial, nmMedico, deEspecializacao
FROM Convenio c
LEFT OUTER JOIN (medico_convenio mc , medico m)
ON c.cdConvenio = mc.cdConvenio
AND mc.cdMedico = m.cdMedico
EXERCÍCIOS DE FIXAÇÃO (ENTREGA ATÉ 13/05)
Mostrar os dados de todos os laboratórios incluindo os que não estão
vinculados a nenhum convênio.
Mostrar os dados de todos os convênios incluindo os que não possuem
nenhum laboratório associado.
Selecione os médicos, os nomes dos convênios, os nomes dos laboratórios,
respectivamente de cada médico, mesmo os que não possuem
laboratório ou convênio associado.
DIVISÃO
Operação que implica que o número de atributos de R1 seja maior que o número de
atributos de R2.
Se R1 tiver n atributos e R2 tiver m atributos, o resultado será uma relação com n−m atributos.
Nesse caso, o resultado sempre será todas as tuplas de R1 que fazem referência a
todos as tuplas de R2.
Ou seja, trata-se de um operador útil para consultas em que se emprega a frase:
“para todos” ou “em todos”.
DIVISÃO
Passo 1:
Decompor a relação R1 em duas partes:
R1a com n−m atributos e R1b com m atributos.
R1b é uma relação que possui valores de atributos em comum com R2.
Passo 2:
O resultado são todas as tuplas de R1a que tenham correspondência com todos
as tuplas de R2 em R1b.
DIVISÃO – EXEMPLO 1
R1
R2
R1
÷
R 2
x
y
z
z
x
y
1
1
1
1
1
1
1
2
1
1
2
2
1
1
2
1
2
2
2
3
1
3
se grau(R1)>grau(R2) então
Selecione todos atributos de R1 que fazem referência a todos valores de um
atributo de R2
DIVISÃO – EXEMPLO 2
R1
R3
R1
x
y
z
y
z
x
1
1
1
1
1
1
1
2
1
2
1
1
2
2
2
3
1
3
÷
R3
2
se grau(R1)>grau(R3) então
Selecione todos atributos de R1 que fazem referência a todos valores de um
atributo de R3
DIVISÃO – EXEMPLO 3
R1
R4
x
y
z
y
1
1
1
1
1
2
1
2
2
1
1
2
2
2
3
1
3
R1
÷
R 4
x
z
1
1
se grau(R1)>grau(R4) então
Selecione todos atributos de R1 que fazem referência a todos valores de um
atributo de R4
DIVISÃO
Mapeamento para SQL
Em SQL, não existe um operador direto para a divisão
É necessário, portanto, combinar sua utilização com outros operadores
Download