Você está na página 1de 50

lgebra Relacional e

SQL
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Banco de Dados
Profa. Dra. Cristina Dutra de Aguiar Ciferri
lgebra Relacional
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Maneira terica de se manipular o banco
de dados relacional
Linguagem de consulta procedural
usurios especificam os dados necessrios
e como obt-los
Consiste de um conjunto de operaes
entrada: uma ou duas relaes
sada: uma nova relao resultado
Operaes
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Fundamentais
seleo
projeo
produto cartesiano
renomear
unio
diferena de conjuntos
Adicionais
interseco de
conjuntos
juno natural
diviso
agregao
SQL DML
SELECT <lista de atributos e funes>
FROM <lista de tabelas>
[ WHERE predicado ]
[ GROUP BY <atributos de agrupamento> ]
[ HAVING <condio para agrupamento> ] [
ORDER BY <lista de atributos> ] ;
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
lgebra Relacional: Seleo
Seleciona tuplas que satisfaam
condio de seleo

condio_seleo
( relao argumento )
relao
resultado de alguma
operao da lgebra
relacional
pode envolver operadores
de comparao
(=, >, , <, , )
pode combinar condies
usando-se , ,
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
lgebra Relacional: Seleo
cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend)
nro_cli nome_cli end_cli saldo cod_vend
1 Mrcia Rua X 100,00 1
2 Cristina Avenida 1 10,00 1
3 Manoel Avenida 3 234,00 1
4 Rodrigo Rua X 137,00 2
lgebra Relacional: Projeo
Projeta as colunas solicitadas (i.e. produz
um subconjunto vertical)

lista_atributos
( relao argumento )
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
relao
resultado de alguma
operao da lgebra
relacional
lista de atributos
os atributos so separados
por vrgula
lgebra Relacional: Projeo
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend)
nro_cli nome_cli end_cli saldo cod_vend
1 Mrcia Rua X 100,00 1
2 Cristina Avenida 1 10,00 1
3 Manoel Avenida 3 234,00 1
4 Rodrigo Rua X 137,00 2
lgebra Relacional: Produto
Cartesiano
Combina tuplas de duas relaes
relaes no precisam ter atributos comum
Tuplas da relao resultante
todas as combinaes de tuplas possveis
entre as relaes participantes

relao argumento 1 relao argumento 2

relao
resultado de alguma operao da lgebra relacional
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Relaes Cliente e Vendedor
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend)
vendedor (cod_vend, nome_vend)
nro_cli nome_cli end_cli saldo cod_vend
1 Mrcia Rua X 100,00 1
2 Cristina Avenida 1 10,00 1
3 Manoel Avenida 3 234,00 1
4 Rodrigo Rua X 137,00 2
cod_vend nome_vend
1 Adriana
2 Roberto
Cliente Vendedor
grau: nmero de atributos
de cliente + nmero de
atributos de vendedor
nmero de tuplas: nmero de
tuplas de cliente * nmero de
tuplas de vendedor
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
nro_cli nome_cli end_cli saldo cliente.
cod_vend
vendedor.
cod_vend
nome_vend
1 Mrcia Rua X 100,00 1 1 Adriana
1 Mrcia Rua X 100,00 1 2 Roberto
2 Cristina Avenida 1 10,00 1 1 Adriana
2 Cristina Avenida 1 10,00 1 2 Roberto
3 Manoel Avenida 3 234,00 1 1 Adriana
3 Manoel Avenida 3 234,00 1 2 Roberto
4 Rodrigo Rua X 137,00 2 1 Adriana
4 Rodrigo Rua X 137,00 2 2 Roberto
lgebra Relacional: Renomear
Renomeia
nome da relao
nomes dos atributos da relao
nome da relao e nomes dos atributos

S(B
1
,B
2
, ..., B
n
)
(relao)
nome antigo da relao nome novo da relao
nomes novos dos atributos
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
lgebra Relacional: Renomear
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Exemplos

comprador
(cliente)

(cdigo, nome, rua, saldo, vendedor)


(cliente)

comprador (cdigo, nome, rua, saldo, vendedor)


