Buscar

Algebra Relacional

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 42 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 42 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 42 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Bases de DadosBases de Dados
Álgebra RelacionalÁlgebra Relacional
ouou
Como manipular uma BD SQL Como manipular uma BD SQL 
P. Serendero, 2011-13P. Serendero, 2011-13
11
22
Álgebra Relacional
“Conjunto básico de operadores que tomam as relações como os seus 
operandos e devolvem uma relação como resultado” (Date) 
O output das operações com tabelas é sempre outra tabela, que pela 
sua vez pode servir de input para outras operações nelas
Esta é a propriedade de fecho (“closure”) dos sistemas relacionais.
Operações sobre uma, duas ou mais relações, frequentemente 
especificadas com alguma restrição, para obter uma nova relação
Esta propriedade faz o álgebra 'fechada': todos os objetos na álgebra 
relacional são relações. Não confundir com “fecho” nas DF
33
Álgebra Relacional
SQL (Structured Query Language) linguagem para criar, modificar e extrair 
dados desde um sistema relacional de gestão de bases de dados. Ela 
implementa a álgebra relacional. 
 NÃO É UMA LINGUAGEM DE PROGRAMAÇÃO!!
A estrutura básica duma expressão SQL consiste de 3 cláusulas:
SELECT: que corresponde a operação de projeção na álgebra relacional. 
Uma restrição para extrair colunas específicas de uma tabela num query
FROM: Corresponde a operação do produto cartesiano na álgebra 
relacional. Faz a listagem das relações exploradas na avaliação duma 
expressão
WHERE: Corresponde ao predicado de seleção da álgebra relacional. 
Consiste num predicado incluindo atributos das relações que aparecem na 
cláusula FROM. Actúa como um filtro
44
Álgebra Relacional: operadores
Operadores Unários
SELECT ( σ ) RESTRIÇÃO: selecciona um subconjunto de tuplas 
PROJECT( pi) PROJEÇÃO: selecciona apenas colunas na projeção
JOIN (theta) selecciona tuplas de conjuntos.Semelhante ao Prod.Cart.
DIVIDE 
Operadores sobre conjuntos (ligeiramente modificados para operar tabelas)
UNIÃO ( ∪ ), INTERSECÇÃO ( ∩ ), DIFERENCIA (ou MENOS, – )
PRODUTO CARTESIANO ( x )
Operadores Binários
JOIN (INNER JOIN, OUTER JOIN), … REUNIÃO, DIVISÃO
mais
RENAME (símbolo: ρ (ro))
FUNÇÕES AGREGADAS SUM, COUNT, AVG, MIN, MAX, …
8 operadores
originais de Codd
Algebra Relacional - Operadores
Estos 8 operadores originais tem sido estendidos a muitos outros
Qualquer outro operador pode ser definido para satisfazer a 
propriedade de fecho da AR.: relações como input e output
Estes operadores são genéricos: se aplicam a todas as relações
Todos eles são “read-only”. Eles leem mas não atualizam os seus 
operandos. 
 Cliente join Factura where tipo-cliente = “bom”
