SlideShare uma empresa Scribd logo
1 de 57
Baixar para ler offline
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 teórica de se manipular o banco
de dados relacional
• Linguagem de consulta procedural
– usuários especificam os dados necessários
e como obtê-los
• Consiste de um conjunto de operações
– entrada: uma ou duas relações
– saída: uma nova relação resultado
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Operações
• Fundamentais
– seleção
– projeção
– produto cartesiano
– renomear
– união
– diferença de conjuntos
• Adicionais
– intersecção de
conjuntos
– junção natural
– divisão
– agregação
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL DML
SELECT <lista de atributos e funções>
FROM <lista de tabelas>
[ WHERE predicado ]
[ GROUP BY <atributos de agrupamento> ]
[ HAVING <condição para agrupamento> ]
[ ORDER BY <lista de atributos> ] ;
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Álgebra Relacional: Seleção
• Seleciona tuplas que satisfaçam à
condição de seleção
σcondição_seleção ( relação argumento )
• relação
• resultado de alguma
operação da álgebra
relacional
• pode envolver operadores
de comparação
(=, >, ≥, <, ≤, ≠)
• pode combinar condições
usando-se ∧, ∨,
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Álgebra Relacional: Seleção
cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend)
nro_cli nome_cli end_cli saldo cod_vend
1 Márcia 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: Projeção
πlista_atributos ( relação argumento )
• relação
• resultado de alguma
operação da álgebra
relacional
• lista de atributos
• os atributos são separados
por vírgula
• 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: Projeção
cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend)
nro_cli nome_cli end_cli saldo cod_vend
1 Márcia 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 relações
– relações não precisam ter atributos comum
• Tuplas da relação resultante
– todas as combinações de tuplas possíveis
entre as relações participantes
relação argumento 1 × relação argumento 2
• relação
• resultado de alguma operação da álgebra relacional
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Relações Cliente e Vendedor
cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend)
nro_cli nome_cli end_cli saldo cod_vend
1 Márcia 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 Márcia Rua X 100,00 1 1 Adriana
1 Márcia 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: número de atributos
de cliente + número de
atributos de vendedor
número de tuplas: número de
tuplas de cliente * número de
tuplas de vendedor
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Álgebra Relacional: Renomear
• Renomeia
– nome da relação
– nomes dos atributos da relação
– nome da relação e nomes dos atributos
ρS(B1,B2, ..., Bn) (relação)
nome antigo da relação
nome novo da relação
nomes novos dos atributos
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Álgebra Relacional: Renomear
• Exemplos
– ρcomprador (cliente)
– ρ(código, nome, rua, saldo, vendedor) (cliente)
– ρcomprador (código, nome, rua, saldo, vendedor) (cliente)
• Observação
–indicada para ser utilizada quando uma
relação é 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 condições de seleção]
SQL Álgebra Relacional
SELECT projeção
FROM produto cartesiano
WHERE seleção
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Cláusula ORDER BY
• Ordena as tuplas que aparecem no
resultado de uma consulta
– asc (padrão): ordem ascendente
– desc: ordem descendente
• Ordenação pode ser especificada em
vários atributos
– a ordenação referente ao primeiro atributo é
prioritária. Se houver valores repetidos, então
é utilizada a ordenação referente ao segundo
atributo, e assim por diante
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Cláusula AS
• Renomeia
– atributos
• deve aparecer na cláusula SELECT
• útil para a visualização das respostas na tela
– relações
• deve aparecer na cláusula FROM
• útil quando a mesma relação é 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: Junção
• Concatena tuplas relacionadas de duas
relações
• Passos:
– forma um produto cartesiano das relações
– faz uma seleção forçando igualdade sobre os
atributos que aparecem nas relações
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Álgebra Relacional: Junção
relação argumento 1 condição_junção relação argumento 2
• relação
• resultado de alguma operação da álgebra relacional
• Sintaxe
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Junção (Exemplo)
nro_cli nome_cli end_cli saldo cliente.
cod_vend
vendedor.
cod_vend
nome_vend
1 Márcia Rua X 100,00 1 1 Adriana
1 Márcia 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 relações
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Junção (Exemplo)
nro_cli nome_cli end_cli saldo cliente.
cod_vend
vendedor.
cod_vend
nome_vend
1 Márcia Rua X 100,00 1 1 Adriana
1 Márcia 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 seleção forçando igualdade sobre os
atributos que aparecem nas relações
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Junção (Exemplo)
nro_cli nome_cli end_cli saldo cliente.
cod_vend
vendedor.
cod_vend
nome_vend
1 Márcia 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: Junção (Primeiras Versões)
• Cláusulas SELECT e WHERE
– especificam atributos com mesmo nome
usando o nome da relação e o nome do
atributo (nome_relação.nome_atributo)
• Cláusula FROM
– possui mais do que uma relação
• Cláusula WHERE
– inclui as condições de junção (igualdade sobre
os atributos que aparecem nas relações)
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Junção (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: Junção
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: Junção
• [INNER] JOIN
– R S
• somente as tuplas de R que têm tuplas
correspondentes em S – e vice-versa – aparecem
no resultado
• LEFT [OUTER] JOIN
– R S
• mantém cada tupla de R na tabela de junção
• preenche com valores nulos as tuplas de S que
não correspondem à coluna de junção em R
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
• RIGHT [OUTER] JOIN
– R S
• mantém cada tupla de S na tabela de junção
• preenche com valores nulos as tuplas de R que
não correspondem à coluna de junção em S
• FULL [OUTER]JOIN
– R S
• mantém cada tupla de R e de S na tabela de
junção
• preenche com valores nulos as tuplas que não
correspondem à coluna de junção
Álgebra e SQL: Junção
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
Operações sobre Conjuntos
• Unem duas relações
• Operações
– união
– intersecção
– diferença
• Características
– atuam sobre relações compatíveis
– eliminam tuplas duplicadas da relação
resultado
Duas relações são compatíveis se:
• possuem o mesmo grau
• seus atributos possuem os mesmos
domínios (os domínios dos i-ésimos
atributos de cada relação são
os mesmos)
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Álgebra Relacional: Operações
sobre Conjuntos
• União (R  S)
– gera uma relação que contém todas as tuplas
pertencentes a R, a S, ou a ambas R e S
• Intersecção (R  S)
– gera uma relação que contém todas as tuplas
pertencentes tanto a R quanto a S
• Diferença (R − S)
– gera uma relação que contém todas as tuplas
pertencentes a R que não pertencem a S
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Operações sobre
Conjuntos
SQL Álgebra Relacional
UNION 
INTERSECT 
MINUS −
• Observação
– operações 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
– expressão SELECT ... FROM ... WHERE ...
aninhada dentro de outra consulta
• Aplicações mais comuns
– testes para membros de conjuntos
– comparações de conjuntos
– cardinalidade de conjuntos
• Observação
– 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 ausência de um membro em um
conjunto
• Conjunto:
– coleção de valores produzidos por uma
cláusula SELECT ... FROM ... WHERE ...
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Exemplo
• Liste os números dos clientes que têm
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 condição é verdadeira quando a lista
(resultado de uma consulta) não for
vazia
• NOT EXISTS
– ... WHERE NOT EXISTS (lista)
–a condição é verdadeira quando a
lista for vazia
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Exemplo
• Liste os números dos clientes que têm
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: Divisão
• Divisão de duas relações R e S
– todos os valores de um atributo de R que
fazem referência 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 números 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 números 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: Agregação
• Permite a utilização de funções de
agregação
atributos_agrupamento ξ funções_agregação
( relação argumento )
• relação
• resultado de alguma
operação da álgebra
relacional
• lista de atributos de
agrupamento
• os atributos são separados
por vírgula
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: GROUP BY-HAVING
SELECT <lista de atributos e funções>
FROM <lista de tabelas>
[ WHERE predicado ]
[ GROUP BY <atributos de agrupamento> ]
[ HAVING <condição para agrupamento> ]
[ ORDER BY <lista de atributos> ] ;
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Funções de Agregação
• Funções
– Média: AVG( )
– Mínimo: MIN( )
– Máximo: MAX( )
– Total: SUM( )
– Contagem: COUNT( )
• Observação
– DISTINCT: não considera valores duplicados
– ALL: inclui valores duplicados
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Funções de Agregação
• Características
– recebem uma coleção de valores como
entrada
– retornam um único valor
• SQL: Entrada
– sum( ) e avg( ): conjunto de números
– demais funções: tipos de dados numéricos e
não-numéricos
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Funções de Agregação
vinho_id nome_vinho tipo_vinho preço vinícola_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, preço, vinícola_id)
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Exemplos
• Qual a média dos preços?
– ξ AVG(preço) (vinho)
– SELECT AVG (preço)
FROM vinho
• Qual o vinho mais barato e qual o vinho
mais caro?
– ξ MIN(preço), MAX(preço) (vinho)
– SELECT MIN (preço), MAX (preço)
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 relação
vinho?
– ξ COUNT (vinho_id) (vinho)
– SELECT COUNT (vinho_id)
FROM vinho
• Quantos tipos de vinho diferentes
existem na relação 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: Cláusula GROUP BY
• Funcionalidade
– permite aplicar uma função de agregação
não somente a um conjunto de tuplas, mas
também 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
• Semântica da respostas
– atributos de agrupamento no GROUP BY
também devem aparecer no SELECT
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
Exemplo
• Qual o preço mais alto e a média dos
preços por tipo de vinho?
ρ (tipo_vinho, “maior preço”, “preço médio”)
(tipo_vinho ξ MAX (preço), AVG (preço) (vinho))
SELECT tipo_vinho,
MAX (preço) AS “maior preço”,
AVG (preço) AS “preço médio”
FROM vinho
GROUP BY tipo_vinho
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Solução do Exemplo
– As tuplas da tabela vinho são divididas em grupo,
cada grupo contendo o mesmo tipo de valor para
o atributo de agrupamento tipo_vinho
vinho_id nome_vinho tipo_vinho preço vinícola_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
• Considerações adicionais
– a função MAX e a função AVG são aplicadas
a cada grupo de tuplas separadamente
– a cláusula SELECT inclui somente os
atributos de agrupamento e as funções a
serem aplicadas a cada grupo de tuplas
– o comando SELECT pode possuir cláusula
WHERE de qualquer complexidade
SQL: Solução do Exemplo
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Solução do Exemplo
tipo_vinho maior preço preço médio
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: Cláusula HAVING
• Funcionalidade
– permite especificar uma condição de
seleção para grupos, melhor do que para
tuplas individuais
• Resposta
– recupera os valores para as funções
somente para aqueles grupos que
satisfazem à condição imposta na cláusula
HAVING
Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri
SQL: Exemplo
• Qual o preço mais alto e a média dos preços
por tipo de vinho, para médias de preços
superiores a R$200,00
SELECT tipo_vinho, MAX (preço), AVG (preço)
FROM vinho
GROUP BY tipo_vinho
HAVING AVG (preço) > 200
tipo_vinho max(preço) avg(preço)
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
cláusula WHERE
– coloca-se as tuplas que satisfazem a
cláusula WHERE em grupos por meio da
cláusula GROUP BY
– aplica-se a cláusula HAVING a cada grupo
– remove-se os grupos que não satisfazem o
predicado da cláusula HAVING
– exibe-se as colunas listadas na cláusula
SELECT

