VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os...

82
VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1. União, interseção, e diferença. Como os operadores da teoria dos conjuntos. – Restrição: os esquemas de relação devem ser os mesmos. 2. Seleção: Somente certas linhas de uma relação. 3. Projeção: Somente certas colunas. 4. Produto e Junção: Juntando duas relações de uma maneira útil.

Transcript of VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os...

Page 1: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

VII- Álgebra RelacionalUm pequeno conjunto de operadores que nos

permite manipular relações. Os operadores são:

1.União, interseção, e diferença. Como os operadores da teoria dos conjuntos.– Restrição: os esquemas de relação devem ser os

mesmos.

2.Seleção: Somente certas linhas de uma relação.

3.Projeção: Somente certas colunas.

4.Produto e Junção: Juntando duas relações de uma maneira útil.

Page 2: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Algebra Relacional

• Poder de expressão limitado (subconjunto de todas as consultas possíveis)

• Pode ser otimizada (isto é, as operações para uma consulta podem ser colocadas em uma ordem ótima, visando diminuir os custos do processamento da consulta)

• Mesmo limitada, é rica o bastante para expressar muitas consultas úteis

Notação:

SELEÇÃO THETA-JUNÇÃO

π PROJEÇÃO JUNÇÃO NATURAL

X PRODUTO CARTESIANO

U UNION

– DIFERENÇA

INTERSEÇÃO

Page 3: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Esquema Relacional

Depósito(filial, conta, cliente, saldo)

Cliente(cliente, rua, cidade)

Empréstimo(filial, no-empres, cliente, valor)

Filial(filial, ativo, cidade)

Empres Filial No-empres Cliente Valor

T1 Subúrbio 123 Fred 600 T2 Subúrbio 234 Saul 1200 T3 Subúrbio 235 Saul 1500 T4 Centro 612 Ana 2000

Page 4: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

SELECÃO (R) grau((R)) = grau(R)

0 card((R)) card(R)

(R) (R)

é uma condição de seleção: termos da forma: atributo op valor[atributo]

op é um de < = > ≠ ≥

exemplo de termo: filial = ‘Subúrbio’

termos são conectados por

filial = ‘Subúrbio’ valor > 1000 (Emprestimo)

Subúrbio 234 Saul 1200

Subúrbio 235 Saul 1500

Page 5: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

PROJEÇÃO π i1,...,im (R) 0 card (π A (R)) card (R)

grau (π A (R)) = m grau(R) =

n

(R) 1 ij n atributos

produz um conjunto de m-tuplas a1,...,am

tal que n-tupla b1,...,bn em R em que aj = bij para j = 1,...,m

π filial, cliente (Emprestimo)

Subúrbio Fred

Subúrbio Saul

Centro Ana

Page 6: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Produto

R = R1 R2

combina cada tupla t1 de R1 com cada tupla t2 de R2 e coloca em R a tupla t1t2.

Page 7: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Produto Cartesiano ()

grau(R) = k1 grau(R S) = k1 + k2

grau(S) = k2 card(R S) = card(R) card(S)

R S é o conjunto de todas as possíveis (k1 + k2)-tuplas

cujos primeiros k1 atributos são uma tupla em R

últimos k2 atributes são uma tupla em S

R S R SA B C D D E F A B C D D' E F

Page 8: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Theta-JunçãoR = R1 C

R2

é equivalente a R = C(R1 R2).

Page 9: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

grau(R) = r

grau(S) = s

grau (R S) = r + s

0 card(R S) card(R) card(S)

pode ser < > = ≠

Se igual (=), então é umEQUIJOIN

R S = (R S)R.A<S.D

R(A B C) S(C D E) T(A BC C’DE) 1 3 5 2 1 1 1 3 5 1 2 2 2 4 6 1 2 2 1 3 5 3 3 4 3 5 7 3 3 4 1 3 5 4 4 3 4 6 8 4 4 3 2 4 6 3 3 4 2 4 6 4 4 3 3 5 7 4 4 3

Page 10: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

União (R S) grau(R) = grau(S) = grau(R S)