(cliente)
Observao
indicada para ser utilizada quando uma
relao usada mais do que uma vez
para responder consulta
SQL: SELECT-FROM-WHERE
SELECT <lista de atributos>
FROM <lista de tabelas>
[WHERE condies de seleo]
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL lgebra Relacional
SELECT projeo
FROM produto cartesiano
WHERE seleo
Clusula ORDER BY
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Ordena as tuplas que aparecem no
resultado de uma consulta
asc (padro): ordem ascendente
desc: ordem descendente
Ordenao pode ser especificada em
vrios atributos
a ordenao referente ao primeiro atributo
prioritria. Se houver valores repetidos, ento
utilizada a ordenao referente ao segundo
atributo, e assim por diante
Clusula AS
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Renomeia
atributos
deve aparecer na clusula SELECT
til para a visualizao das respostas na tela
relaes
deve aparecer na clusula FROM
til quando a mesma relao utilizada mais
do que uma vez na mesma consulta
Sintaxe
nome_antigo AS nome_novo
lgebra Relacional: Juno
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Concatena tuplas relacionadas de duas
relaes
Passos:
forma um produto cartesiano das relaes
faz uma seleo forando igualdade sobre os
atributos que aparecem nas relaes
lgebra Relacional: Juno
relao argumento 1
condio_juno
relao argumento 2
relao
resultado de alguma operao da lgebra relacional
Sintaxe
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Juno (Exemplo)
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Passo 1:
formar um produto cartesiano das relaes
nro_cli nome_cli end_cli saldo cliente.
cod_vend
vendedor.
cod_vend
nome_vend
1 Mrcia Rua X 100,00 1 1 Adriana
1 Mrcia Rua X 100,00 1 2 Roberto
2 Cristina Avenida 1 10,00 1 1 Adriana
2 Cristina Avenida 1 10,00 1 2 Roberto
3 Manoel Avenida 3 234,00 1 1 Adriana
3 Manoel Avenida 3 234,00 1 2 Roberto
4 Rodrigo Rua X 137,00 2 1 Adriana
4 Rodrigo Rua X 137,00 2 2 Roberto
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Juno (Exemplo)
Passo 2:
fazer uma seleo forando igualdade sobre os
atributos que aparecem nas relaes
nro_cli nome_cli end_cli saldo cliente.
cod_vend
vendedor.
cod_vend
nome_vend
1 Mrcia Rua X 100,00 1 1 Adriana
1 Mrcia Rua X 100,00 1 2 Roberto
2 Cristina Avenida 1 10,00 1 1 Adriana
2 Cristina Avenida 1 10,00 1 2 Roberto
3 Manoel Avenida 3 234,00 1 1 Adriana
3 Manoel Avenida 3 234,00 1 2 Roberto
4 Rodrigo Rua X 137,00 2 1 Adriana
4 Rodrigo Rua X 137,00 2 2 Roberto
Juno (Exemplo)
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
nro_cli nome_cli end_cli saldo cliente.
cod_vend
vendedor.
cod_vend
nome_vend
1 Mrcia Rua X 100,00 1 1 Adriana
2 Cristina Avenida 1 10,00 1 1 Adriana
3 Manoel Avenida 3 234,00 1 1 Adriana
4 Rodrigo Rua X 137,00 2 2 Roberto
SQL: Juno (Primeiras Verses)
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Clusulas SELECT e WHERE
especificam atributos com mesmo nome
usando o nome da relao e o nome do
atributo (nome_relao.nome_atributo)
Clusula FROM
possui mais do que uma relao
Clusula WHERE
inclui as condies de juno (igualdade
sobre os atributos que aparecem nas
relaes)
Juno (Exemplo)
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SELECT nro_cli, nome_cli, end_cli,
saldo, vendedor.cod_vend,
nome_vend
FROM cliente, vendedor
WHERE cliente.cod_vend =
vendedor.cod_vend
SQL-92: Juno
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SELECT nro_cli, nome_cli, end_cli,
saldo, vendedor.cod_vend,
nome_vend
FROM cliente JOIN vendedor ON
cliente.cod_vend =
vendedor.cod_vend
lgebra e SQL: Juno
[INNER] JOIN
R S
somente as tuplas de R que tm tuplas
correspondentes em S e vice-versa aparecem
no resultado
LEFT [OUTER] JOIN
R S
mantm cada tupla de R na tabela de juno
preenche com valores nulos as tuplas de S que
no correspondem coluna de juno em R
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
RIGHT [OUTER] JOIN
R S
mantm cada tupla de S na tabela de juno
preenche com valores nulos as tuplas de R que
no correspondem coluna de juno em S
FULL [OUTER]JOIN
R S
mantm cada tupla de R e de S na tabela de
juno
preenche com valores nulos as tuplas que no
correspondem coluna de juno
lgebra e SQL: Juno
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
[INNER] JOIN
R S R S
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
A B C
1 a x
2 b y
3 a y
4 c y
A D
1 d
2 d
5 e
R.A S.A B C D
1 1 a x d
2 2 b y d
LEFT [OUTER] JOIN
R S R S
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
A B C
1 a x
2 b y
3 a y
4 c y
A D
1 d
2 d
5 e
R.A S.A B C D
1 1 a x d
2 2 b y d
3 Null a y Null
4 Null c y Null
RIGHT [OUTER] JOIN
R S R S
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
A B C
1 a x
2 b y
3 a y
4 c y
A D
1 d
2 d
5 e
R.A S.A B C D
1 1 a x d
2 2 b y d
Null 5 Null Null e
FULL [OUTER]JOIN
R S R S
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
A B C
1 a x
2 b y
3 a y
4 c y
A D
1 d
2 d
5 e
R.A S.A B C D
1 1 a x d
2 2 b y d
3 Null a y Null
4 Null c y Null
Null 5 Null Null e
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Operaes sobre Conjuntos
Unem duas relaes
Operaes
unio
interseco
diferena
Caractersticas
atuam sobre relaes compatveis
eliminam tuplas duplicadas da relao
resultado
Duas relaes so compatveis se:
possuem o mesmo grau
seus atributos possuem os mesmos
domnios (os domnios dos i-simos
atributos de cada relao so
os mesmos)
lgebra Relacional: Operaes
sobre Conjuntos
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Unio (R S)
gera uma relao que contm todas as tuplas
pertencentes a R, a S, ou a ambas R e S
Interseco (R S)
gera uma relao que contm todas as tuplas
pertencentes tanto a R quanto a S
Diferena (R S)
gera uma relao que contm todas as tuplas
pertencentes a R que no pertencem a S
SQL: Operaes sobre
Conjuntos
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Observao
operaes oferecidas dependem do SGBD
SQL lgebra Relacional
UNION
INTERSECT
MINUS
Exemplo
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Liste os nomes dos clientes que possuem
nomes iguais aos nomes de vendedores.
SELECT nome_cli
FROM cliente
INTERSECT
SELECT nome_vend
FROM vendedor
SQL: Subconsultas Aninhadas
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Subconsulta
expresso SELECT ... FROM ... WHERE ...
aninhada dentro de outra consulta
Aplicaes mais comuns
testes para membros de conjuntos
comparaes de conjuntos
cardinalidade de conjuntos
Observao
a mesma consulta SQL pode ser escrita de
diversas maneiras
Membros de um Conjunto
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
IN
testa se um atributo ou uma lista de atributos
membro do conjunto
NOT IN
verifica a ausncia de um membro em um
conjunto
Conjunto:
coleo de valores produzidos por uma
clusula SELECT ... FROM ... WHERE ...
Exemplo
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Liste os nmeros dos clientes que tm
nome igual ao nome de um vendedor.

