Você está na página 1de 45

Banco de Dados

Álgebra Relacional

DCC-UFLA
Prof. Denilson Alves Pereira
denilsonpereira@dcc.ufla.br

http://lattes.cnpq.br/4120230814124499

versão dos slides: nov/2017


Conteúdo

Introdução
Operações Básicas
Operações de Conjunto
Operações Adicionais

DCC-UFLA Prof. Denilson Alves Pereira 2


Introdução

A Álgebra Relacional é uma linguagem formal para o


modelo relacional
Inclui um conjunto de operações para manipular o banco
de dados
Solicitações de recuperação de dados são especificadas
como expressões da álgebra relacional
O resultado de uma operação é uma nova relação
Cada resultado pode ser manipulado novamente, em
sequência, formando uma expressão da álgebra relacional
A álgebra relacional é usada como base para a
implementação e otimização de consultas em SGBDR’s

DCC-UFLA Prof. Denilson Alves Pereira 3


Operações Básicas:
Seleção e Projeção

DCC-UFLA Prof. Denilson Alves Pereira 4


Seleção

A operação de Seleção é usada para selecionar um


subconjunto de tuplas de uma relação
Notação: <cond>(R)
<cond> especifica uma condição de seleção
envolve nomes de atributos, constantes e operadores de
comparação (<, >, =, ≠, ≤, ≥)
conectados por operadores booleanos (and, or, not)
R é uma expressão da álgebra relacional
o nome da relação é a expressão mais simples

DCC-UFLA Prof. Denilson Alves Pereira 5


Seleção - Exemplo

Dado o esquema:
Funcionario (idFunc, nomeFunc, sexo, salario, idDepto)
Selecione os funcionários que pertencem ao
departamento de número 2
idDepto = 2 (Funcionario)
Selecione os funcionários do sexo feminino que recebem
salário superior a 8.000,00
sexo = ‘F’ AND salario > 8.000,00 (Funcionario)

DCC-UFLA Prof. Denilson Alves Pereira 6


Seleção - Exemplo

Funcionario
idFunc nomeFunc sexo salario idDepto
1111 João M 9.000 1
2222 Maria F 8.200 1
3333 Ana F 1.500 2
4444 Pedro M 1.200 3
5555 Rafael M 4.000 2
6666 Marina F 9.900 3

Selecione os funcionários que pertencem ao


departamento de número 2
idDepto = 2 (Funcionario)
Resultado:
idFunc nomeFunc sexo salario idDepto
3333 Ana F 1.500 2
5555 Rafael M 4.000 2

DCC-UFLA Prof. Denilson Alves Pereira 7


Seleção - Exemplo

Funcionario
idFunc nomeFunc sexo salario idDepto
1111 João M 9.000 1
2222 Maria F 8.200 1
3333 Ana F 1.500 2
4444 Pedro M 1.200 3
5555 Rafael M 4.000 2
6666 Marina F 9.900 3

Selecione os funcionários do sexo feminino que recebem


salário superior a 8.000,00
sexo = ‘F’ AND salario > 8.000,00 (Funcionario)
Resultado:
idFunc nomeFunc sexo salario idDepto
2222 Maria F 8.200 1
6666 Marina F 9.900 3

DCC-UFLA Prof. Denilson Alves Pereira 8


Seleção

A Seleção é uma operação unária, ou seja, aplicada a uma


única relação
Aplicada a cada tupla individualmente
As condições de seleção não podem envolver mais de uma
tupla
O grau (número de atributos) da relação resultante é o
mesmo da relação original
A operação é comutativa
<cond1>(<cond2>(R)) = <cond2>(<cond1>(R))
Uma combinação em cascata é equivalente a uma
condição com AND
<cond1>(<cond2>(...<condn>(R)) = <cond1> AND<cond2> AND … <condn>(R))
DCC-UFLA Prof. Denilson Alves Pereira 9
Projeção

A operação de Projeção é usada para selecionar um


subconjunto dos atributos de uma relação
Notação: <lista-de-atributos>(R)
<lista-de-atributos> lista de atributos a ser
recuperada
R é uma expressão da álgebra relacional

DCC-UFLA Prof. Denilson Alves Pereira 10


Projeção - Exemplo