Mais conteúdo relacionado

Semelhante a Álgebra Linear e SQL Banco de Dados.pdf

Conceitos básicos, linguagem de consulta e álgebra
Conceitos básicos, linguagem de consulta e álgebraConceitos básicos, linguagem de consulta e álgebra
Conceitos básicos, linguagem de consulta e álgebraproseando
 
BDI - Aula 09 - SQL e Algebra Relacional
BDI - Aula 09 - SQL e Algebra RelacionalBDI - Aula 09 - SQL e Algebra Relacional
BDI - Aula 09 - SQL e Algebra RelacionalRodrigo Kiyoshi Saito
 
Big data e PostgreSQL
Big data e PostgreSQLBig data e PostgreSQL
Big data e PostgreSQLEuler Taveira
 
Base de Dados - Diagramas E-A (cont.)
Base de Dados - Diagramas E-A (cont.)Base de Dados - Diagramas E-A (cont.)
Base de Dados - Diagramas E-A (cont.)Mariana Hiyori
 
Postgresql como NewSQL - DevCamp 2014
Postgresql como NewSQL - DevCamp 2014Postgresql como NewSQL - DevCamp 2014
Postgresql como NewSQL - DevCamp 2014Matheus de Oliveira
 
Curso de Delphi - Banco de Dados
Curso de Delphi - Banco de DadosCurso de Delphi - Banco de Dados
Curso de Delphi - Banco de DadosJosé Araújo
 
