You are on page 1of 57

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 )
pode envolver operadores de comparao (=, >, , <, , ) pode combinar condies usando-se , ,
Banco de Dados lgebra Relacional e SQL

relao resultado de alguma operao da lgebra relacional


Profa. Dra. Cristina Dutra de Aguiar Ciferri

lgebra Relacional: Seleo


cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend)

nro_cli 1 2 3 4

nome_cli Mrcia Cristina Manoel Rodrigo

end_cli Rua X Avenida 1 Avenida 3 Rua X

saldo 100,00 10,00 234,00 137,00

cod_vend 1 1 1 2

Banco de Dados lgebra Relacional e SQL

Profa. Dra. Cristina Dutra de Aguiar Ciferri

lgebra Relacional: Projeo


Projeta as colunas solicitadas (i.e. produz um subconjunto vertical) lista_atributos ( relao argumento )
lista de atributos os atributos so separados por vrgula relao resultado de alguma operao da lgebra relacional
Profa. Dra. Cristina Dutra de Aguiar Ciferri

Banco de Dados lgebra Relacional e SQL

lgebra Relacional: Projeo


cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend)

nro_cli 1 2 3 4

nome_cli Mrcia Cristina Manoel Rodrigo

end_cli Rua X Avenida 1 Avenida 3 Rua X

saldo 100,00 10,00 234,00 137,00

cod_vend 1 1 1 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
1 2 3 4

nome_cli
Mrcia Cristina Manoel Rodrigo

end_cli
Rua X Avenida 1 Avenida 3 Rua X

saldo
100,00 10,00 234,00 137,00

cod_vend
1 1 1 2

vendedor (cod_vend, nome_vend)


cod_vend
1 2
Banco de Dados lgebra Relacional e SQL

nome_vend
Adriana Roberto
Profa. Dra. Cristina Dutra de Aguiar Ciferri

Cliente Vendedor
nro_cli nome_cli
1 1 2 2 3 3 4 4 Mrcia Mrcia Cristina Cristina Manoel Manoel Rodrigo Rodrigo

end_cli
Rua X Rua X Avenida 1 Avenida 1 Avenida 3 Avenida 3 Rua X Rua X

saldo
100,00 100,00 10,00 10,00 234,00 234,00 137,00 137,00

cliente. vendedor. cod_vend cod_vend


1 1 1 1 1 1 2 2 1 2 1 2 1 2 1 2

nome_vend
Adriana Roberto Adriana Roberto Adriana Roberto Adriana Roberto

grau: nmero de atributos de cliente + nmero de atributos de vendedor


Banco de Dados lgebra Relacional e SQL

nmero de tuplas: nmero de tuplas de cliente * nmero de tuplas de vendedor


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(B1,B2, ..., Bn) (relao)


nome novo da relao nome antigo 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 SELECT FROM WHERE lgebra Relacional projeo produto cartesiano 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


Sintaxe

relao argumento 1

condio_juno

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

Juno (Exemplo)
nro_cli nome_cli
1 1 2 2 3 3 4 4 Mrcia Mrcia Cristina Cristina Manoel Manoel Rodrigo Rodrigo

end_cli
Rua X Rua X Avenida 1 Avenida 1 Avenida 3 Avenida 3 Rua X Rua X

saldo
100,00 100,00 10,00 10,00 234,00 234,00 137,00 137,00

cliente. vendedor. cod_vend cod_vend


1 1 1 1 1 1 2 2 1 2 1 2 1 2 1 2

nome_vend
Adriana Roberto Adriana Roberto Adriana Roberto Adriana 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
1 1 2 2 3 3 4 4 Mrcia Mrcia Cristina Cristina Manoel Manoel Rodrigo Rodrigo

end_cli
Rua X Rua X Avenida 1 Avenida 1 Avenida 3 Avenida 3 Rua X Rua X

saldo
100,00 100,00 10,00 10,00 234,00 234,00 137,00 137,00

cliente. vendedor. cod_vend cod_vend


1 1 1 1 1 1 2 2 1 2 1 2 1 2 1 2

nome_vend
Adriana Roberto Adriana Roberto Adriana Roberto Adriana 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
1 2 3 4 Mrcia Cristina Manoel Rodrigo