O tipo de dados do atributo “tipo-cliente” deve ser conhecido pelo 
sistema. O output produzido deve ser de um tipo bem definido com 
um nome de atributo bem definido. Neste contexto utilizamos o 
operador RENAME
Álgebra Relacional - Operadores
Uma propriedade muito importante desta álgebra ser fechada,
Significa que podemos escrever expressões relacionais aninhadas
Isto é, expressões relacionais nas quais os operandos são eles 
próprios representados por outras expressões relacionais de 
complexidade arbitrária
77
Álgebra Relacional
● RestriçãoRestrição ● Extrai tuplos especificadas duma dada relaçãoExtrai tuplos especificadas duma dada relação
● ProjeçãoProjeção ● Extrair os atributos especificados numa relação Extrair os atributos especificados numa relação 
dadadada
● ProduçãoProdução ● Dadas 2 relações, constrói uma R contendo todas as Dadas 2 relações, constrói uma R contendo todas as 
combinações possíveis de tuplos, uma de cada uma das combinações possíveis de tuplos, uma de cada uma das 
relações originaisrelações originais
● UniãoUnião ● Constrói uma relação formada por todas as tuplos que Constrói uma relação formada por todas as tuplos que 
aparecem em qualquer das duas relações especificadasaparecem em qualquer das duas relações especificadas
● IntersecçãoIntersecção ● Constrói uma relação formada apenas pelas tuplos que Constrói uma relação formada apenas pelas tuplos que 
aparecerem nas duas relações aparecerem nas duas relações 
● DiferenciaDiferencia ● Constrói uma relação formada por todas as tuplos da 1ª R Constrói uma relação formada por todas as tuplos da 1ª R 
que não aparecem na 2ª relaçãoque não aparecem na 2ª relação
● ReuniãoReunião ● Dadas 2 relações constrói uma r com todas as Dadas 2 relações constrói uma r com todas as 
combinações possíveis de tuplos, uma de cada relação, tal combinações possíveis de tuplos, uma de cada relação, tal 
que os dois tuplos participantes satisfazerem alguma que os dois tuplos participantes satisfazerem alguma 
condição especificadacondição especificada
● DivisãoDivisão ● Dada uma R1 binária e uma R2 unária, constrói uma R Dada uma R1 binária e uma R2 unária, constrói uma R 
formada por todos os valores dum atributo da R1 que formada por todos os valores dum atributo da R1 que 
concordam no outro atributo com todos os valores da R2concordam no outro atributo com todos os valores da R2
88
restrição projeção
aa
bb
cc
aa xx
aa yy
bb xx
bb yy
cc xx
cc yy
xx
yy
produto (cartesiano)
união intersecção diferencia
a1
a2
a3
b1
b1
b2
b1
b2
b3
c1
c2
c3
a1
a2
a3
b1
b1
b2
c1
c1
c2
Reunião (natural)
a
a
a
b
c
x
z
ax
y
z
x
y
divisão
Panorama geral dos 8 operadores originais (Date)
Operadores unários: SELECT
A operação SELECT (sigma A operação SELECT (sigma σσ ) seleciona um subconjunto de tuplos ) seleciona um subconjunto de tuplos 
baseado numa condição de seleçãobaseado numa condição de seleção
Esta restrição está representada na cláusula WHERE, que actua Esta restrição está representada na cláusula WHERE, que actua 
como filtrocomo filtro
Só guarda as tuplos que satisfazem a condição de qualificaçãoSó guarda as tuplos que satisfazem a condição de qualificação
SELECTSELECT * FROM embarcação* FROM embarcação WHEREWHERE matricula = ‘VNC-34’matricula = ‘VNC-34’
SELECTSELECT nome FROM embarcaçãonome FROM embarcação WHEREWHERE boca > 2 AND boca < 3boca > 2 AND boca < 3
99
Operadores unários: SELECT
Atenção: Atenção: 
SelectSelect na Álgebra relacional corresponde aona Álgebra relacional corresponde ao WHEREWHERE no SQLno SQL
projeçãoprojeção na Álgebra relacional corresponde aona Álgebra relacional corresponde ao SELECTSELECT no SQLno SQL
SELECT nome FROM embarcação SELECT nome FROM embarcação WHEREWHERE matricula= ‘AVG-175’ matricula= ‘AVG-175’
O SGBD procede assim:O SGBD procede assim:
1.1. Vai ler desde o FROM, ou seja ler a tabela embarcação, Vai ler desde o FROM, ou seja ler a tabela embarcação, 
2.2. Aplica o operador Aplica o operador σσ para o WHERE . Esta é a para o WHERE . Esta é a selecçãoselecção na álgebra na álgebra 
relacionalrelacional
3.3. Logo aplica o operador Logo aplica o operador pipi no SELECT. Esta é a no SELECT. Esta é a projeção projeção na A.R.na A.R.
1010
Operadores unários: SELECT
Em SQL a operação SELECT é muito poderosa:Em SQL a operação SELECT é muito poderosa:
SELECTSELECT produto, preço * quantidade FROM itensproduto, preço * quantidade FROM itens
 (preço e quantidade devem ser de tipo numérico)(preço e quantidade devem ser de tipo numérico)