introduao-a-sql-prof-anderson-cavalcanti-ufrn-ct-dca.pptx
introduao-a-sql-prof-anderson-cavalcanti-ufrn-ct-dca.pptxintroduao-a-sql-prof-anderson-cavalcanti-ufrn-ct-dca.pptx
introduao-a-sql-prof-anderson-cavalcanti-ufrn-ct-dca.pptxSaraR49
 
Banco de dados
Banco de dadosBanco de dados
Banco de dadosM Serafim
 
Mapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.pptMapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.pptJoberthSilva
 
Modelo Relacional
Modelo RelacionalModelo Relacional
Modelo RelacionalJoel Santos
 
LabMM4 (T06 - 12/13) - Auto-associações e Introdução ao SQL
LabMM4 (T06 - 12/13) - Auto-associações e Introdução ao SQLLabMM4 (T06 - 12/13) - Auto-associações e Introdução ao SQL
LabMM4 (T06 - 12/13) - Auto-associações e Introdução ao SQLCarlos Santos
 
1601PAPSUML-Cap12-destaqueDAO.ppt
1601PAPSUML-Cap12-destaqueDAO.ppt1601PAPSUML-Cap12-destaqueDAO.ppt
1601PAPSUML-Cap12-destaqueDAO.pptAlan5263
 