max(card(R),card(S)) card(R S)card(R) + card(S)

Conjunto de tuplas em R ou S ou ambas R R S

S R S

Encontrar os clientes da filial `Centro´

πCliente ( Filial = “Centro" ( Empréstimo Depósito) )

Page 11: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Diferença(R S)

grau(R) = grau(S) = grau(R–S)

0 card(R –S)card(R) R – S R

tuplas em R não em S

Depositantes da agência `Centro´ que não pediram empréstimo

πcliente ( filial = ‘Centro’ (Deposito – Emprestimo)

Deposito < Centro, 36, Patricia, 500 >

Deposito < Centro, 71, Saul, 1000 >

Emprestimo < Centro, 72, Patrícia, 10000 >

πcliente (filial = ‘Centro’ (Depósito )) -

πcliente (filial = ‘Centro’ (Empréstimo))

(π (D) π (E)) funciona?

Page 12: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Combinando as Operações

Álgebra =

1. Argumentos +

2. Maneiras de se construir expressões algébricas.

Para a álgebra relacional:

1. Argumentos = variáveis-relações + constantes (instâncias finitas de relações).

2. Expressões: operadores + parênteses• Consulta = expressão de álgebra relacional.

Page 13: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Notação Linear p/ Expressões• Inventar novos nomes para relações intermediárias, e

atribuir a elas valores que são expressões algébricas.• Inventar nomes convenientes para os atributos das relações

intermediárias

ExemploEncontre os bares que estão ou na Avenida Oceânica ou

vendem Bud por menos de 3,00.Vende(bar, cerveja, preço)Bar(nome, end)

R1(nome) := nome( end = `Av. Oceânica´ (Bar))

R2(nome) := bar( cerveja = `Bud´ AND preço < 3,00 (Vende))R3(nome) := R1 R2

Page 14: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Semântica de Bags

Uma relação (em SQL, ao menos) é realmente um bag ou multiset, em vez de um conjunto

• Pode conter a mesma tupla mais de uma vez, embora não haja uma ordem específica.

• Exemplo: {1,2,1,3} é um bag e não um conjunto.• Selecão, projecão, e junção trabalham para bags

tão bem como para sets.– Trabalham tupla-a-tupla, e não eliminam duplicatas.

Page 15: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

União de BagsSoma as vezes em que um elemento aparece nos dois bags.• Exemplo: {1,2,1} {1,2,3,3} = {1,1,1,2,2,3,3}.

Interseção de bagsToma o mínimo de ocorrências em cada bag.• Exemplo: {1,2,2,1} {1,2,2,3,3} = {1,2,2}.

Diferença de bagsSubtrai o número de ocorrências nos dois bags.• Exemplo: {1,2,1} – {1,2,3,3} = {1}.

Page 16: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Leis para Bags Diferem de Leis para Conjuntos

• Algumas leis familiares continuam valendo para bags.– Exemplos: união e interseção são ainda comutativas e

associativas.

• Mas outras leis que valem para conjuntos não valem para bags.

ExemploR (S T) (R S) (R T) vale para conjuntos.• Sejam R, S, e T cada um o bag {1}.• Lado esquerdo: S T = {1,1}; R (S T) = {1}.• Lado direito: R S = R T = {1};

(R S) (R T) = {1} {1} = {1,1} {1}.

Page 17: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Álgebra Relacional Estendida (“Não Clássica")

Trata com bags.

1. Operator de eliminação de duplicatas.

2. Projeção estendida.

3. Operador de classificação.

4. Operador de agrupamento e agregação.

5. Operador o de junção externa.

Page 18: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Eliminação de Duplicatas(R) = relação com uma cópia de cada tupla que aparece uma

ou mais vezes em R.

ExemploR =

A B1 23 41 2

(R) =A B1 23 4

Page 19: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Classificação L(R) = lista de tuplas de R, ordenada segundo os

atributos na lista L.• Note que o resultado não é nem bag e nem

conjunto. É lista ou array.– Conseqüência: não pode ser seguido por quaisquer

outros operadores relacionais.

ExemploR = A B

1 33 45 2

B(R) = [(5,2), (1,3), (3,4)].

Page 20: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Projeção EstendidaPermite que as colunas na projeção sejam funções de uma ou

mais colunas da relação-argumento.

ExemploR = A B

1 23 4

A+B,A,A(R) =A+B A1 A23 1 17 3 3

Page 21: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Operadores de Agregação

• Não há operadores relacionais; em vez disso eles sumarizam os valores de uma ou mais colunas de alguma forma.

• Os 5 operadores-padrão de agregação: Sum, Average, Count, Min, e Max.

Page 22: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Operadores de Agrupamento

L(R), onde L é uma lista de elementos que são ou

a) Atributos individuais (grupos) ou

b) Da forma (X), em que é um operador de agregaçãoe X o atributo ao qual ele é aplicado