SELECT nro_cli
FROM cliente
WHERE nome_cli IN
(SELECT nome_vend
FROM vendedor)
Cardinalidade de Conjuntos
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
EXISTS
... WHERE EXISTS (lista)
a condio verdadeira quando a lista
(resultado de uma consulta) no for
vazia
NOT EXISTS
... WHERE NOT EXISTS (lista)
a condio verdadeira quando a
lista for vazia
Exemplo
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Liste os nmeros dos clientes que tm
nome igual ao nome de um vendedor.
SELECT nro_cli
FROM cliente
WHERE EXISTS
(SELECT *
FROM vendedor
WHERE cliente.nome_cli =
vendedor.nome_vend)
lgebra Relacional: Diviso
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Diviso de duas relaes R e S
todos os valores de um atributo de R que
fazem referncia a todos os valores de
um atributo de S
Utilizada para consultas que incluam o
termo para todos ou em todos
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
R: atende S:
cod_vend
(vendedor) R S
nro_cli
1
cliente (nro_cli, nome_cli, end_cli, saldo)
atende (nro_cli, cod_vend)
vendedor (cod_vend, nome_vend)
lgebra Relacional: Exemplo
Liste os nmeros dos clientes que j
foram atendidos por todos os
vendedores.
nro_cli cod_vend
9 12
1 04
1 66
4 03
5 11
8 04
8 74
cod_vend
66
04
SQL: Exemplo
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Liste os nmeros dos clientes que j foram
atendidos por todos os vendedores.
SELECT nro_cli
FROM cliente
WHERE NOT EXISTS
( (SELECT cod_vend
FROM vendedor)
MINUS
(SELECT cod_vend
FROM atende
WHERE cliente.nro_cli = atende.nro_cli)
)
lgebra Relacional: Agregao
Permite a utilizao de funes de
agregao