Semelhante a Álgebra Linear e SQL Banco de Dados.pdf (20)

Md7 banco dados
Md7 banco dadosMd7 banco dados
Md7 banco dados
 
Agbd aula4 sql_ddl
Agbd aula4 sql_ddlAgbd aula4 sql_ddl
Agbd aula4 sql_ddl
 
Conceitos básicos, linguagem de consulta e álgebra
Conceitos básicos, linguagem de consulta e álgebraConceitos básicos, linguagem de consulta e álgebra
Conceitos básicos, linguagem de consulta e álgebra
 
BDI - Aula 09 - SQL e Algebra Relacional
BDI - Aula 09 - SQL e Algebra RelacionalBDI - Aula 09 - SQL e Algebra Relacional
BDI - Aula 09 - SQL e Algebra Relacional
 
Bd ii material
Bd ii   materialBd ii   material
Bd ii material
 
Scc0241m01revisao
Scc0241m01revisaoScc0241m01revisao
Scc0241m01revisao
 
Big data e PostgreSQL
Big data e PostgreSQLBig data e PostgreSQL
Big data e PostgreSQL
 
Base de Dados - Diagramas E-A (cont.)
Base de Dados - Diagramas E-A (cont.)Base de Dados - Diagramas E-A (cont.)
Base de Dados - Diagramas E-A (cont.)
 
Postgresql como NewSQL - DevCamp 2014
Postgresql como NewSQL - DevCamp 2014Postgresql como NewSQL - DevCamp 2014
Postgresql como NewSQL - DevCamp 2014
 
Curso de Delphi - Banco de Dados
Curso de Delphi - Banco de DadosCurso de Delphi - Banco de Dados
Curso de Delphi - Banco de Dados
 
Banco de Dados Relacional Estendido
Banco de Dados Relacional EstendidoBanco de Dados Relacional Estendido
Banco de Dados Relacional Estendido
 
introduao-a-sql-prof-anderson-cavalcanti-ufrn-ct-dca.pptx
introduao-a-sql-prof-anderson-cavalcanti-ufrn-ct-dca.pptxintroduao-a-sql-prof-anderson-cavalcanti-ufrn-ct-dca.pptx
introduao-a-sql-prof-anderson-cavalcanti-ufrn-ct-dca.pptx
 