É calculado assim:

1. Agrupar R segundo os grupos definidos na lista L.

2. Dentro de cada grupo, calcular (X), para cada (X) na lista L.

3. O resultado é a relação cujas colunas consistem de cada elemento da lista L sendo uma linha para cada grupo.

Page 23: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

ExemploSeja R =

bar cerveja preço Alemão Bud 2,00

Alemão Skol 2,75Moraes Bud 2,50Moraes Brahma 3,00Tricolor Skol 3,25Rubronegro Brahma 3,00

Calcular cerveja,AVG(preço)(R).

1. Agrupar pelo(s) atributo(s) de agrupamento, cerveja neste caso:bar cerveja preçoAlemão Bud 2,00Moraes Bud 2,50Alemão Skol 2,75Tricolor Skol 3,25Moraes Brahma 3,00Rubronegro Brahma 3,00

Page 24: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

2. Calcular a média de preço dentro dos grupos:

cerveja AVG(preço)

Bud 2.25

Skol 3.00

Brahma 3.00

Page 25: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Junção Externa

A junção normal pode “perder” informação, isto é, as tuplas que não casam com as condições de junção.

• O valor null pode ser usado para fazer aparecer as tuplas não casadas.

• Isto é feito pelo operação junção externa o ("outerjoin")

• Variações: theta-junção externa, junções externas esquerda e direita.

Page 26: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Exemplo

R = A B1 23 4

S = B C4 56 7

R o S = A B C3 4 5 junção natural1 2 junção externa direita 6 7 junção externa

esquerda

Page 27: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

VIII- A Linguagem SQL

• Uma maquilagem na álgebra relacional, para torná-la mais palatável ao programador

• Forma Principal:SELECT atributos desejados

FROM variáveis do tipo tupla varrendo relações

WHERE condições sobre as variáveis-tupla;

Page 28: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Esquema-Exemplo

Esquema relacional:Cerveja(nome, fab)

Bar(nome, end, alvará)

Boêmio(nome, end, telefone, cervejafav)

Gosta_de(boêmio, cerveja)

Vende(bar, cerveja, preço)

Frequenta(boêmio, bar)

Page 29: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

ExemploQue cervejas são fabricadas por Anheuser-Busch?

Cerveja(nome, fab)

SELECT nomeFROM CervejaWHERE fab = 'Anheuser-Busch';

• Nota: aspas simples para cadeias de caracteres.nomeBudBud LiteMichelob

Page 30: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Semântica Formalde Consultas SQL a uma Relação Simples

1. Comece com a relação na cláusula FROM.2. Aplique , usando a condição como a cláusula WHERE

(bag) .3. Aplique , usando os atributos como a cláusula SELECT

(projeção estendida, bag) .

Semântica Operacional EquivalenteImagine uma variável tupla varrendo todas as tuplas da

relação. Para cada tupla:• Verifique se ela satisfaz a cláusula WHERE.• Exiba os (alguns) valores em termos de um SELECT.

Page 31: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Listar todos os Atributos

Cerveja(nome, fab)

SELECT *FROM CervejaWHERE fab = 'Anheuser-Busch';

nome fabBud Anheuser-BuschBud Lite Anheuser-BuschMichelob Anheuser-Busch

