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
Operaes
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> ] ;
nro_cli 1 2 3 4
cod_vend 1 1 1 2
nro_cli 1 2 3 4
cod_vend 1 1 1 2
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
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
nome_vend
Adriana Roberto Adriana Roberto Adriana Roberto Adriana Roberto
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
Clusula ORDER BY
Ordena as tuplas que aparecem no resultado de uma consulta
asc (padro): ordem ascendente desc: ordem descendente
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
relao argumento 1
condio_juno
relao argumento 2
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
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
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
nome_vend
Adriana Adriana Adriana Roberto
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
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
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
4 c y
Null c
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
Caractersticas
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
Observao
operaes oferecidas dependem do SGBD
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
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)
NOT EXISTS
... WHERE NOT EXISTS (lista)
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
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)
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
( relao argumento )
relao resultado de alguma operao da lgebra relacional
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
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
Exemplos
Qual a mdia dos preos?
AVG(preo) (vinho) SELECT AVG (preo) FROM vinho
217,125
Exemplos
Quantos vinhos existem na relao vinho?
COUNT (vinho_id) (vinho)
SELECT COUNT (vinho_id) FROM vinho
8
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
Resposta
recupera os valores para as funes somente para aqueles grupos que satisfazem condio imposta na clusula HAVING
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