5 bdoo+bdor
5 bdoo+bdor5 bdoo+bdor
5 bdoo+bdor
 
Aula 01 Revisão
Aula 01   RevisãoAula 01   Revisão
Aula 01 Revisão
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
 
Mapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.pptMapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.ppt
 
Modelo Relacional
Modelo RelacionalModelo Relacional
Modelo Relacional
 
LabMM4 (T06 - 12/13) - Auto-associações e Introdução ao SQL
LabMM4 (T06 - 12/13) - Auto-associações e Introdução ao SQLLabMM4 (T06 - 12/13) - Auto-associações e Introdução ao SQL
LabMM4 (T06 - 12/13) - Auto-associações e Introdução ao SQL
 
1601PAPSUML-Cap12-destaqueDAO.ppt
1601PAPSUML-Cap12-destaqueDAO.ppt1601PAPSUML-Cap12-destaqueDAO.ppt
1601PAPSUML-Cap12-destaqueDAO.ppt
 
Banco de Dados Relacional Estendido
Banco de Dados Relacional EstendidoBanco de Dados Relacional Estendido
Banco de Dados Relacional Estendido
 

Mais de gabriel-colman

Slide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdf
Slide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdfSlide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdf
Slide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdfgabriel-colman
 
8-uml-e-modelagem-oo Introdução a UML.pdf
8-uml-e-modelagem-oo Introdução a UML.pdf8-uml-e-modelagem-oo Introdução a UML.pdf
8-uml-e-modelagem-oo Introdução a UML.pdfgabriel-colman
 
Definição Formal do MER(Conceitos do Modelo Relacional).pdf
Definição Formal do MER(Conceitos do Modelo Relacional).pdfDefinição Formal do MER(Conceitos do Modelo Relacional).pdf
Definição Formal do MER(Conceitos do Modelo Relacional).pdfgabriel-colman
 
14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdf14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdfgabriel-colman
 
Engenharia de Software: Processos de Software
Engenharia de Software: Processos de SoftwareEngenharia de Software: Processos de Software
Engenharia de Software: Processos de Softwaregabriel-colman
 

Mais de gabriel-colman (8)

Slide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdf
Slide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdfSlide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdf
Slide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdf
 
8-uml-e-modelagem-oo Introdução a UML.pdf
8-uml-e-modelagem-oo Introdução a UML.pdf8-uml-e-modelagem-oo Introdução a UML.pdf
8-uml-e-modelagem-oo Introdução a UML.pdf
 
Definição Formal do MER(Conceitos do Modelo Relacional).pdf
Definição Formal do MER(Conceitos do Modelo Relacional).pdfDefinição Formal do MER(Conceitos do Modelo Relacional).pdf
Definição Formal do MER(Conceitos do Modelo Relacional).pdf
 
14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdf14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdf
 
Engenharia de Software: Processos de Software
Engenharia de Software: Processos de SoftwareEngenharia de Software: Processos de Software
Engenharia de Software: Processos de Software
 
Introdução.pdf
Introdução.pdfIntrodução.pdf
Introdução.pdf
 
10 - JS OOP.pptx
10 - JS OOP.pptx10 - JS OOP.pptx
10 - JS OOP.pptx
 
shellsort.pdf
shellsort.pdfshellsort.pdf
shellsort.pdf
 