Funcionario
idFunc nomeFunc sexo salario idDepto
1111 João M 9.000 1
2222 Maria F 8.200 1
3333 Ana F 1.500 2
4444 Pedro M 1.200 3
5555 Rafael M 4.000 2
6666 Marina F 9.900 3

Selecione o nome e o salário dos funcionários


nomeFunc, salario (Funcionario)
nomeFunc salario
João 9.000
Maria 8.200
Resultado: Ana 1.500
Pedro 1.200
Rafael 4.000
Marina 9.900
DCC-UFLA Prof. Denilson Alves Pereira 11
Projeção

A Projeção é também uma operação unária


O resultado não contém tuplas duplicadas
duplicatas podem ocorrer se a lista de atributos contém
somente atributos não chave da relação
A operação NÃO é comutativa
<lista1>(<lista2>(R)) ≠ <lista2>(<lista1>(R))
Além disso
<lista1>(<lista2>(R)) = <lista1>(R)
desde que a <lista2> contenha os atributos em <lista1>;
caso contrário, o lado esquerdo é uma expressão
incorreta

DCC-UFLA Prof. Denilson Alves Pereira 12


Sequência de Operações

Sequência escrita em uma única expressão


Funcionario
idFunc nomeFunc sexo salario idDepto
1111 João M 9.000 1
2222 Maria F 8.200 1
3333 Ana F 1.500 2
4444 Pedro M 1.200 3
5555 Rafael M 4.000 2
6666 Marina F 9.900 3

Selecione o nome e o salário dos funcionários que


pertencem ao departamento número 2
nomeFunc, salario (idDepto = 2 (Funcionario))
nomeFunc salario
Ana 1.500
Resultado: Rafael 4.000
DCC-UFLA Prof. Denilson Alves Pereira 13
Sequência de Operações

Sequência escrita com resultados intermediários


Funcionario
idFunc nomeFunc sexo salario idDepto
1111 João M 9.000 1
2222 Maria F 8.200 1
3333 Ana F 1.500 2
4444 Pedro M 1.200 3
5555 Rafael M 4.000 2
6666 Marina F 9.900 3

Selecione o nome e o salário dos funcionários que pertencem ao


departamento número 2 Temp
idFunc nomeFunc sexo salario idDepto
Temp ← idDepto = 2 (Funcionario) 3333 Ana F 1.500 2
5555 Rafael M 4.000 2
Resultado ← nomeFunc, salario (Temp)
Resultado
nomeFunc salario
Ana 1.500
Resultado: Rafael 4.000
DCC-UFLA Prof. Denilson Alves Pereira 14
Operação Renomear

Os atributos nas relações resultantes podem ser renomeados


Para isso, liste os novos nomes dos atributos entre parênteses
Funcionario
idFunc nomeFunc sexo salario idDepto
1111 João M 9.000 1
2222 Maria F 8.200 1
3333 Ana F 1.500 2
4444 Pedro M 1.200 3
5555 Rafael M 4.000 2
6666 Marina F 9.900 3

Exemplo:
Resultado(nome, salario) ← nomeFunc, salario(idDepto = 2 (Funcionario))
Resultado
nome salario
Resultado: Ana 1.500
Rafael 4.000
DCC-UFLA Prof. Denilson Alves Pereira 15
Operação Renomear

Também existe a operação renomear formal, usando o


símbolo ρ (rho)
Notação (3 formas):
rS(B1, B2, …, Bn)(R) renomeia a relação e seus atributos
rS(R) renomeia a relação
r(B1, B2, …, Bn)(R) renomeia os atributos
Exemplo:
rFunc(id, nome, depto) (idFunc, nomeFunc, idDepto (Funcionario))
Func
id nome depto
Resultado: 1111 João 1
2222 Maria 1
... ... ...
DCC-UFLA Prof. Denilson Alves Pereira 16
Operações de Conjuntos

DCC-UFLA Prof. Denilson Alves Pereira 17


União, Interseção e Diferença

Operações matemáticas padrão sobre conjuntos


União: R U S
inclui todas as tuplas que estão na relação R, ou na relação
S, ou em ambas
Interseção: R  S
inclui todas as tuplas que estão na relação R e na relação S
Diferença: R – S
inclui todas as tuplas que estão na relação R mas não estão
na relação S
São operações binárias, ou seja, envolvem duas relações
Tuplas duplicadas são eliminadas