Page 32: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Renomeando Colunas

Cerveja(nome, fab)

SELECT nome AS cervejaFROM CervejaWHERE fab = 'Anheuser-Busch';

cervejaBudBud LiteMichelob

Page 33: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Colunas como ExpressõesVende(bar, cerveja, preço)

SELECT bar, cerveja, preço*120 AS preço_em_YenFROM Vende;

bar cerveja preço_em_YenTricolor Bud 300Rubronegro Miller 360… … …

• Note: sem a cláusula WHERE (OK).

Page 34: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

• Dica: insira constantes na cláusula SELECT, se isto fizer sentido.Gosta(boêmio, cerveja)

SELECT boêmio,‘gosta de Bud' AS que_gosta_de_Bud

FROM GostaWHERE cerveja = 'Bud';

boêmio que_gosta_de_BudSalete gosta de BudFred gosta de Bud… …

Page 35: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Padrões• % significa qualquer cadeia de caracteres.• _ significa qualquer caractere.• “Atributo LIKE padrão” é uma condição que é verdadeira

se o valor do atributo (uma cadeia de caracteres) casar com o padrão.– Também NOT LIKE para negação.

ExemploEncontre os boêmios cujo código de telefone tem 72-.

Boêmio(nome, end, fone)

SELECT nomeFROM BoêmioWHERE fone LIKE '%72-_ _ _ _ _ _ _’;

• Os padrões devem vir entre aspas, como para cadeias de caracteres.

Page 36: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Nulls

Em lugar de um valor de um componente de uma tupla.

• A interpretação não é exatamente “valor faltando.”• Podia ser também “valor não apropriado.”

Lógica de Nulls• Terceiro valor booleano DESCONHECIDO.• Uma consulta somente produz valores se a

condição da cláusula WHERE for VERDADE(DESCONHECIDO não é suficiente).

Page 37: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Exemplobar cerveja preço

Rubronegro Brahma NULLSELECT barFROM VendeWHERE preço < 2,00 OR preço >= 2,00;

DESCONHECIDO DESCONHECIDO

DESCONHECIDO

• O bar Tricolor não é selecionado, mesmo se a cláusula WHERE é uma tautologia.

Page 38: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Lógica dos 3 Valoresverdade = 1; falso = 0, e desconhecido = 1/2. Então:• AND = min.• OR = max.• NOT(x) = 1 – x.

Algumas Leis não FuncionamExemplo: p OR NOT p = verdade• Para a lógica dos 3-valores: se p = desc., então

lado esquerdo = max(1/2,(1–1/2)) = 1/2 ≠ 1.• Como a álgebra para bags, a lógica dos 3 valores

tem a sua própria lógica.

Page 39: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Teste de NULL

• A condição atributo = NULL é avaliada sempre como DESCONHECIDO, mesmo se o valor do atributo é NULL!

• Use atributo IS NULL ou atributo IS NOT NULL se você quiser testar para NULL.

Page 40: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Consultas a mais de uma Relação• Lista das relações na cláusula FROM.• A notação relação-ponto-atributo remove a ambigüidade se

duas relações têm atributos com o mesmo nome.

ExemploEncontre as cervejas que os freqüentadores do bar

Tricolor gostam.Gosta(boêmio, cerveja)Freqüenta(boêmio, bar)

SELECT cervejaFROM Freqüenta, GostaWHERE bar = ‘Tricolor AND

Freqüenta.boêmio = Gosta.boêmio;

Page 41: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Semântica Formal de Consultas a mais de uma Relação

Comece com o produto das relações na cláusula FROM.

Considere uma variável-tupla para cada relação da cláusula

FROM.

• Imagine essas variáveis-tupla cada uma apontando para

uma tupla de sua relação, em todas as combinações.

• Se para uma dessas combinações o valor da cláusula

WHERE é verdade, então exiba os valores dos atributos do

SELECT para a combinação.

Page 42: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

bar

Frequents

drinker beerdrinker

Likes

flSally

SallyJoe’s