SELECT random()SELECT random()
SELECT 2 * 2.141516SELECT 2 * 2.141516
SELECT COUNT(*) FROM Facturas; SELECT COUNT(*) FROM Facturas; 
1111
COUNT
 259
Operadores unários: SELECT
Um select com uma função na linguagem php em acçãoUm select com uma função na linguagem php em acção::
//---------------------------------------------------------------------------//---------------------------------------------------------------------------
function verifica_existencia_utilizador($db, $novo_usuario)function verifica_existencia_utilizador($db,$novo_usuario)
{ { 
 $query =$query = "SELECT * FROM utilizador WHERE usuario = '$novo_usuario' ";"SELECT * FROM utilizador WHERE usuario = '$novo_usuario' "; 
 $resultado = pg_query($db, $query);$resultado = pg_query($db, $query);
 $r = pg_fetch_array($resultado);$r = pg_fetch_array($resultado);
 
 if ($r['usuario'] == $novo_usuario) // ou if ($r) if ($r['usuario'] == $novo_usuario) // ou if ($r) 
 return 1; // else return 0;return 1; // else return 0;
} } 
//------------------------------------------------------------------------//------------------------------------------------------------------------
 // definir uma variável em Php: $nome-var = 45; or $nome-var = ‘natacha’;// definir uma variável em Php: $nome-var = 45; or $nome-var = ‘natacha’;
1212
Operadores unários: SELECT
 Repare que este SELECT se expressa assim na 
álgebra relacional:)
 σ usuario = novo-usuario (utilizador)
 σ salario > 30,000 (EMPREGADO)
O símbolo sigma (σ) expressa a operação SELECT
Uma operação condicional booleana nos atributos 
da Relação: verdadeiro ou falso 
tuplos verdadeiros são selecionadas e aparecem 
na nova relação. tuplos falsos são filtrados e 
eliminados
1313
Operadores unários: SELECT
 A operação SELECT produz uma R com o mesmo esquema (a 
mesma estrutura de atributos e os seus tipos) que a R original 
O número de tuplos como resultado do SELECT é menor ou 
igual ao número de tuplos na R original
Pode-se indicar uma condição ou várias juntas
 σ <condition1>(σ < condition2> (R)) = 
 σ <condition2> (σ < condition1> (R))
 O SELECT é comutativo, as condições podem aparecer em 
qualquer ordem. As condições podem ser outros SELECT
1414
Expressões no SELECT
No SELECT podem-se utilizar expressões como elementos 
Ex.
 SELECT nome, hora/60 AS ‘segundos’ FROM corredor;
A condição WHERE pode fazer comparações aproximadas 
entre uma string e um padrão
 <atributo> LIKE <padrão>
 <atributo> NOT LIKE <padrão>
padrão: uma string onde % significa “0 ou + caracteres iguais” 
e onde – significa apenas 1 char
1515
Expressões no SELECT: LIKE
SELECT nome FROM embarcações WHERE nome LIKE SELECT nome FROM embarcações WHERE nome LIKE 
%azul%%azul%
 Nome
