42
Bases de Dados Bases de Dados Álgebra Relacional Álgebra Relacional ou ou Como manipular uma BD SQL Como manipular uma BD SQL P. Serendero, 2011-13 P. Serendero, 2011-13 1

Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

Embed Size (px)

Citation preview

Page 1: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

Bases de DadosBases de Dados

Álgebra RelacionalÁlgebra Relacionalouou

Como manipular uma BD SQL Como manipular uma BD SQL

P. Serendero, 2011-13P. Serendero, 2011-13

11

Page 2: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 3: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 4: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

44

Álgebra Relacional: operadores

Operadores UnáriosSELECT ( σ ) RESTRIÇÃO: selecciona um subconjunto de tuplas PROJECT( π) PROJEÇÃO: selecciona apenas colunas na projeçãoJOIN (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áriosJOIN (INNER JOIN, OUTER JOIN), … REUNIÃO, DIVISÃO

maisRENAME (símbolo: ρ (ro))FUNÇÕES AGREGADAS SUM, COUNT, AVG, MIN, MAX, …

8 operadoresoriginais de Codd

Page 5: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 6: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

Á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

Page 7: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 8: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

a1a2a3

b1b1b2

b1b2b3

c1c2c3

a1a2a3

b1b1b2

c1c1c2

Reunião (natural)

aaabc

xz

axyzxy

divisão

Panorama geral dos 8 operadores originais (Date)

Page 9: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 10: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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 ππ no SELECT. Esta é a no SELECT. Esta é a projeção projeção na A.R.na A.R.

1010

Page 11: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 12: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 13: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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 SELECTUma 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

Page 14: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 15: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 16: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 17: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 18: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

Operadores unários: PROJECT

Indicado com a letra π (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.:

π 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.AindaSELECT * FROM EMBARCAÇÃO; = procurar todos os atributos

1818

Page 19: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 20: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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)

Page 21: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

Operadores unários: RENAMEPodemos 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 escreverEx: calculando vendas totais para cada produtoSELECT 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 é pTabela vendas, congnome é v Na nova R estes são os nomes de cada coluna da tabela (o cabeçalho)GROUP BY? LEFT JOIN?

2121

Page 22: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 23: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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 cidadec-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

Operadoresdevem serdo mesmotipo

Page 24: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 25: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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 selectA 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

Page 26: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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. Caso contrá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

Page 27: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 28: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

UNIÃOExemplo: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

Page 29: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

UNIÃOExemplo: 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

Page 30: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

(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

Page 31: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

(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

Page 32: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 33: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 34: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 35: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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-velaSQL: 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

Page 36: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

Á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

Page 37: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 38: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

Operações sobre conjuntos: Operações sobre conjuntos: divisãodivisãoA mais dificil das operações. Utiliza 3 operadores: x, A mais dificil das operações. Utiliza 3 operadores: x, π, −π, −(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 que

estã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

Page 39: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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();

Page 40: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 41: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

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

Page 42: Bases de Dados - w3.ualg.ptw3.ualg.pt/~pserende/DATABASES/DATABASES/.../6-Algebra-Relacional.pdf · 3 Álgebra Relacional SQL (Structured Query Language) linguagem para criar, modificar

Álgebra RelacionalÁlgebra Relacional

Fim primeira parteFim primeira parte

4242