Page 43: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Variáveis-Tupla ExplícitasAlgumas vezes necessitamos fazer referência a `cópias´ de uma

relação.• Use variáveis-tupla como sinônimos de relações.

ExemploEncontre pares de cerveja do mesmo fabricante.

Cerveja(nome, fab)

SELECT c1.nome, c2.nomeFROM Cerveja c1, Cerveja c2WHERE c1.fab = c2.fab AND

c1.nome < c2.nome;

• SQL permite AS entre uma relação e sua variável-tupla;Oracle não.

• Note que c1.nome < c2.nome é necessária para evitar produzir (Bud, Bud), ou ((Bud, Brahma), (Brahma, Bud)).

Page 44: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

SubconsultasO resultado de um Select-From-Where pode ser usado na cláusula Where de

uma outra consulta.

Caso mais simples: a subconsulta retorna uma única tupla, de grau um

Encontre os bares que servem Boêmia com o preço da Brahma no bar Tricolor.Vende(bar, cerveja, preço)

SELECT barFROM VendaWHERE cerveja = ‘Boêmia' AND preço =

(SELECT preçoFROM VendeWHERE bar = `Tricolor´ AND

cerveja = `Brahma´;• Note a regra de escopo: um atributo refere-se à subconsulta mais próxima,

que produz um valor do mesmo.• Parentetização das subconsultas é essencial.

Page 45: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

O Operador IN“Tupla IN relação” é verdade sss a tupla está na relação.

ExemploEncontre o nome e o fabricante das cervejas que Fred gosta.

Cerveja(nome, fab)Gosta(boêmio, cerveja)

SELECT *FROM CervejaWHERE nome IN

(SELECT cervejaFROM GostaWHERE boêmio = 'Fred’);

• Também: NOT IN.

Page 46: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

EXISTS“[NOT]EXISTS(relação)” é verdade sss a relação [é] não é vazia.

ExemploEncontre os fabricantes que fornecem unicamente uma marca de

cerveja.Cerveja(nome, fab)

SELECT nomeFROM Cerveja c1WHERE NOT EXISTS

(SELECT * FROM Cerveja WHERE fab = c1.fab AND

nome <> c1.nome);

• Note a regra de escopo: para se referir a Cerveja na subconsulta, c1 é passada como parâmetro.

• Desta forma, a subconsulta é uma subconsulta correlacionada.

Page 47: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

QuantificadoresANY e ALL comportam-se como quantificadores existencial ("ao

menos um") e universal, respectivamente.• Em linguagem comum, “any” e “all” parecem sinônimos, i.e., “Eu

sou mais gordo que qualquer um de vocês” vs. “Eu sou mais gordo que todos vocês” Mas em SQL:

ExemploEncontre a(s) cerveja(s) vendida(s) pelo mais alto preço.

Vende(bar, cerveja, preço)

SELECT cervejaFROM Vende WHERE preço >= ALL(

SELECT preçoFROM Vende);

Em ClasseEncontre a(s) cerveja(s) que não é(são) vendida(s) pelo mais alto

preço.

Page 48: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

União, Interseção, Diferença“(subconsulta) UNION (subconsulta)” produz a união das duas relações.• Similaridade para INTERSECT, EXCEPT = interseção e diferença de

conjuntos.– Mas: em Oracle diferença de conjuntos é MINUS, não EXCEPT.

ExemploEncontre os boêmios e cervejas tais que o boêmio gosta da cerveja e

freqüenta o bar que a serve.Gosta(boêmio, cerveja)Vende(bar, cerveja, preço)Freqüenta(boêmio, bar)

(SELECT * FROM Gosta)INTERSECT

(SELECT boêmio, cerveja FROM Vende, Freqüenta WHERE Freqüenta.bar = Vende.bar);

Page 49: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Forçando a Semântica de Set/Bag• O default para select-from-where é bag; o

default para união, interseção, e diferença é conjunto.– Por que? Salva tempo quando não se compara

as tuplas geradas.– Entretanto, é preciso comparar para união,

interseção e diferença.

• Para forçar conjunto em select-from-where usa-se DISTINCT depois do SELECT.– Leve em conta o custo.

Page 50: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Exemplo

Encontre os diferentes preços das cervejas.Vende(bar, cerveja preço)

SELECT DISTINCT preçoFROM Vende;• Força a semântica de bag com ALL depois

de UNION, etc.

Page 51: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Expressões Baseadas em JunçãoHá várias maneiras possíveis.• Podem ser usadas ou “stand-alone” (em lugar de um

select-from-where) ou para definir uma relação na cláusula FROM.

R NATURAL JOIN SR JOIN S ON condition

i.e., condition: R.B=S.BR CROSS JOIN SR OUTER JOIN S• Outerjoin pode ser modificada por:1. NATURAL na frente.2. ON condition no fim.3. LEFT, RIGHT, ou FULL (default) antes de OUTER.

– LEFT = preenche (com NULL) tuplas de R somente; RIGHT = preenche tuplas de S somente.

Page 52: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

AgregaçõesSum, avg, min, max, e count aplicam-se a atributos/colunas.

Também, count(*) aplica-se a tuplas.• Usadas na lista do SELECT.

ExemploEncontre o preço médio da cerveja Bud.Vende(bar, cerveja, preço)

SELECT AVG(preço)FROM VendeWHERE cerveja = 'Bud';• Conta cada tupla (para cada bar que vende Bud) uma vez.

Em classeComo faria se Vende fosse um bag?

Page 53: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Eliminando DuplicatasAntes da Agregação

Encontrar os diferentes preços da cerveja Bud.

Vende(bar, cerveja, preço)

SELECT COUNT(DISTINCT preço)

FROM Vende

WHERE cerveja = 'Bud';• DISTINCT pode ser usada em qq agregação,

mas tipicamente só faz sentido com COUNT.

Page 54: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

AgrupamentoSegue select-from-where com GROUP BY uma lista

de atributos.• A relação que é o resultado das cláusulas FROM e WHERE é agrupada segundo os valores desses atributos, com as agregações tomando lugar somente dentro de um grupo.

ExemploEncontre os preços médios de cada cerveja.Vende(bar, cerveja, preço)SELECT cerveja, AVG(preço)FROM VendeGROUP BY cerveja;

Page 55: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

ExemploEncontre, para cada boêmio, o preço médio da

cerveja Bud nos bares que eles freqüentam.Vende(bar, cerveja, preço)Freqüenta(boêmio, bar)

SELECT boêmio, AVG(preço)FROM Freqüenta, VendeWHERE cerveja = 'Bud' AND

Freqüenta.bar = Vende.barGROUP BY boêmio;• Note: agrupamento ocorre depois das operações

e .

Page 56: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Restrições na Lista de SELECT com Agregação

Se uma agregação é usada, então cada elemento do SELECT ou é um agregado, ou deve aparecer na cláusula group-by.

Exemplo• Uma forma tentadora de fazer as coisas:Vende(bar, cerveja, preço)

SELECT bar, MIN(preço)FROM VendeWHERE cerveja = 'Bud';• Isto é ilegal em SQL.

ProblemaComo devemos encontrar esse(s) bar(es)?

Page 57: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Cláusula HAVING Cláusulas HAVING são seleções em grupos, como

cláusulas WHERE o são para tuplas.

A condição pode usar qq variável-tupla ou relação da cláusula FROM, justo como a cláusula WHERE.– Mas as variáveis-tupla varrem somente um grupo.– Os atributos também só fazem sentido dentro de um

grupo.

Page 58: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

ExemploEncontre a média de preços das cervejas que ou são servidas

em ao menos 3 bares ou são fabricadas pela Ambev.Cerveja(nome, fab)Vende(bar, cerveja, preço)

SELECT cerveja, AVG(preço)FROM VendeGROUP BY cervejaHAVING COUNT(*) >= 3 OR

cerveja IN (SELECT nomeFROM CervejaWHERE fab = 'Ambev');

Page 59: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Exercício por Equipe

• Qual a cerveja que é mais vezes a favorita dos boêmios?– Note que pode ser mais de uma.

Boemio(nome, end, telefone, cervejafav)

Page 60: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Gabarito

Select cervejafav as 'a_favorita'

From Boemio

Group by cervejafav

Having count(*) ALL(Select count(*)

From Boemio

Group by cervejafav);

Page 61: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Manutenção de BD• Modificação = insert + delete + update.

Inserção de uma TuplaINSERT INTO relação VALUES (lista de valores).• Insere a tupla = lista de valores, associando os valores com

os atributos na ordem em que os atributos foram declarados.– Esqueceu a ordem? Liste os atributos como argumentos da relação.

ExemploGosta(boêmio, cerveja)Insira o fato de que Salete gosta de Antarctica.INSERT INTO Gosta(boêmio, cerveja)VALUES('Salete, `Antarctica´);