Gaivota azul
O azul da Ria
1616
SELECT e clausula FROM
A clausula FROM permite mais que uma tabela na sua lista
nome cidade
L.Martins Olhão
M. Soares Faro
P.Mendes Loulé
nome salário
L.Martins 22.000
M. Soares 33.000
P.Mendes 45.000
SELECT r1.nome, salário, cidade FROM r1 , r2 
WHERE r1. nome = r2. nome (repare a qualificação do atrib.)
r1 r2
nome salário cidade
L.Martins 22.000 Olhão
M. Soares 33.000 Faro
P.Mendes 45.000 Loulé
1717
Operadores unários: PROJECT
Indicado com a letra pi (pi) PROJECT projeta a relação original, 
selecionando algumas colunas (atributos) e eliminando outras.
Cria portanto uma partição (projeção) vertical (ver desenho anterior)
Ex.:
pi numero, nome, boca (EMBARCAÇÃO)
SQL:
SELECT numero, nome, boca FROM EMBARCAÇÃO;
Esta operação remove qualquer tuplo duplicada. 
A projeção matemática não permite duplicados. 
A operação deve produzir um conjunto de tuplos.
Ainda
SELECT * FROM EMBARCAÇÃO; = procurar todos os atributos
1818
Operadores unários: PROJECT
Cláusula FROM: deriva a relação desde 2 ou mais 
tabelas 
O número de novas tuplos é sempre igual ou menor que a R 
original
Se existe uma chave nos atributos indicados na projeção, então 
o número de tuplos obtido nela é igual ao número de tuplos na 
R original
PROJEÇÃO não é comutativa. A ordem dos elementos 
indicados será mantida na nova R 
1919
mysql> SELECT id, total_horas, (preço-hora/3) AS valor FROM salarios;
id total-horas preço-hora
1 30 50
2 40 50
3 30 80
4 34 90
id total-horas valor
1 30 50
2 40 50
3 30 80
4 34 90
mysql> SELECT * FROM salarios;
R(salarios)
Operadores unários: RENAME
Podemos renomear os atributos ou os nomes das relações 
(tabelas). Expressada com a letra ρ (ro)
Pode ser prático quando temos muitos queries . Serve para 
minimizar os caracteres a escrever
Ex: calculando vendas totais para cada produto
SELECT id_produto, p.nome, (sum (v.qtd) * p.preço) AS vendas 
 FROM produtos p LEFT JOIN vendas v USING (id_produto)
GROUP BY id_produto, p.nome, p.preço;
Tabela produtos, cognomen é p
Tabela vendas, congnome é v Na nova R estes são os nomes
 de cada coluna da tabela
 (o cabeçalho)
GROUP BY? LEFT JOIN?
2121
Operações sobre Operações sobre conjuntosconjuntos
UNIÃOUNIÃO ( ( ∪∪ ) ) T1 T1 UNIONUNION T2 T2
INTERSECÇÃOINTERSECÇÃO ( ( ∩ ∩ ) ) T1 T1 INTERSECTINTERSECT T2 T2
DIFERENCIADIFERENCIA (ou MENOS, – ) (ou MENOS, – ) T1 T1 MINUSMINUS T2 T2
PRODUTOPRODUTO CARTESIANOCARTESIANO ( x ) ( x ) T1 T1 TIMESTIMES T2 T2
2222
num nome status cidade
c-023 Sousa 20 Porto
c-035 Santos 10 Faro
num nome status cidade
c-023 Sousa 20 Porto
c-012 Mendes 10 Olhão
A B
num nome status cidade
c-023 Sousa 20 Porto
c-012 Mendes 10 Olhão
C-035 Santos 10 Faro
A UNION B
num nome status cidade
c-035 Santos 10 Faro
A INTERSECT B num nome status cidade
c-023 Sousa 20 Porto
num nome status cidade
c-012 Mendes 10 Olhão
A MINUS B
B MINUS A
Operadores
devem ser
do mesmo
tipo
Operações sobre conjuntos: Operações sobre conjuntos: UNIÃOUNIÃO
UNIÃOUNIÃO ( ( ∪∪ ) )
Unir as relações (A Unir as relações (A ∪∪ B) cria uma nova R que inclui B) cria uma nova R que inclui 
todos os tuplos que estão seja em A, seja em B, ou todos os tuplos que estão seja em A, seja em B, ou 
seja em ambas duas A e Bseja em ambas duas A e B
A e B devem ser compatíveis:A e B devem ser compatíveis:
- A e B devem ter o mesmo número de atributos e- A e B devem ter o mesmo número de atributos e
- Os pares correspondentes de atributos i (A.a- Os pares correspondentes de atributos i (A.a ii e B.a e B.aii) ) 
devem ter o mesmo tipodevem ter o mesmo tipo
Os tuplos repetidos são eliminados na nova ROs tuplos repetidos são eliminados na nova R
2424
UNIÃO em PostgreSQL
Formato geral da cláusula união:
select_statement UNION [ ALL | DISTINCT ] select_statement
O operador union computa o conjunto de tuplos devolvidos pelo 
select
A R resultante elimina todos as tuplos duplicados de não ser que 
seja utilizado a opção ALL que impede isto acontecer
CREATE VIEW tenistas AS
 SELECT * FROM tenistas_femeninas 
