Você está na página 1de 57

Banco de Dados lgebra Relacional e SQL Profa. Dra.

Cristina Dutra de Aguiar Ciferri


lgebra Relacional e
SQL
Banco de Dados
Profa. Dra. Cristina Dutra de Aguiar Ciferri

Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
lgebra Relacional
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Operaes
Fundamentais
seleo
projeo
produto cartesiano
renomear
unio
diferena de conjuntos
Adicionais
interseco de
conjuntos
juno natural
diviso
agregao
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
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
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
lgebra Relacional: Projeo
%
lista_atributos
( relao argumento )
relao
resultado de alguma
operao da lgebra
relacional
lista de atributos
os atributos so separados
por vrgula
Projeta as colunas solicitadas (i.e. produz
um subconjunto vertical)
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
lgebra Relacional: Projeo
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
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
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
vendedor (cod_vend, nome_vend)
cod_vend nome_vend
1 Adriana
2 Roberto
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Cliente & Vendedor
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
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
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
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: SELECT-FROM-WHERE
SELECT <lista de atributos>
FROM <lista de tabelas>
[WHERE condies de seleo]
SQL lgebra Relacional
SELECT projeo
FROM produto cartesiano
WHERE seleo
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Clusula ORDER BY
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Clusula AS
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
lgebra Relacional: Juno
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
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)
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
Passo 1:
formar um produto cartesiano das relaes
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Juno (Exemplo)
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
Passo 2:
fazer uma seleo forando igualdade sobre os
atributos que aparecem nas relaes
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Juno (Exemplo)
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Juno (Primeiras Verses)
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)
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Juno (Exemplo)
SELECT nro_cli, nome_cli, end_cli,
saldo, vendedor.cod_vend,
nome_vend
FROM cliente, vendedor
WHERE cliente.cod_vend =
vendedor.cod_vend
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL-92: Juno
SELECT nro_cli, nome_cli, end_cli,
saldo, vendedor.cod_vend,
nome_vend
FROM cliente JOIN vendedor ON
cliente.cod_vend =
vendedor.cod_vend
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
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
A B C A D R.A S.A B C D
1 a x 1 d 1 1 a x d
2 b y 2 d 2 2 b y d
3 a y 5 e
4 c y
R S R S
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
LEFT [OUTER] JOIN
A B C A D R.A S.A B C D
1 a x 1 d 1 1 a x d
2 b y 2 d 2 2 b y d
3 a y 5 e 3 Null a y Null
4 c y 4 Null c y Null
R S R S
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
RIGHT [OUTER] JOIN
A B C A D R.A S.A B C D
1 a x 1 d 1 1 a x d
2 b y 2 d 2 2 b y d
3 a y 5 e Null 5 Null Null e
4 c y
R S R S
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
FULL [OUTER]JOIN
A B C A D R.A S.A B C D
1 a x 1 d 1 1 a x d
2 b y 2 d 2 2 b y d
3 a y 5 e 3 Null a y Null
4 c y 4 Null c y Null
Null 5 Null Null e
R S R S
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)
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
lgebra Relacional: Operaes
sobre Conjuntos
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Operaes sobre
Conjuntos
SQL lgebra Relacional
UNION !
INTERSECT "
MINUS (
Observao
operaes oferecidas dependem do SGBD
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Exemplo
Liste os nomes dos clientes que possuem
nomes iguais aos nomes de vendedores.

SELECT nome_cli
FROM cliente
INTERSECT
SELECT nome_vend
FROM vendedor

Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Subconsultas Aninhadas
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Membros de um Conjunto
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 ...
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Exemplo
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)
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Cardinalidade de Conjuntos
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Exemplo
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)
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
lgebra Relacional: Diviso
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 cod_vend cod_vend nro_cli
9 12 66 1
1 04 04
1 66
4 03 cliente (nro_cli, nome_cli, end_cli, saldo)
5 11 atende (nro_cli, cod_vend)
8 04 vendedor (cod_vend, nome_vend)
8 74
lgebra Relacional: Exemplo
Liste os nmeros dos clientes que j
foram atendidos por todos os
vendedores.
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Exemplo
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)
)
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
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
Funes
Mdia: AVG( )
Mnimo: MIN( )
Mximo: MAX( )
Total: SUM( )
Contagem: COUNT( )
Observao
DISTINCT: no considera valores duplicados
ALL: inclui valores duplicados
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Funes de Agregao
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Funes de Agregao
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
vinho (vinho_id, nome_vinho, tipo_vinho, preo, vincola_id)
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Exemplos
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Exemplos
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Clusula GROUP BY
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Exemplo
Qual o preo mais alto e a mdia dos
preos por tipo de vinho?
'
(tipo_vinho, maior preo, preo mdio)

(
tipo_vinho
!
MAX (preo), AVG (preo)
(vinho))

SELECT tipo_vinho,
MAX (preo) AS maior preo,
AVG (preo) AS preo mdio
FROM vinho
GROUP BY tipo_vinho

Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Soluo do Exemplo
As tuplas da tabela vinho so divididas em grupo,
cada grupo contendo o mesmo tipo de valor para
o atributo de agrupamento tipo_vinho
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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Consideraes adicionais
a funo MAX e a funo AVG so aplicadas
a cada grupo de tuplas separadamente
a clusula SELECT inclui somente os
atributos de agrupamento e as funes a
serem aplicadas a cada grupo de tuplas
o comando SELECT pode possuir clusula
WHERE de qualquer complexidade
SQL: Soluo do Exemplo
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Soluo do Exemplo
tipo_vinho maior preo preo mdio
branco 333 233,25
ros 300 300
tinto 397 168
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Clusula HAVING
Funcionalidade
permite especificar uma condio de
seleo para grupos, melhor do que para
tuplas individuais
Resposta
recupera os valores para as funes
somente para aqueles grupos que
satisfazem condio imposta na clusula
HAVING
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Exemplo
Qual o preo mais alto e a mdia dos preos
por tipo de vinho, para mdias de preos
superiores a R$200,00
SELECT tipo_vinho, MAX (preo), AVG (preo)
FROM vinho
GROUP BY tipo_vinho
HAVING AVG (preo) > 200

tipo_vinho max(preo) avg(preo)
branco 333 233,25
ros 300 300
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Processamento da
Consulta
Passos
aplica-se o predicado que aparece na
clusula WHERE
coloca-se as tuplas que satisfazem a
clusula WHERE em grupos por meio da
clusula GROUP BY
aplica-se a clusula HAVING a cada grupo
remove-se os grupos que no satisfazem o
predicado da clusula HAVING
exibe-se as colunas listadas na clusula
SELECT

Você também pode gostar