Page 62: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Inserção do Resultado de uma Consulta

INSERT INTO relação (subconsulta).

ExemploCriar uma tabela de todos os potenciais companheiros de Salete, i.e., as

pessoas que freqüentam os bares que Salete também freqüenta.Freqüenta(boêmio, bar)

CREATE TABLE Amigos_da_cerveja(nome char(30)

);

INSERT INTO Amigos_da_cerveja(SELECT DISTINCT f2.boêmio FROM Freqüenta f1, Freqüenta f2 WHERE f1.boêmio= `Salete´´ AND

f2.boêmio <> `Salete‘´ AND f1.bar = f2.bar

);

Page 63: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

RemoçãoDELETE FROM relação WHERE condição.• Remove todas as tuplas da relação satisfazendo a condição.

ExemploSalete não gosta mais da cerveja Bud.

Gosta(boêmio, cerveja)

DELETE FROM Gosta

WHERE boêmio = 'Salete' AND

cerveja = 'Bud';

ExemploEsvaziar a relação Gosta.

DELETE FROM Gosta;

Page 64: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Exemplo• Remova todas as cervejas para as quais há outras

cervejas do mesmo fabricante.

Cerveja(nome, fab)

DELETE FROM Cerveja c

WHERE EXISTS

(SELECT nome

FROM Cerveja

WHERE fab = c.fab AND

nome <> b.nome

);