end_cli
Rua X Avenida 1 Avenida 3 Rua X

saldo
100,00 10,00 234,00 137,00

cliente. vendedor. cod_vend cod_vend


1 1 1 2 1 1 1 2

nome_vend
Adriana Adriana Adriana 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

lgebra e SQL: Juno


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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri

[INNER] JOIN
R A 1 2 3 B a b a C x y y A 1 2 5 S D d d e R S R.A S.A B C D 1 1 a x d 2 2 b y d

4 c y

Banco de Dados lgebra Relacional e SQL

Profa. Dra. Cristina Dutra de Aguiar Ciferri

LEFT [OUTER] JOIN


R A 1 2 3 B a b a C x y y A 1 2 5 S D d d e R.A S.A 1 1 2 2 3 Null 4 R S B C D a x d b y d a y Null y Null

4 c y

Null c

Banco de Dados lgebra Relacional e SQL

Profa. Dra. Cristina Dutra de Aguiar Ciferri

RIGHT [OUTER] JOIN


R A 1 2 3 4 B a b a c C x y y y A 1 2 5 S D d d e R S D d d e R.A S.A B C 1 1 a x 2 2 b y Null 5 Null Null

Banco de Dados lgebra Relacional e SQL

Profa. Dra. Cristina Dutra de Aguiar Ciferri

FULL [OUTER]JOIN
R A 1 2 3 B a b a C x y y A 1 2 5 S D d d e R R.A S.A 1 1 2 2 3 Null B a b a S C x y y D d d Null

4 c y

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 Duas relaes so compatveis se:
unio interseco diferena
possuem o mesmo grau seus atributos possuem os mesmos domnios (os domnios dos i-simos atributos de cada relao so os mesmos)

Caractersticas

atuam sobre relaes compatveis eliminam tuplas duplicadas da relao resultado


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 UNION INTERSECT MINUS lgebra Relacional

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

lgebra Relacional: Exemplo


Liste os nmeros dos clientes que j foram atendidos por todos os vendedores.
S: cod_vend(vendedor)
cod_vend 12 04 66 03 11 04 74
Profa. Dra. Cristina Dutra de Aguiar Ciferri

R: atende
nro_cli 9 1 1 4 5 8 8

RS
nro_cli 1

cod_vend 66 04

cliente (nro_cli, nome_cli, end_cli, saldo) atende (nro_cli, cod_vend) vendedor (cod_vend, nome_vend)

Banco de Dados lgebra Relacional e SQL

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
Profa. Dra. Cristina Dutra de Aguiar Ciferri

lista de atributos de agrupamento os atributos so separados por vrgula


Banco de Dados lgebra Relacional e SQL

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 (vinho_id, nome_vinho, tipo_vinho, preo, vincola_id) vinho_id 10 09 05 15 27 48 13 12 nome_vinho Amanda Belinha Camila Daniela Eduarda Fernanda Gabriela Helena tipo_vinho tinto branco ros branco branco tinto tinto branco preo 100,00 200,00 300,00 250,00 150,00 7,00 397,00 333,00 vincola_id 1 1 1 2 2 2 3 3

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
217,125

Qual o vinho mais barato e qual o vinho mais caro?


MIN(preo), MAX(preo) (vinho) SELECT MIN (preo), MAX (preo) FROM vinho
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
8

Quantos tipos de vinho diferentes existem na relao vinho?


3 COUNT-DISTINCT (tipo_vinho) (vinho) SELECT COUNT (DISTINCT tipo_vinho FROM vinho
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 10 09 05 15 27 48 13 12 nome_vinho Amanda Belinha Camila Daniela Eduarda Fernanda Gabriela Helena tipo_vinho tinto branco ros branco branco tinto tinto branco preo 100,00 200,00 300,00 250,00 150,00 7,00 397,00 333,00 vincola_id 1 1 1 2 2 2 3 3

Banco de Dados lgebra Relacional e SQL

Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL: Soluo do Exemplo


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

Banco de Dados lgebra Relacional e SQL

Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL: Soluo do Exemplo


tipo_vinho branco ros tinto maior preo 333 300 397 preo mdio 233,25 300 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 branco ros max(preo) 333 300 avg(preo) 233,25 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
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri

You might also like