Álgebra Linear e SQL Banco de Dados.pdf

  • 1. 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
  • 2. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional • Maneira teórica de se manipular o banco de dados relacional • Linguagem de consulta procedural – usuários especificam os dados necessários e como obtê-los • Consiste de um conjunto de operações – entrada: uma ou duas relações – saída: uma nova relação resultado
  • 3. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Operações • Fundamentais – seleção – projeção – produto cartesiano – renomear – união – diferença de conjuntos • Adicionais – intersecção de conjuntos – junção natural – divisão – agregação
  • 4. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL DML SELECT <lista de atributos e funções> FROM <lista de tabelas> [ WHERE predicado ] [ GROUP BY <atributos de agrupamento> ] [ HAVING <condição para agrupamento> ] [ ORDER BY <lista de atributos> ] ;
  • 5. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional: Seleção • Seleciona tuplas que satisfaçam à condição de seleção σcondição_seleção ( relação argumento ) • relação • resultado de alguma operação da álgebra relacional • pode envolver operadores de comparação (=, >, ≥, <, ≤, ≠) • pode combinar condições usando-se ∧, ∨,
  • 6. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional: Seleção cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend) nro_cli nome_cli end_cli saldo cod_vend 1 Márcia 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
  • 7. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional: Projeção πlista_atributos ( relação argumento ) • relação • resultado de alguma operação da álgebra relacional • lista de atributos • os atributos são separados por vírgula • Projeta as colunas solicitadas (i.e. produz um subconjunto vertical)
  • 8. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional: Projeção cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend) nro_cli nome_cli end_cli saldo cod_vend 1 Márcia 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
  • 9. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional: Produto Cartesiano • Combina tuplas de duas relações – relações não precisam ter atributos comum • Tuplas da relação resultante – todas as combinações de tuplas possíveis entre as relações participantes relação argumento 1 × relação argumento 2 • relação • resultado de alguma operação da álgebra relacional
  • 10. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Relações Cliente e Vendedor cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend) nro_cli nome_cli end_cli saldo cod_vend 1 Márcia 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
  • 11. 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 Márcia Rua X 100,00 1 1 Adriana 1 Márcia 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: número de atributos de cliente + número de atributos de vendedor número de tuplas: número de tuplas de cliente * número de tuplas de vendedor
  • 12. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional: Renomear • Renomeia – nome da relação – nomes dos atributos da relação – nome da relação e nomes dos atributos ρS(B1,B2, ..., Bn) (relação) nome antigo da relação nome novo da relação nomes novos dos atributos
  • 13. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional: Renomear • Exemplos – ρcomprador (cliente) – ρ(código, nome, rua, saldo, vendedor) (cliente) – ρcomprador (código, nome, rua, saldo, vendedor) (cliente) • Observação –indicada para ser utilizada quando uma relação é usada mais do que uma vez para responder à consulta
  • 14. 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 condições de seleção] SQL Álgebra Relacional SELECT projeção FROM produto cartesiano WHERE seleção
  • 15. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Cláusula ORDER BY • Ordena as tuplas que aparecem no resultado de uma consulta – asc (padrão): ordem ascendente – desc: ordem descendente • Ordenação pode ser especificada em vários atributos – a ordenação referente ao primeiro atributo é prioritária. Se houver valores repetidos, então é utilizada a ordenação referente ao segundo atributo, e assim por diante
  • 16. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Cláusula AS • Renomeia – atributos • deve aparecer na cláusula SELECT • útil para a visualização das respostas na tela – relações • deve aparecer na cláusula FROM • útil quando a mesma relação é utilizada mais do que uma vez na mesma consulta • Sintaxe – nome_antigo AS nome_novo
  • 17. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional: Junção • Concatena tuplas relacionadas de duas relações • Passos: – forma um produto cartesiano das relações – faz uma seleção forçando igualdade sobre os atributos que aparecem nas relações
  • 18. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional: Junção relação argumento 1 condição_junção relação argumento 2 • relação • resultado de alguma operação da álgebra relacional • Sintaxe
  • 19. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Junção (Exemplo) nro_cli nome_cli end_cli saldo cliente. cod_vend vendedor. cod_vend nome_vend 1 Márcia Rua X 100,00 1 1 Adriana 1 Márcia 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 relações
  • 20. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Junção (Exemplo) nro_cli nome_cli end_cli saldo cliente. cod_vend vendedor. cod_vend nome_vend 1 Márcia Rua X 100,00 1 1 Adriana 1 Márcia 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 seleção forçando igualdade sobre os atributos que aparecem nas relações
  • 21. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Junção (Exemplo) nro_cli nome_cli end_cli saldo cliente. cod_vend vendedor. cod_vend nome_vend 1 Márcia 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
  • 22. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Junção (Primeiras Versões) • Cláusulas SELECT e WHERE – especificam atributos com mesmo nome usando o nome da relação e o nome do atributo (nome_relação.nome_atributo) • Cláusula FROM – possui mais do que uma relação • Cláusula WHERE – inclui as condições de junção (igualdade sobre os atributos que aparecem nas relações)
  • 23. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Junção (Exemplo) SELECT nro_cli, nome_cli, end_cli, saldo, vendedor.cod_vend, nome_vend FROM cliente, vendedor WHERE cliente.cod_vend = vendedor.cod_vend
  • 24. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL-92: Junção SELECT nro_cli, nome_cli, end_cli, saldo, vendedor.cod_vend, nome_vend FROM cliente JOIN vendedor ON cliente.cod_vend = vendedor.cod_vend
  • 25. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra e SQL: Junção • [INNER] JOIN – R S • somente as tuplas de R que têm tuplas correspondentes em S – e vice-versa – aparecem no resultado • LEFT [OUTER] JOIN – R S • mantém cada tupla de R na tabela de junção • preenche com valores nulos as tuplas de S que não correspondem à coluna de junção em R
  • 26. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri • RIGHT [OUTER] JOIN – R S • mantém cada tupla de S na tabela de junção • preenche com valores nulos as tuplas de R que não correspondem à coluna de junção em S • FULL [OUTER]JOIN – R S • mantém cada tupla de R e de S na tabela de junção • preenche com valores nulos as tuplas que não correspondem à coluna de junção Álgebra e SQL: Junção
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Operações sobre Conjuntos • Unem duas relações • Operações – união – intersecção – diferença • Características – atuam sobre relações compatíveis – eliminam tuplas duplicadas da relação resultado Duas relações são compatíveis se: • possuem o mesmo grau • seus atributos possuem os mesmos domínios (os domínios dos i-ésimos atributos de cada relação são os mesmos)
  • 32. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional: Operações sobre Conjuntos • União (R  S) – gera uma relação que contém todas as tuplas pertencentes a R, a S, ou a ambas R e S • Intersecção (R  S) – gera uma relação que contém todas as tuplas pertencentes tanto a R quanto a S • Diferença (R − S) – gera uma relação que contém todas as tuplas pertencentes a R que não pertencem a S
  • 33. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Operações sobre Conjuntos SQL Álgebra Relacional UNION  INTERSECT  MINUS − • Observação – operações oferecidas dependem do SGBD
  • 34. 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
  • 35. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Subconsultas Aninhadas • Subconsulta – expressão SELECT ... FROM ... WHERE ... aninhada dentro de outra consulta • Aplicações mais comuns – testes para membros de conjuntos – comparações de conjuntos – cardinalidade de conjuntos • Observação – a mesma consulta SQL pode ser escrita de diversas maneiras
  • 36. 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 ausência de um membro em um conjunto • Conjunto: – coleção de valores produzidos por uma cláusula SELECT ... FROM ... WHERE ...
  • 37. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Exemplo • Liste os números dos clientes que têm nome igual ao nome de um vendedor. SELECT nro_cli FROM cliente WHERE nome_cli IN (SELECT nome_vend FROM vendedor)
  • 38. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Cardinalidade de Conjuntos • EXISTS – ... WHERE EXISTS (lista) – a condição é verdadeira quando a lista (resultado de uma consulta) não for vazia • NOT EXISTS – ... WHERE NOT EXISTS (lista) –a condição é verdadeira quando a lista for vazia
  • 39. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Exemplo • Liste os números dos clientes que têm nome igual ao nome de um vendedor. SELECT nro_cli FROM cliente WHERE EXISTS (SELECT * FROM vendedor WHERE cliente.nome_cli = vendedor.nome_vend)
  • 40. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional: Divisão • Divisão de duas relações R e S – todos os valores de um atributo de R que fazem referência a todos os valores de um atributo de S • Utilizada para consultas que incluam o termo para todos ou em todos
  • 41. 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 números dos clientes que já foram atendidos por todos os vendedores.
  • 42. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Exemplo • Liste os números 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) )
  • 43. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional: Agregação • Permite a utilização de funções de agregação atributos_agrupamento ξ funções_agregação ( relação argumento ) • relação • resultado de alguma operação da álgebra relacional • lista de atributos de agrupamento • os atributos são separados por vírgula
  • 44. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: GROUP BY-HAVING SELECT <lista de atributos e funções> FROM <lista de tabelas> [ WHERE predicado ] [ GROUP BY <atributos de agrupamento> ] [ HAVING <condição para agrupamento> ] [ ORDER BY <lista de atributos> ] ;
  • 45. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Funções de Agregação • Funções – Média: AVG( ) – Mínimo: MIN( ) – Máximo: MAX( ) – Total: SUM( ) – Contagem: COUNT( ) • Observação – DISTINCT: não considera valores duplicados – ALL: inclui valores duplicados
  • 46. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Funções de Agregação • Características – recebem uma coleção de valores como entrada – retornam um único valor • SQL: Entrada – sum( ) e avg( ): conjunto de números – demais funções: tipos de dados numéricos e não-numéricos
  • 47. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Funções de Agregação vinho_id nome_vinho tipo_vinho preço vinícola_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, preço, vinícola_id)
  • 48. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Exemplos • Qual a média dos preços? – ξ AVG(preço) (vinho) – SELECT AVG (preço) FROM vinho • Qual o vinho mais barato e qual o vinho mais caro? – ξ MIN(preço), MAX(preço) (vinho) – SELECT MIN (preço), MAX (preço) FROM vinho 217,125 7,00, 397,00
  • 49. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Exemplos • Quantos vinhos existem na relação vinho? – ξ COUNT (vinho_id) (vinho) – SELECT COUNT (vinho_id) FROM vinho • Quantos tipos de vinho diferentes existem na relação vinho? – ξ COUNT-DISTINCT (tipo_vinho) (vinho) – SELECT COUNT (DISTINCT tipo_vinho FROM vinho 8 3
  • 50. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Cláusula GROUP BY • Funcionalidade – permite aplicar uma função de agregação não somente a um conjunto de tuplas, mas também 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 • Semântica da respostas – atributos de agrupamento no GROUP BY também devem aparecer no SELECT
  • 51. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Exemplo • Qual o preço mais alto e a média dos preços por tipo de vinho? ρ (tipo_vinho, “maior preço”, “preço médio”) (tipo_vinho ξ MAX (preço), AVG (preço) (vinho)) SELECT tipo_vinho, MAX (preço) AS “maior preço”, AVG (preço) AS “preço médio” FROM vinho GROUP BY tipo_vinho
  • 52. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Solução do Exemplo – As tuplas da tabela vinho são divididas em grupo, cada grupo contendo o mesmo tipo de valor para o atributo de agrupamento tipo_vinho vinho_id nome_vinho tipo_vinho preço vinícola_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
  • 53. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri • Considerações adicionais – a função MAX e a função AVG são aplicadas a cada grupo de tuplas separadamente – a cláusula SELECT inclui somente os atributos de agrupamento e as funções a serem aplicadas a cada grupo de tuplas – o comando SELECT pode possuir cláusula WHERE de qualquer complexidade SQL: Solução do Exemplo
  • 54. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Solução do Exemplo tipo_vinho maior preço preço médio branco 333 233,25 rosê 300 300 tinto 397 168
  • 55. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Cláusula HAVING • Funcionalidade – permite especificar uma condição de seleção para grupos, melhor do que para tuplas individuais • Resposta – recupera os valores para as funções somente para aqueles grupos que satisfazem à condição imposta na cláusula HAVING
  • 56. Banco de Dados – Álgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Exemplo • Qual o preço mais alto e a média dos preços por tipo de vinho, para médias de preços superiores a R$200,00 SELECT tipo_vinho, MAX (preço), AVG (preço) FROM vinho GROUP BY tipo_vinho HAVING AVG (preço) > 200 tipo_vinho max(preço) avg(preço) branco 333 233,25 rosê 300 300
  • 57. 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 cláusula WHERE – coloca-se as tuplas que satisfazem a cláusula WHERE em grupos por meio da cláusula GROUP BY – aplica-se a cláusula HAVING a cada grupo – remove-se os grupos que não satisfazem o predicado da cláusula HAVING – exibe-se as colunas listadas na cláusula SELECT