Page 65: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

• Semântica enganadora! Se a Ambev faz Brahma e Antarctica (somente), a remoção da Brahma faz a Antarctica não satisfazer a condição?

• Semântica da SQL: todas as condições devem ser avaliadas primeiro. – No exemplo Brahma/Antarctica, deve-se

primeiro identicar as duas como alvo, e remover ambas.

Page 66: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

AtualizaçõesUPDATE relação SET lista de atribuições WHERE condição.

ExemploO número de telefone do boêmio Fred é 555-1212.Boêmio(nome, end, telefone)

UPDATE BoêmioSET telefone = '555-1212'WHERE nome = 'Fred';

ExemploO preço máximo de uma cerveja é 4,00.• Atualiza muitas tuplas de uma vez.Vende(bar, cerveja, preço)

UPDATE VendeSET preço = 4,00WHERE preço > 4.00;

Page 67: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Definindo um Esquema de BDCREATE TABLE nome (lista de elements).• Os principais elementos são os atributos e seus tipos, mas

declarações de chave e restrições também aparecem.• Comandos similares CREATE X para outros objetos X:

visões, índices, asserções, “triggers”.• “DROP X nome” remove o objeto criado do tipo X com

aquele nome.

Exemplo CREATE TABLE Vende(

bar CHAR(20),cerveja VARCHAR(20),preço REAL

);

DROP TABLE Vende;

Page 68: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Tipos

1.INT ou INTEGER.2.REAL ou FLOAT.3.CHAR(n) = cadeia de caracters de

tamanho fixo, preenchida com brancos, se for o caso.

4.VARCHAR(n) = cadeia de caracteres de tamanho variável (até n characteres).– Oracle usa VARCHAR2(n) também.

Page 69: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