DCC-UFLA Prof. Denilson Alves Pereira 18


União - Exemplo

Funcionario
idFunc nomeFunc sexo salario idSuperv idDepto
1111 João M 9.000 null 1
2222 Maria F 8.200 1111 1
3333 Ana F 1.500 5555 2
4444 Pedro M 1.200 6666 3
5555 Rafael M 4.000 1111 2
6666 Marina F 9.900 1111 3

Selecione a identificação dos funcionários que pertencem ao


departamento de número 2 ou que supervisionam
diretamente algum funcionário do departamento número 2
t1
t1 ← idFunc (idDepto = 2 (Funcionario) idFunc t2
result
3333 idSuperv
t2 ← idSuperv (idDepto = 2 (Funcionario) 5555 5555
idFunc
1111
1111
result (idFunc) ← t1 U t2 3333
5555
DCC-UFLA Prof. Denilson Alves Pereira 19
Interseção - Exemplo

Funcionario
idFunc nomeFunc sexo salario idSuperv idDepto
1111 João M 9.000 null 1
2222 Maria F 8.200 1111 1
3333 Ana F 1.500 5555 2
4444 Pedro M 1.200 6666 3
5555 Rafael M 4.000 1111 2
6666 Marina F 9.900 1111 3

Selecione a identificação dos funcionários que pertencem ao


departamento de número 2 e que supervisionam diretamente
algum funcionário do departamento número 2
t1 ← idFunc (idDepto = 2 (Funcionario) t1
idFunc t2
t2 ← idSuperv (idDepto = 2 (Funcionario) 3333 idSuperv
5555 5555 result
result (idFunc) ← t1  t2 1111 idFunc

5555
DCC-UFLA Prof. Denilson Alves Pereira 20
Diferença - Exemplo

Funcionario
idFunc nomeFunc sexo salario idSuperv idDepto
1111 João M 9.000 null 1
2222 Maria F 8.200 1111 1
3333 Ana F 1.500 5555 2
4444 Pedro M 1.200 6666 3
5555 Rafael M 4.000 1111 2
6666 Marina F 9.900 1111 3

Selecione a identificação dos funcionários que pertencem ao


departamento de número 2 mas não supervisionam
diretamente algum funcionário do departamento número 2
t1 ← idFunc (idDepto = 2 (Funcionario) t1
idFunc t2
t2 ← idSuperv (idDepto = 2 (Funcionario) 3333 idSuperv
5555 5555 result
result (idFunc) ← t1  t2 1111 idFunc

3333
DCC-UFLA Prof. Denilson Alves Pereira 21
União, Interseção e Diferença

Nas três operações, as duas relações devem ter o mesmo tipo


de tuplas
Chamada de compatibilidade de união (ou compatibilidade de tipo)
Duas relações R(A1,A2,...,An) e S(B1,B2,...,Bn) são compatíveis
na união se tiverem o mesmo grau n e os seus atributos
correspondentes tiverem o mesmo domínio, ou seja, se os
domínios dom(Ai) = dom(Bi), 1 ≤ i ≤ n
As operações de União e Interseção são comutativas e
associativas
R U S = S U R e R  S = S  R.
R U (S U T) = (R U S) U T e (R  S)  T = R  (S  T)
A operação de Diferença não é comutativa
R–S ≠ S–R
DCC-UFLA Prof. Denilson Alves Pereira 22
Produto Cartesiano

O Produto Cartesiano, denotado por X, é uma operação


binária que não exige que as tabelas sejam compatíveis
na união
O resultado de R X S, onde R e S são relações, é a
combinação de cada tupla de R com cada tupla de S
A relação resultante possui todos os atributos de R e de S
Se R tem m tuplas e S tem n tuplas, o resultado terá m * n
tuplas (produto de m e n)
Não é uma operação muito usual pois recupera tuplas que
não fazem muito sentido
É mais útil quando seguida por uma operação de seleção
que combina valores de atributos das relações envolvidas

DCC-UFLA Prof. Denilson Alves Pereira 23


Produto Cartesiano - Exemplo

Funcionario Departamento
idFunc nomeFunc sexo salario idDepto idDepto nomeDepto
1111 João M 9.000 1 1 ADM
2222 Maria F 8.200 1 2 RH
3333 Ana F 1.500 2

Funcionario X Departamento

idFunc nomeFunc sexo salario idDepto idDepto nomeDepto


1111 João M 9.000 1 1 ADM
1111 João M 9.000 1 2 RH
2222 Maria F 8.200 1 1 ADM
2222 Maria F 8.200 1 2 RH
3333 Ana F 1.500 2 1 ADM
3333 Ana F 1.500 2 2 RH

DCC-UFLA Prof. Denilson Alves Pereira 24


Produto Cartesiano - Exemplo

Funcionario X Departamento
idFunc nomeFunc sexo salario idDepto idDepto nomeDepto
1111 João M 9.000 1 1 ADM
1111 João M 9.000 1 2 RH
2222 Maria F 8.200 1 1 ADM
2222 Maria F 8.200 1 2 RH
3333 Ana F 1.500 2 1 ADM
3333 Ana F 1.500 2 2 RH

Recupera os dados de cada funcionário e do


departamento ao qual ele pertence
Funcionario.idDepto = Departamento.idDepto(Funcionario X Departamento)
idFunc nomeFunc sexo salario idDepto idDepto nomeDepto
1111 João M 9.000 1 1 ADM
2222 Maria F 8.200 1 1 ADM
3333 Ana F 1.500 2 2 RH

DCC-UFLA Prof. Denilson Alves Pereira 25


Operações Adicionais:
Junção e Divisão

DCC-UFLA Prof. Denilson Alves Pereira 26


Junção

A operação de Junção (ou Junção Interna (Inner Join)),


visa simplificar operações que envolvem um produto
cartesiano seguido de uma operação de seleção
Notação: R ⋈<cond> S
<cond> especifica a condição de junção
composta por pares A op B, onde A é um atributo de
R, B é um atributo de S e op um operador de
comparação (<, >, =, ≠, ≤, ≥)
os pares podem ser conectados por AND
A relação resultante possui todos os atributos de R e de S
As tuplas de R e de S são combinadas, como no produto
cartesiano, mas somente as tuplas que satisfazem a
condição de junção são incluídas no resultado
DCC-UFLA Prof. Denilson Alves Pereira 27
Junção - Exemplo

Funcionario Departamento
idFunc nomeFunc sexo salario idDepto idDepto nomeDepto
1111 João M 9.000 1 1 ADM
2222 Maria F 8.200 1 2 RH
3333 Ana F 1.500 2

Recupera os dados de cada funcionário e do


departamento ao qual ele pertence
Funcionario ⋈Funcionario.idDepto = Departamento.idDepto Departamento

idFunc nomeFunc sexo salario idDepto idDepto nomeDepto


1111 João M 9.000 1 1 ADM
2222 Maria F 8.200 1 1 ADM
3333 Ana F 1.500 2 2 RH

DCC-UFLA Prof. Denilson Alves Pereira 28


Junção - Exemplo

Recupera os dados de cada funcionário e do


departamento ao qual ele pertence
Funcionario ⋈Funcionario.idDepto = Departamento.idDepto Departamento
Equivalente a um produto cartesiano seguido de uma
seleção
Funcionario.idDepto = Departamento.idDepto(Funcionario X Departamento)

DCC-UFLA Prof. Denilson Alves Pereira 29


Junção

Junção Theta (Theta Join): junção com a condição geral


descrita anteriormente
Equijunção (Equijoin): junção envolvendo somente o
comparador de igualdade
É a forma mais comum de junção
Junção Natural (Natural Join): equijunção onde os dois
atributos de comparação têm o mesmo nome
Denotada por *

DCC-UFLA Prof. Denilson Alves Pereira 30


Junção Natural - Exemplo
Funcionario Departamento
idFunc nomeFunc sexo salario idDepto idDepto nomeDepto
1111 João M 9.000 1 1 ADM
2222 Maria F 8.200 1 2 RH
3333 Ana F 1.500 2

Recupera os dados de cada funcionário e do departamento


ao qual ele pertence
Funcionario * Departamento
idFunc nomeFunc sexo salario idDepto nomeDepto
1111 João M 9.000 1 ADM
2222 Maria F 8.200 1 ADM
3333 Ana F 1.500 2 RH

Equivalente a:
Funcionario ⋈Funcionario.idDepto = Departamento.idDepto Departamento
DCC-UFLA Prof. Denilson Alves Pereira 31
Divisão

A operação de Divisão, visa simplificar operações do tipo


encontrar as instâncias de uma relação R que aparecem juntas
com “todas” as instâncias de uma outra relação S
Consultas envolvendo o quantificador universal (∀)
Notação: R ÷ S
Condição necessária:
Os atributos X da relação S devem ser um subconjunto dos
atributos Z da relação R
Resultado:
Considere Y = Z – X, ou seja, Y é o conjunto de atributos
de R que não são atributos de S
A relação T resultante possui os atributos Y
E inclui cada tupla t em que os valores de t aparecem em R
em combinação com cada tupla em S
DCC-UFLA Prof. Denilson Alves Pereira 32
Divisão

Exemplo: T = R ÷ S
Z = {A,B}, X = {A} e Y = {B}
As tuplas b1 e b4 aparecem em R combinadas com
todas as três tuplas em S

DCC-UFLA Prof. Denilson Alves Pereira 33


Divisão - Exemplo
Funcionario Projeto Trabalha
idFunc nomeFunc sexo salario idDepto idProj nomeProj idFunc idProj horas
1111 João M 9.000 1 10 ProdX 1111 10 25
2222 Maria F 8.200 1 20 ProdY 1111 20 15
3333 Ana F 1.500 2 30 Info 2222 20 40
3333 10 20
3333 20 20

Recupera os ids dos funcionários que trabalham em todos


os projetos que “João” trabalha
t1 ← idFunc (nomeFunc=“João” (Funcionario))
t2 t3 result
t2 ← idProj (t1 * Trabalha) idProj idFunc idProj idFunc
10 1111 10 1111

t3 ← idFunc, idProj (Trabalha) 20 1111 20 3333


2222 20

result ← t3 ÷ t2 3333 10
3333 20

DCC-UFLA Prof. Denilson Alves Pereira 34


Outras Operações Adicionais

DCC-UFLA Prof. Denilson Alves Pereira 35


Álgebra Relacional Estendida

Operações adicionais da Álgebra Relacional para


atender solicitações comuns em SGBDRs
Projeção Generalizada
Funções de Agregação
Agrupamento
Junção Externa (Outer Join)
Melhoram o poder expressivo da Álgebra Relacional
original

DCC-UFLA Prof. Denilson Alves Pereira 36


Projeção Generalizada

Permite que funções sobre os atributos sejam


incluídas na lista de projeção
Notação:
F1, F2, …, Fn (R)
Exemplo:
idFunc, salario*0.25, salario–salario*0.25 (Funcionario)

os atributos podem ser renomeados:


r(idFunc, imposto, salarioLiquido) (idFunc, salario*0.25, salario–salario*0.25 (Funcionario))

DCC-UFLA Prof. Denilson Alves Pereira 37


Funções de Agregação

São funções de agregação matemática especificadas


sobre coleções de valores do banco de dados
Funções comuns:
Soma (SUM)
Média (AVG)
Máximo (MAX)
Mínimo (MIN)
Conta (COUNT)

DCC-UFLA Prof. Denilson Alves Pereira 38


Agrupamento

Agrupa tuplas pelo valor de alguns de seus atributos


Normalmente, depois do agrupamento aplica-se funções
de agregação independentemente para cada grupo
Notação:
Á (pronuncia-se F script)
<atributos agrupamento> Á<lista de funções> (R)

<atributos agrupamento> é uma lista de atributos da relação R


<lista de funções> é uma lista de pares (<função> <atributo>) com
as funções de agregação
A relação resultante tem os atributos de agrupamento mais um
atributo para cada elemento na lista de funções, e uma tupla para
agrupamento

DCC-UFLA Prof. Denilson Alves Pereira 39


Agrupamento e Agregação - Exemplo
Funcionario
idFunc nomeFunc sexo salario idSuperv idDepto
1111 João M 9.000 null 1
2222 Maria F 8.200 1111 1
3333 Ana F 1.500 5555 2
4444 Pedro M 1.200 6666 3
5555 Rafael M 4.000 1111 2
6666 Marina F 9.900 1111 3

Recupera, para cada departamento, o seu id, o seu


número de funcionários e seu salário médio
R1 ← idDeptoÁCONTA idFunc, MEDIA salario (Funcionario)
Resultado ← r(idDepto, noFuncs, salarioMedio) (R1)
Resultado
idDepto noFuncs salarioMedio
1 2 8.600
2 2 2.750
3 2 5.550
DCC-UFLA Prof. Denilson Alves Pereira 40
Agrupamento e Agregação - Exemplo
Funcionario Departamento
idFunc nomeFunc sexo salario idSuperv idDepto idDepto nomeDepto
1111 João M 9.000 null 1 1 ADM
2222 Maria F 8.200 1111 1 2 RH
3333 Ana F 1.500 5555 2 3 Projetos
4444 Pedro M 1.200 6666 3
5555 Rafael M 4.000 1111 2
6666 Marina F 9.900 1111 3

Recupera o nome dos departamentos que pagam um


salário médio superior a 5.000 para seus funcionários
R2
R1 ← idDeptoÁMEDIA salario (Funcionario) idDepto salarioMedio
1 8.600
R2 ← r(idDepto, salarioMedio) (R1) 2 2.750
3 5.550
R3 ← ssalarioMedio > 5000 (R2) Resultado
nomeDepto
Resultado ← pnomeDepto (R3 * Departamento) ADM
Projetos
DCC-UFLA Prof. Denilson Alves Pereira 41
Junção Externa (Outer Join)

A junção vista anteriormente é chamada de Junção Interna


(Inner Join). Nela, somente tuplas que possuem
correspondentes nas duas relações aparecem no resultado
Funcionario Dependente
idFunc nomeFunc sexo salario idDepto idFunc nomeDep parentesco
1111 João M 9.000 1 1111 Luiza filha
2222 Maria F 8.200 1 1111 Vítor filho
3333 Ana F 1.500 2 3333 Paulo cônjuge

Exemplo: Recupera os dados de cada funcionário e de


seus respectivos dependentes
Funcionario ⋈Funcionario.idFunc = Dependente.idFunc Dependente
idFunc nomeFunc sexo salario idDepto idFunc nomeDep parentesco
1111 João M 9.000 1 1111 Luiza filha
1111 João M 9.000 1 1111 Vítor filho
3333 Ana F 1.500 2 3333 Paulo cônjuge
DCC-UFLA Prof. Denilson Alves Pereira 42
Junção Externa (Outer Join)

A Junção Externa (Outer Join) mantém todas as tuplas da primeira


relação, ou todas da segunda, ou todas das duas relações no resultado
da junção, independentemente de elas possuírem ou não tuplas
correspondentes na outra relação
Funcionario Dependente
idFunc nomeFunc sexo salario idDepto idFunc nomeDep parentesco
1111 João M 9.000 1 1111 Luiza filha
2222 Maria F 8.200 1 1111 Vítor filho
3333 Ana F 1.500 2 3333 Paulo cônjuge

Exemplo: Recupera os dados de cada funcionário e de seus


respectivos dependentes. Se um funcionário não possuir
dependente, indicar isso com valor nulo
Funcionario ⟕Funcionario.idFunc = Dependente.idFunc Dependente
idFunc nomeFunc sexo salario idDepto idFunc nomeDep parentesco
1111 João M 9.000 1 1111 Luiza filha
1111 João M 9.000 1 1111 Vítor filho
2222 Maria F 8.200 1 null null null
.
3333 Ana F 1.500 2 3333 Paulo cônjuge
DCC-UFLA Prof. Denilson Alves Pereira 43
Junção Externa (Outer Join)

Tipos de junção externa:


Junção externa à esquerda (⟕)
Mantém todas as tuplas da relação à esquerda
Junção externa à direita (⟖)
Mantém todas as tuplas da relação à direita
Junção externa completa (⟗)
Mantém todas as tuplas das duas relações

DCC-UFLA Prof. Denilson Alves Pereira 44


Bibliografia Básica

ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de


Bancos de Dados. Pearson Education, 6a edição, 2011.
ISBN-978-85-7936-085-5, Capítulo 6

DCC-UFLA Prof. Denilson Alves Pereira 45

Você também pode gostar