UNION ALL
 SELECT * FROM tenistas-masculinos
Em geral: query1 UNION [ALL] query2;
2525
UNIÃO: resolução em PostgreSQL
 1. Se todos os inputs são do mesmo tipo, e este é conhecido,1. Se todos os inputs são do mesmo tipo, e este é conhecido,
 substituir por aquele tipo. Caso contrário, resolver qualquer tipo substituir por aquele tipo. Caso contrário, resolver qualquer tipo 
desconhecido com o tipo base: desconhecido com o tipo base: texttext normalmente normalmente
2. Se todos os tipos são desconhecidos, resolver como 2. Se todos os tipos são desconhecidos, resolver como texttext
 Se não fazer, ignorar o inputSe não fazer, ignorar o input
3. Caso os tipos não conhecido não sejam da mesma categoria do 3. Caso os tipos não conhecido não sejam da mesma categoria do 
tipo, a união falhatipo, a união falha
4. Escolher o primeiro tipo não conhecido que seja favorito numa 4. Escolher o primeiro tipo não conhecido que seja favorito numa 
categoria (ex. categoria (ex. texttext é favorito na categoria é favorito na categoria stringsstrings) ) 
5. Casocontrário, escolher um que permita todos os outros não 5. Caso contrário, escolher um que permita todos os outros não 
conhecidosconhecidos
6. Converter todos os inputs no tipo seleccionado. Se a conversão 6. Converter todos os inputs no tipo seleccionado. Se a conversão 
não é possível, a operação falharnão é possível, a operação falhar
2626
UNIÃO
Exemplo:Exemplo:
SELECT text ’a’ AS "texto"SELECT text ’a’ AS "texto" UNIONUNION SELECT ’b’;SELECT ’b’;
texto
a
b
Neste caso, o tipo desconhecido do atributo b e resolvido como texto
2727
UNIÃO
Exemplo:Exemplo:
 SELECT 1 AS "real" UNION SELECT CAST(’2.2’ AS REAL);SELECT 1 AS "real" UNION SELECT CAST(’2.2’ AS REAL);
real
1
2.2
Neste caso, real não pode ser convertido (cast) para integer, mas o 
contrário sim. Portanto a união resolve-se com o tipo real
2828
UNIÃO
Exemplo: Exemplo: 
Imagine as seguintes tabelas na sua BD representadas aqui Imagine as seguintes tabelas na sua BD representadas aqui 
como relações do modelo relacional:como relações do modelo relacional:
capitais (nome, população, altitude, pais, localização)capitais (nome, população, altitude, pais, localização)
não-capitais (nome, população, altitude, pais)não-capitais (nome, população, altitude, pais)
Pretendemos fazer uma lista de todas as cidades, capitais ou não:Pretendemos fazer uma lista de todas as cidades, capitais ou não:
CREATE VIEW cidades ASCREATE VIEW cidades AS
SELECT nome, população, altitude FROM capitaisSELECT nome, população, altitude FROM capitais
UNIONUNION
SELECT nome, população, altitude FROM não-capitais;SELECT nome, população, altitude FROM não-capitais;
2929
(herança em PostgreSQL)
Uma melhor alternativa para evitar problemas de actualizações Uma melhor alternativa para evitar problemas de actualizações 
seria:seria:
CREATE TABLECREATE TABLE cidadescidades (nome text, população real, altitude (nome text, população real, altitude 
integer, pais text);integer, pais text);
CREATE TABLE CREATE TABLE capitaiscapitais ( (localização text); INHERITS localização text); INHERITS 
(cidades);(cidades);
A tabela capitais herda todos os atributos e tipos de cidades. A tabela capitais herda todos os atributos e tipos de cidades. 
Agora podemos interrogar assim:Agora podemos interrogar assim:
SELECT SELECT nome, altitudenome, altitude
FROM FROM cidades cidades (lista todas as cidades + capitais)(lista todas as cidades + capitais)
WHERE WHERE altitudealtitude > 20; > 20;
3030
(herança em PostgreSQL)
INHERITS INHERITS (não é SQL 2008)(não é SQL 2008)
 e também podíamos interrogar:e também podíamos interrogar:
SELECT * FROM SELECT * FROM capitais capitais (lista todas as capitais(lista todas as capitais
WHERE WHERE altitudealtitude > 20; > 20; (com todos os 5 campos)(com todos os 5 campos)
Cláusula opcional INHERITS especifica uma lista de tabelas das quais a Cláusula opcional INHERITS especifica uma lista de tabelas das quais a 
nova tabela vai herdar automaticamente todas as suas colunasnova tabela vai herdar automaticamente todas as suas colunas
INHERITS cria uma relação persistente entre a nova tabela filha e aINHERITS cria uma relação persistente entre a nova tabela filha e a
 sua(s) mãe (mãessua(s) mãe (mães) ) 
Se se modificar o esquema na mãe normalmente se propaga aos filhos. Se se modificar o esquema na mãe normalmente se propaga aos filhos. 
Também os dados por defeito são herdados. Uma lista na tabela mãe Também os dados por defeito são herdados. Uma lista na tabela mãe 
vai incluir os dados na tabela filhavai incluir os dados na tabela filha
3131
Operações sobre conjuntos: Operações sobre conjuntos: 
INTERSECÇÃOINTERSECÇÃO ( ( ∩∩ ) ) 
Formato geral em SQL:
Select_<declaração> INTERSECT [ ALL | DISTINCT ]
O operador INTERSECT computa o conjunto de intersecção das 
filas devolvidas pelos SELECT.
Um tuplo está na intersecção de dois conjuntos de resultados 
se aparece em ambos os dois conjuntos de resultados
Aqui o SELECT é qualquer SELECT mas não pode ter as 
claúsulas ORDER BY, LIMIT, FOR UPDATE, or FOR SHARE
3232
Operações sobre conjuntos: Operações sobre conjuntos: 
INTERSECÇÃOINTERSECÇÃO ( ( ∩∩ ) ) 
CREATE VIEW tenistas AS
 SELECT * FROM campeões-tenis 
INTERSECT
 SELECT * FROM tenistas-masculinos
A Relação resultante será neste caso a lista de todos os tenistas 
masculinos que se encontram também na lista de campeões de 
ténis
CREATE VIEW: o query “tenistas” não é preciso repetir mais.
Fica armazenado no esquema como uma outra tabela que 
podemos interrogar- (insert, update, delete proibidos por defeito)
3333
Operações sobre conjuntos: Operações sobre conjuntos: 
INTERSECÇÃOINTERSECÇÃO ( ( ∩∩ ) ) 
3434
código nome
AVX-325 D.Dias
765-Fuseta F. Santos
2100-TA S. Sousa
código nome
432- Olhão M.Leite
765-Fuseta F. Santos
3243-TA T. Pires
código nome
765-Fuseta F. Santos
SQL: embarcação-motor INTERSECT embarcação-vela
R1: embarcação-motor R2: embarcação-vela
Operações sobre conjuntos: Operações sobre conjuntos: 
DIFERENCIA (-)DIFERENCIA (-) 
3535
código nome
AVX-325 D.Dias
765-Fuseta F. Santos
2100-TA S. Sousa
código nome
AVX-325 D.Dias
765-Fuseta F. Santos
3243-TA T. Pires
código nome
2100-TA S. Sousa
 embarcação-motor MINUS embarcação-vela
SQL: embarcação-motor EXCEPT [ALL] embarcação-vela
R1: embarcação-activa R2: embarcação-inactiva
Diferencia: uma relação com estrutura igual as R originais e cujo 
corpo formado por todos os tuplos pertencentes a R1 mas não a R2
R3
Álgebra relacionalÁlgebra relacional
Para se poder calcular as operaçõesPara se poder calcular as operações
uniãounião, , intersecçãointersecção ou ou diferenciadiferencia ( (exceptexcept) de dois) de dois
interrogações, as duas operações devem serinterrogações, as duas operações devem ser
compatíveis com a operação união.compatíveis com a operação união.
Isto é, devem devolver o mesmo número de colunasIsto é, devem devolver o mesmo número de colunas
e as colunas (atributos) correspondentes devem tere as colunas (atributos) correspondentes devem ter
tipos de dados compatíveistipos de dados compatíveis
3636
Operações sobre conjuntos: Operações sobre conjuntos: JUNÇÃOJUNÇÃO
Equivale a produto cartesiano + seleção: Equivale a produto cartesiano + seleção: ⋈⋈
Em SQL corresponde a Em SQL corresponde a JOINJOIN. Vários tipos diferentes. Vários tipos diferentes
 Ex.: R (natural) Ex.: R (natural) JOIN JOIN SS
R S, a junção natural das relações R e S: o conjunto de todas as ⋈R S, a junção natural das relações R e S: o conjunto de todas as ⋈
combinações de tuplos em R e S que são iguais no seu atributos combinações de tuplos em R e S que são iguais no seu atributos 
com nome igualcom nome igual
Se as tabelas tem Se as tabelas tem nn e e mm tuplos, a tabela resultante terá tuplos, a tabela resultante terá n*mn*m
tuplostuplos
FROM T1 CROSS FROM T1 CROSS JOINJOIN T2 T2 é equivalente aé equivalente a
FROM T1 , T2FROM T1 , T2. também é equivalente a. também é equivalente a
FROM T1 FROM T1 INNER JOININNER JOIN T2 T2 ONON TRUE TRUE (+ na 2ª parte)(+ na 2ª parte) 
3737
Operações sobre conjuntos: Operações sobre conjuntos: divisãodivisão
A mais dificil das operações. Utiliza 3 operadores: x, A mais dificil das operações. Utiliza 3 operadores: x, pi, −pi, −
(produto cruzado, projecção, e diferença de conjuntos) para (produto cruzado, projecção, e diferença de conjuntos) para 
alem de se efectuar 6 operaçõesalem de se efectuar 6 operações
O número de atributos em R1 é maior que R2 (divisor)O número de atributos em R1 é maior que R2 (divisor)
 
 
A divisão encontra os valores dos atributos numa relação queestão pareados com TODOS os valores da otra relação
Tal como a multiplicação é a divisão em aritmética, 
A divisão é ao produto cartesiano na álgebra relacional: 
O seu inverso
If X, Y and Z (como união dos anteriores) então:
 X DIVIDEDBY Y PER Z 
3838
Operações sobre conjuntos: Operações sobre conjuntos: divisãodivisão
3939
 A
 2
6
B
7
5
8
A B
2 7
2 5
2 8
6 7
6 5
6 8
 J K Produto Cartesiano
 C 
Imagine que temos C = J x K (o produto cartesiano)
A divisão é o oposto: C / J = K, C/K = J
Ex. SELECT 5 / 275;
SELECT 5 DIV 2; ~ floor();
Operações sobre conjuntos: Operações sobre conjuntos: divisãodivisão
4040
 pessoa
luis
linda
 conta
k1
k2
k3
 R(A) R(B) R(A/B)
/ =
Divisão: uma pesquisa do tipo:
Que pessoas tem conta nos bancos k1,k2 e k3?
x y
k1 luis
k2 luis
k3 luis
k4 luis
k1 sofia
k3 sofia
k2 pedro
k3 pedro
k4 pedro
k1 linda
k2 linda
k3 linda
Operações sobre conjuntos: Operações sobre conjuntos: divisãodivisão
4141
 y
luis
linda
 y
k1
k2
k3
x y
k1 luis
k2 luis
k3 luis
k4 luis
k1 sofia
k3 sofia
k2 pedro
k3 pedro
k4 pedro
k1 linda
k2 linda
k3 linda
 A B A/B
/ =
R(A) = {conta, pessoa}; R(B) = {conta}
Formalmente a divisão:
A/B = { x | Ǝ x,y A y B}⟨ ⟩ ⟨ ⟩ ∈ ∀ ⟨ ⟩ ∈
A/B contem todos os tuplos x tais que para 
cada tuplo y em B, existe um tuplo xy em A
Álgebra RelacionalÁlgebra Relacional
Fim primeira parteFim primeira parte
4242

Continue navegando