5. NUMERIC(precision, decimal) é um número com precision dígitos com o ponto decimal a decimal dígitos a partir da direita. NUMERIC(10,2) pode armazenar ±99.999.999,99

6. DATE. A forma SQL é DATE 'yyyy-mm-dd'• Oracle usa um formato diferente.

7. TIME. A forma é TIME 'hh:mm:ss[.ss…]' em SQL.

8. DATETIME ou TIMESTAMP. A forma é TIMESTAMP 'yyyy-mm-dd hh:mm:ss[.ss…]' em SQL.

Page 70: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Declarando Chaves

Use PRIMARY KEY ou UNIQUE.• Somente uma chave primária, muitos UNIQUE.• Implementações de SQL criam um índice

automático (“index”) em resposta a PRIMARY KEY somente.– Mas Oracle também cria índice para UNIQUE.

• SQL não permite NULL na chave primária, mas em colunas “unique” pode (dois ou mais NULL, mas não repetidos valores não-nulos).

Page 71: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Declarando Chaves

Dois lugares para declarar:

1. Depois de um tipo de atributo, se o atributo é a própria chave.

2. Como um elemento separado.– Essencial se a chave é composta de mais de

um atributo.

Page 72: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Exemplo

CREATE TABLE Vende (

bar CHAR(20),

cerveja VARCHAR(20),

preço REAL,

PRIMARY KEY(bar, cerveja)

);

Page 73: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Exemplo CREATE TABLE Vende(

bar CHAR(20),cerveja VARCHAR(20),preço REAL,UNIQUE(bar, cerveja)

);

é diferente de:CREATE TABLE Vende (

bar CHAR(20) UNIQUE,cerveja VARCHAR(20) UNIQUE,preço REAL

);

Page 74: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Outras Propriedades de Atributos

1.NOT NULL.2. Valor DEFAULT.

ExemploCREATE TABLE Boêmio ( nome CHAR(30) PRIMARY KEY, end CHAR(50)

DEFAULT ‘Rua do Bar', telefone CHAR(16));

Page 75: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

INSERT INTO Boêmio(nome, end) VALUES('Salete', 'Av. Sete, 2001')

Resulta na seguinte tupla:

nome end telefone

Salete Av. Sete, 2001. NULL

• Primary key é por default not NULL.• Esta inserção é legal.• Mas se tivéssemos declarado

telefone CHAR(16) NOT NULL

então a inserção não podia ser feita.

Page 76: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Defaults Interessantes

• DEFAULT CURRENT_TIMESTAMP• SEQUENCE

CREATE SEQUENCE seq_cliente;

CREATE TABLE Cliente(

clienteID INTEGER

DEFAULT nextval(‘seq_cliente'),

nome VARCHAR(30)

);

Page 77: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Mudando ColunasAdicione um atributo da relação R com ALTER TABLE R ADD <declaração_coluna>;

Exemplo ALTER TABLE Bar ADD telefone CHAR(16)

DEFAULT ‘fora da lista';

• Colunas podem também ser removidas. ALTER TABLE Bar DROP alvara;

Page 78: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Visões

Uma expressão que descreveuma tabela sem criá-la.

• A forma de definição de uma visão é:CREATE VIEW <nome> AS <consulta>;

Page 79: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

ExemploA visão PodeBeber é o conjunto de pares boêmio-cerveja tais

que o boêmio freqüenta ao menos um bar que serve a cerveja. CREATE VIEW PodeBeber AS

SELECT boêmio, cervejaFROM Frequenta, VendeWHERE Frequenta.bar = Vende.bar;

Consultando VisõesTrata a visão como uma relação materializada.

ExemploSELECT cervejaFROM PedeBeberWHERE boêmio = ‘Salete;

Page 80: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Semântica de Uso de Visões

Exemplo

Page 81: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Composição

Page 82: VII- Álgebra Relacional Um pequeno conjunto de operadores que nos permite manipular relações. Os operadores são: 1.União, interseção, e diferença. Como.

Otimização da Consulta1. Empurra as seleções para baixo na árvore.

2. Elimina as projeções desnecessárias.