Este documento descreve as principais operações da álgebra relacional, incluindo união, interseção, diferença, produto cartesiano, seleção, projeção e junção. Também explica como consultas SQL são baseadas nestas operações e incluem cláusulas como SELECT, FROM, WHERE, GROUP BY e HAVING.
3. Álgebra Relacional
• Álgebra relacional é uma linguagem de consulta
téorica
– usuários não a usam diretamente. É muito
complicada para ser usada diretamente.
• Porém, a álgebra relacional é usada
internamente em todos os SGBDs
– outras linguagens de consulta são traduzidas em
álgebra relacional.
4. Operações da Álgebra Relacional
• Operações derivadas da teoria dos conjuntos
– União
– Interseção
– Diferença
– Produto Cartesiano
• Operações relacionais especiais
– Seleção
– Projeção
– Junção (natural)
5. Operações da Álgebra Relacional
União:
R U S: Obtém a união das tuplas em R e S.
Ilegal se R e S têm números diferentes de atributos.
R S
R A B A B
a1 b1 a2 b2
S a2 b2 a3 b3
A B
R S a1 b1
a2 b2
a3 b3
6. Operações da Álgebra Relacional
Diferença
R-S: obtém as tuplas em R que não estão em S.
Ilegal se R e S têm números diferentes de atributos
R R A B S A B
S a1 b1 a2 b2
a2 b2 a3 b3
S
R - S A B
a1 b1
7. Operações da Álgebra Relacional
Interseção
R S: Obtém a interseção das tuplas de R e S.
Ilegal se R e S têm números diferentes de atributos.
R R A B S A B
S a1 b1 a2 b2
a2 b2 a3 b3
R S A B
a2 b2
8. Operações da Álgebra Relacional
Seleção:
Seleciona todas as tuplas que satisfazem à condição de
seleção de uma relação R.
R
R A B
a1 b1
a2 b2
R [A = ‘a1’]
A B
a1 b1
R [expressão de seleção]
9. Operações da Álgebra Relacional
Projeção:
Produz uma nova relação com apenas alguns atributos
de R, removendo tuplas duplicadas.
R
R A B
a1 b1
a2 b2
R [B] B
b1
b2
R [A1, ... , An]
10. Operações da Álgebra Relacional
Produto Cartesiano:
A relação resultante consiste de todas as possíveis
tuplas resultantes da combinação de duas tuplas, uma
de cada relação envolvida na operação.
R A B R x S A B C D
a1 b1 a1 b1 c2 d2
a2 b2 a1 b1 c3 d3
a2 b2 c2 d2
S C D a2 b2 c3 d3
c2 d2
c3 d3
11. Operações da Álgebra Relacional
Junção:
A junção de R com S = (R x S) [ expressão de seleção]
R R x S [ B = C]
A B
a1 b1
A B C D
a2 b2
a1 b1 b1 d3
a2 b2 b2 d2
S C D
b2 d2
b1 d3
12. Operações da Álgebra Relacional
Junção Natural:
Quando a condição de junção for a igualdade do valor de um atributo
comum e o atributo comum aparecer só uma vez no resultado.
R A B R * S
a1 b1
a2 b2 A B D
a1 b1 d3
a2 b2 d2
S C D
b2 d2
b1 d3
14. Estrutura Básica de consultas SQL
• SQL é baseada em operações de conjuntos e de álgebra
relacional com algumas modificações e extensões
• Uma consulta SQL básica tem a forma:
Select A1, A2, ..., Na
From r1, r2, ..., rm
Where P
– Ai’s representam atributos
– Ri’s representam relações
– P é um predicado.
• O resultado de uma consulta SQL é uma relação.
15. A cláusula SELECT
• A cláusula select corresponde à operação de
projeção
• É utilizada para listar os atributos pretendidos no
resultado da consulta.
• NOTA:
– O SQL não permite o caracter ‘-’ nos nomes,
portanto deverá utilizar, por exemplo, nome_cliente
em vez de nome-cliente num sistema existente.
• NOTE:
– As maiúsculas e minúsculas não são distinguidas
em nomes da linguagem SQL.
16. A cláusula SELECT
• Exemplos
– Listar os nomes de todos os clientes
– Um asterisco na cláusula select denota
“todos os atributos”
Select nome Select *
From Cliente From Cliente
17. A cláusula SELECT
• O SQL permite duplicações nas relações e nos
resultados de consultas.
• Para forçar a eliminação de duplicações, inserir a
palavra-chave distinct após select.
– Apresentar os endereços de todos clientes, sem
repetições
Select distinct endereço
From Cliente
• A palavra-chave all indica que os duplicados não
devem ser removidos.
Select all endereço
From Cliente
18. A cláusula SELECT
• A cláusula select pode conter expressões aritméticas
envolvendo as operações, +, –, *, e /, com
argumentos constantes ou atributos
• Dependendo das implementações, encontram-se
normalmente definidas uma biblioteca de funções.
• A consulta:
Select procodigo, preço, taxa*100
From Produto
• Devolve uma relação idêntica à relação Produto,
exceto que o atributo taxa é multiplicado por 100.
19. A cláusula FROM
• A cláusula from corresponde à operação de
produto cartesiano
• Indica as relações a consultar na avaliação da
expressão.
– Encontrar o produto cartesiano Cliente x Pedido
Select *
From Cliente, Pedido
20. A cláusula WHERE
• A cláusula where corresponde ao predicado de
seleção
• É formada por um predicado envolvendo
atributos de relações que aparecem na
cláusula from.
– Encontrar telefone dos clientes que se chamam
‘João da Silva’
Select telefone
From Cliente
Where nome=‘João da Silva’
21. A cláusula WHERE
• Os resultados de comparações podem ser
combinados por intermédio dos conectivos lógicos
and, or, e not.
• Podem-se aplicar comparações ao resultado de
expressões aritméticas.
– Encontrar os códigos dos produtos do pedido número 203,
cujas quantidades são superiores a dois itens
Select produto
From Itens
Where pedido=203 and quantidade>2
22. A cláusula WHERE
• Operador de comparação between para
especificar condições em que um valor
deve estar contido num intervalo de
valores (incluindo os seus extremos).
• Para negar a condição pode-se colocar
o conectivo not antes de between.
23. A cláusula WHERE
• Apresentar os códigos dos produtos
cujos preços estão entre R$5,00 e
R$30,00
Select procodigo
From Produto
Where preço between 5 and 30
• Para negar a condição pode-se colocar
o conectivo not antes de between.
Select procodigo
From Produto
Where taxa not between 0,2 and 0,35
24. Operações com cadeias de
Caracteres
• SQL inclui um mecanismo de concordância de padrões para
comparações envolvendo cadeias de caracteres.
• Os padrões são descritos recorrendo a dois caracteres especiais:
– percentagem(%): concorda com qualquer subcadeia.
– sublinhado (_): concorda com qualquer carácter.
• A SQL suporta uma variedade de operações com cadeias de
caracteres, tais como:
– concatenação (utilizando “||”), conversão de maiúsculas para
minúsculas (e vice versa), calcular o comprimento, extração de
subcadeias, etc.
25. Operações com cadeias de Caracteres
• Listar todos os clientes cujo endereço inclua
“Rua Nélio Rodrigues” .
Select nome
From Cliente
Where endereço like ‘% Rua Nélio Rodrigues %’
• Encontrar uma cadeia de caracteres que de
fato contenha o símbolo de porcentagem
– Ex.: 10%
like ‘10%’
26. A operação de renomeação AS
• A linguagem SQL permite a renomeação
de relações e atributos recorrendo à
cláusula as :
old_name as new_name
• Listar os nome e códigos dos pedidos
de cada cliente, renomeando a coluna
pedcodigo para codPedido
Select c.nome, p.pedcodigo as codPedido
From Cliente as c, Pedido as p
Where c.ccodigo = p.pedcodigo
27. A operação de renomeação AS
• Caso se pretenda utilizar um nome com
espaços, esse nome deverá ser
colocado entre aspas.
Select c.nome, p.pedcodigo as “codigo do Pedido”
From Cliente as c, Pedido as p
Where c.ccodigo = p.pedcodigo
28. A operação de ordenação ORDER
BY
• Listar em ordem alfabética os nomes de todos os clientes que
possuem algum pedido
Select distinct nome
From Cliente as c, Pedido as p
Where c.ccodigo = p.pedcodigo
Order by nome;
• Pode-se especificar desc para ordenação descrescente ou
asc para ordenação ascendente, para cada atributo; por
omissão, assume-se ordem ascendente.
Order by nome desc;
• Pode-se ter mais do que uma chave de ordenação, separando-as
com vírgulas
29. Funções de Agregação
• Estas funções aplicam-se a multiconjuntos
de valores de uma coluna de uma relação,
devolvendo um único valor como resultado
– avg: valor médio
– min: valor mínimo
– max: valor máximo
– sum: soma dos valores
– count: número de valores
30. Funções de Agregação
• Determinar o preço médio dos produtos comprados no dia
16/03/2008.
Select AVG(preço)
From Pedido as p, Itens as i, Produto as pr
Where p.data=’16/03/2008’ and
p.pedcodigo=i.produto and
i.produto=pr.procodigo
• Calcular a quantidade de clientes
Select COUNT(ccodigo)
From Cliente
• Encontrar o número de clientes com nomes diferentes
Select COUNT(distinct nome)
From Cliente
31. Funções de agregação – GROUP BY
• Listar o número de pedidos por cliente.
Select c.nome, COUNT(p.pedcodigo)
From Cliente as c, Pedido as p
Where c.ccodifgo=p.cliente
Group By c.nome;
• Atenção:
– Atributos na cláusula select fora de funções de
agregação têm de aparecer na lista group by
– Se aparecer mais do que um atributo em group
by, então cada grupo é formado pelas tuplas com
valores iguais em todos esses os atributos
32. Funções de agregação – Having
• Listar o número de pedidos por cliente, para clientes
que tiverem mais de 5 pedidos
Select c.nome, COUNT(p.pedcodigo) as numeroPedidos
From Cliente as c, Pedido as p
Where c.ccodifgo=p.cliente
Group By c.nome
Having numeroPedidos > 5
• Nota:
– predicados na cláusula having são aplicados depois
da formação dos grupos, enquanto que os predicados
na cláusula where são aplicados antes da formação
dos grupos.
33. Operações com Conjuntos
• As operações com conjuntos union, intersect, e
except (minus no Oracle9i) operam sobre relações e
correspondem aos operadores
• Cada uma das operações anteriores elimina as duplicações
automaticamente.
• Para reter duplicados deve-se utilizar as respectivas versões
multiconjunto union all, intersect all e except all
• Suponha que uma tupla ocorre m vezes em R e n vezes
em S, então ele ocorre:
– m + n vezes em R union all S
– min(m,n) vezes em R intersect all S
– max(0, m – n) vezes em R except all S
34. Operações com Conjuntos - Union
• Listar todos os clientes que realizaram pedidos
com mais de 5 itens ou contendo algum
produto de preço>R$30,00
(Select c.nome
From Cliente as c, Pedido as p, Produto as pr
Where c.ccodifgo=p.cliente and
p.pedcodigo=i.pedido and
i.quantidade>5)
UNION
(Select c.nome
From Cliente as c, Pedido as p, Produto as pr
Where c.ccodifgo=p.cliente and
p.pedcodigo=i.pedido and
i.produto=pr.procodigo and
i.preço>30)
35. Operações com Conjuntos - Intersect
• Listar todos os clientes que realizaram pedidos
com mais de 5 itens e contendo algum
produto de preço>R$30,00
(Select c.nome
From Cliente as c, Pedido as p, Produto as pr
Where c.ccodifgo=p.cliente and
p.pedcodigo=i.pedido and
i.quantidade>5)
INTERSECT
(Select c.nome
From Cliente as c, Pedido as p, Produto as pr
Where c.ccodifgo=p.cliente and
p.pedcodigo=i.pedido and
i.produto=pr.procodigo and
i.preço>30)
36. Operações com Conjuntos - Except
• Listar todos os clientes que realizaram pedidos
com mais de 5 itens mas não contendo algum
produto de preço>R$30,00
(Select c.nome
From Cliente as c, Pedido as p, Produto as pr
Where c.ccodifgo=p.cliente and
p.pedcodigo=i.pedido and
i.quantidade>5)
EXCEPT
(Select c.nome
From Cliente as c, Pedido as p, Produto as pr
Where c.ccodifgo=p.cliente and
p.pedcodigo=i.pedido and
i.produto=pr.procodigo and
i.preço>30)
38. Exercício de Fixação
• Atividades:
– 1. Fazer o esquema relacional acima;
– 2.Inserir o empregado André que trabalham no projeto
chamado CID do departamento de computação;
– 3.Inserir o empregado Suzana que trabalha no projeto
chamado CID do departamento de computação;
– 4. Inserir o empregado Lívia que é gerente dos
empregados André e Suzana;
– 5. Inserir o departamento de estatística e seus projetos:
KDE, SUDO, MQRO, ACLT.
39. Ora, a fé é a certeza daquilo que
esperamos e a prova das coisas que
não vemos.
Hebreus 11:1
Até a próxima aula!