atributos_agrupamento

funes_agregao
( relao argumento )
relao
resultado de alguma
operao da lgebra
relacional
lista de atributos de
agrupamento
os atributos so separados
por vrgula
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: GROUP BY-HAVING
SELECT <lista de atributos e funes>
FROM <lista de tabelas>
[ WHERE predicado ]
[ GROUP BY <atributos de agrupamento> ]
[ HAVING <condio para agrupamento> ]
[ ORDER BY <lista de atributos> ] ;
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Funes de Agregao
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Funes
Mdia: AVG( )
Mnimo: MIN( )
Mximo: MAX( )
Total: SUM( )
Contagem: COUNT( )
Observao
DISTINCT: no considera valores duplicados
ALL: inclui valores duplicados
Funes de Agregao
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Caractersticas
recebem uma coleo de valores como
entrada
retornam um nico valor
SQL: Entrada
sum( ) e avg( ): conjunto de nmeros
demais funes: tipos de dados numricos e
no-numricos
Funes de Agregao
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
vinho (vinho_id, nome_vinho, tipo_vinho, preo, vincola_id)
vinho_id nome_vinho tipo_vinho preo vincola_id
10 Amanda tinto 100,00 1
09 Belinha branco 200,00 1
05 Camila ros 300,00 1
15 Daniela branco 250,00 2
27 Eduarda branco 150,00 2
48 Fernanda tinto 7,00 2
13 Gabriela tinto 397,00 3
12 Helena branco 333,00 3
Exemplos
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Qual a mdia dos preos?


AVG(preo)
(vinho)
SELECT AVG (preo)
FROM vinho
Qual o vinho mais barato e qual o vinho
mais caro?

MIN(preo), MAX(preo)
(vinho)
SELECT MIN (preo), MAX (preo)
FROM vinho
217,125
7,00, 397,00
Exemplos
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Quantos vinhos existem na relao
vinho?

COUNT (vinho_id)
(vinho)
SELECT COUNT (vinho_id)
FROM vinho
Quantos tipos de vinho diferentes
existem na relao vinho?


COUNT-DISTINCT (tipo_vinho)
(vinho)
SELECT COUNT (DISTINCT tipo_vinho
FROM vinho
8
3
SQL: Clusula GROUP BY
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Funcionalidade
permite aplicar uma funo de agregao
no somente a um conjunto de tuplas, mas
tambm a um grupo de conjunto de tuplas
Grupo de conjunto de tuplas
conjunto de tuplas que possuem o mesmo
valor para os atributos de agrupamento
Semntica da respostas
atributos de agrupamento no GROUP BY
tambm devem aparecer no SELECT

Você também pode gostar