Sunteți pe pagina 1din 30

ALGEBRA RELAIONAL

Algebra relaional poate fi definit ca fiind o parte a algebrei ce


contine un set de operatori, care prelucreaz relaii n scopul obinerii
altor relaii.
Operatorii relaionali se mpart n :
I. Operatori de asamblare
reuniunea;
intersecia;
diferena;
produsul cartezian
II. Operatori unari :
proiecia;
selecia
III. Operatori de extensie :
compunerea;
diviziunea
1

Rezultatul obinut prin utilizarea operatorilor


algebrei relaionale este un tabel virtual.
Avnd n vedere fundamentele matematice
ale modelului relaional, algebra relaional
utilizeaz operatori clasici de manipulare a
ansamblurilor de date (reuniune,
intersecie, diferen, produs cartezian) i
introduce operatori proprii bazelor de date
(selecie, proiecie, compunere, diviziune).

I. OPERATORI DE ASAMBLARE
Operatorii de asamblare sunt operatori binari, care
primesc la intrare dou relaii i genereaz la ieire o
singur relaie.
Operatori
Binari

Relaie3

Relaie1
Relaie2

Operatorii de asamblare sunt:


Reuniunea;
Intersecia;
Diferena;
Produsul cartezian.
3

Algebra relaional: Operatori de asamblare - R

1. Reuniunea a dou relaii R i S, cu aceeai structur,

unde R este format din n tupluri i S este format din m


tupluri, are ca rezultat o a treia relaie T, avnd aceeai
structur cu a relaiilor surs i coninnd tuplurile care
aparin relaiei R sau S, notat T= R U S.
Relaia R
A

Relaia T (R reunit cu S)

Relaia S
A

a3

b3

c3

a1

b1

c1

a4

b4

c4

a2

b2

c2

a5

b5

c5
a3

b3

c3

a4

b4

c4

a5

b5

c5

a1

b1

c1

a2

b2

c2

Ex.
Care sunt furnizorii care au
livrat cel puin unul dintre produsele A
i B = reuniunea furnizorilor care au
livrat A cu furnizorii care au livrat B 4

REUNIUNEA

Marfuri_Cumparate (R)
Cod marfa

Denumire marfa

Unitate de masura

Calitate

100

Portocale

Kg

200

Prune

Kg

300

Caise

Kg

400

Piersici

Kg

Marfuri_Vandute (S)
Cod marfa

Denumire marfa

Unitate de masura

Calitate

100

Portocale

Kg

200

Prune

Kg

500

Mere

Kg

Marfuri Cumparate sau Vandute (T= R U S)


Cod marfa

Denumire marfa

Unitate de masura

Calitate

100

Portocale

Kg

200

Prune

Kg

300

Caise

Kg

400

Piersici

Kg

500

Mere

Kg

Reuniune se exprim n SQL conform sintaxei:

SELECT lista_cmpuri FROM nume_tabel_1


[WHERE conditie_1] UNION SELECT
lista_cmpuri FROM nume_tabel_2 [WHERE
conditie_2];
Exemplu:

SELECT [COD MARFA],[DENUMIRE


MARFA],[UNITATE DE MASURA],[CALITATE]
FROM [MARFURI CUMPARATE]
UNION SELECT [COD MARFA],[DENUMIRE
MARFA],[UNITATE DE MASURA],[CALITATE]
FROM [MARFURI VANDUTE];
6

Algebra relaional: Operatori de asamblare:I


2. Intersecia a dou relaii R i S cu aceeai structur este o relaie
T, (cu aceeai structur), coninnd tuplurile identice aparinnd
att lui R ct i lui S.
Relaia T (R intersectat cu S)
Relaia

Relaia

a1

b1

c1

a3

b3

c3

a2

b2

c2

a4

b4

c4

a4

b4

c4

a5

b5

c5

Ex.
Care sunt zilele n
care au fost cumprate
autoturismele A i B

a4

b4

c4

Ex.
Care sunt furnizorii care au
livrat i produsul A i produsul B =
intersecia tabelelor de furnizori care
au livrat
A cu fz. care au livrat B
7

INTERSECTIA

Marfuri_Cumparate (R)
Cod marfa

Denumire marfa

Unitate de masura Calitate

100

Portocale

Kg

200

Prune

Kg

300

Caise

Kg

400

Piersici

Kg

Marfuri_Vandute (S)
Cod marfa

Denumire marfa

Unitate de masura Calitate

100

Portocale

Kg

200

Prune

Kg

500

Mere

Kg

Tabelul Marfuri_Cumparate_si_Vandute (T= R S)


Cod marfa

Denumire marfa

Unitate de masura Calitate

100

Portocale

Kg

200

Prune

Kg

n SQL sintaxa pentru operaia de intersecie este:

SELECT lista_atribute_1 FROM tabel_1


[WHERE conditie_1] INTERSECT SELECT
lista_atribute_2 FROM tabel_2 [WHERE
conditie_2];
SELECT [COD MARFA],[DENUMIRE
MARFA],[UNITATE DE MASURA],[CALITATE]
FROM [MARFURI CUMPARATE]
INTERSECT SELECT [COD
MARFA],[DENUMIRE MARFA],[UNITATE DE
MASURA],[CALITATE]
FROM [MARFURI VANDUTE];
9

Algebra relaional: Operatori de Asamblare:D


3. Diferena a dou relaii R i S avnd aceeasi structur (R-S),
este o relaie T, cuprinznd mulimea tuplurilor aparinnd lui R
dar neaparinnd lui S.

Diferena nu este comutativ. Atributele relaiei diferen (T)


sunt cele ale primei relaii (desczutul), iar tuplurile care sunt
extrase din relaia desczut, nu se regsesc n relaia scztor
Relaia R
Relaia S
Relaia T R-S
A

a1

b1

c1

a2

b2

c2

Ex.
Care sunt clienii
care au cumprat
produsul A, fr a-l
cumpra pe B

a3

b3

c3

a4

b4

c4

a5

b5

c5

10

a1

b1

c1

a2

b2

c2

Marfuri_cumparate_dar_nevadute (T= R S)
Cod marfa

Denumire marfa

Unitate de masura

Calitate

300

Caise

Kg

400

Piersici

Kg

n SQL sintaxa este:


SELECT lista_atribute_1 FROM nume_tabel_1 [WHERE
conditie_1] MINUS SELECT lista_atribute_2 FROM
nume_tabel_2 [WHERE conditie_2];
SELECT [COD MARFA],[DENUMIRE MARFA],[UNITATE
DE MASURA],[CALITATE]
FROM [MARFURI CUMPARATE]
MINUS SELECT [COD MARFA],[DENUMIRE
MARFA],[UNITATE DE MASURA],[CALITATE] FROM
[MARFURI VANDUTE];
11

SELECT DISTINCT [COD MARFA], [DENUMIRE MARFA],


[UNITATE DE MASURA], [CALITATE]
FROM [MARFURI CUMPARATE]
WHERE [MARFURI CUMPARATE].[COD MARFA]=(SELECT [COD
MARFA] FROM [MARFURI VANDUTE] WHERE CALITATE=1);

SELECT [domeniu] list selecie cmpuri


FROM nume tabel_1
[WHERE tabel_1.cmp legtur=(SELECT cmp
legtur

FROM nume tabel_2

[WHERE criteriu de selecie pentru


subinterogare])

12

SELECT DISTINCT [Nrcontract], codfz, DATA FROM


CONTRACTE
WHERE CODFZ NOT IN
(SELECT CODFZ FROM CONTRACTE
WHERE([DATA]= #4/17/2012#));

13

SELECT DISTINCT [Nrcontract], codfz,


DATA FROM CONTRACTE
WHERE CODFZ IN
(SELECT CODFZ FROM CONTRACTE
WHERE([DATA]= #4/17/2012#));

14

Algebra relaional: Operatori de asamblare:PC


4. Produsul cartezian a dou relaii R i S (RxS) este o relaie T
stocnd mulimea perechilor obinute prin concatenarea
nregistrrilor aparinnd lui R cu cele aparinnd lui S.
Relaia S

Relaia R
A

a1
a2

b1
b2

Relaia T RxS
A
B
C
D
E

c1

d1

e1

c2

d2

e2

c3

d3

e3

15

a1

b1

c1

d1

e1

a1

b1

c2

d2

e2

a1

b1

c3

d3

e3

a2

b2

c1

d1

e1

a2

b2

c2

d2

e2

a2

b2

c3

d3

e3

PRODUS CARTEZIAN

Marfuri_Vandute (R)
Cod marfa

Denumire marfa

Unitate de masura Calitate

100

Portocale

Kg

200

Prune

Kg

500

Mere

Kg

Cantitati_Pe_Comenzi (S)
Numar

Cantitate

comanda
1001

100

2002

300

Cantitati_Marfuri_Vandute T= (R x S)
Cod marfa

Denumire marfa

Unitate

Calitate

de

Numar

Cantita

comanda

te

masura
100

Portocale

Kg

1001

100

100

Portocale

Kg

2002

300

200

Prune

Kg

1001

100

200

Prune

Kg

2002

300

500

Mere

Kg

1001

100

500

Mere

Kg

2002

300

16

n limbajul SQL, produsul cartezian a dou


tabele R si S se obine utiliznd una din
sintaxele:
a) SELECT * FROM nume_tabel_1,
nume_tabel_2;
b) SELECT lista_cmpuri FROM
nume_tabel_1, nume_tabel_2;
Exemplu:
SELECT * FROM [MARFURI
CUMPARATE],[CANTITATI_PE_COMENZI
];
17

II. OPERATORI UNARI


Operatorii unari se aplic asupra unei relaii i
genereaz o alt relaie.
Operatorii unari opereaz prin restricii.
Operatori
Unari
Relaie2

Relaie1

Operatorii unari permit decuparea unei relaii pe


orizontal : Selecia i pe vertical: Proiecia
18

Algebra relaional: Operatori Unari:Pr


1. Proiecia unei relaii R dup anumite atribute, este relaia R1 cu
structura R1 (Ai1, Ai2, , Aip), ale crei tupluri se obin prin eliminarea
valorilor atributelor din R care nu apar n R1 i prin suprimarea
tuplurilor identice (dubluri) .
Altfel spus, prin intermediul proieciei, dintr-un tabel cu un anumit
numr de coloane se obine unul cu un numr mai mic de coloane
Relaia R1

Relaia R
A

a1

b1

c1

d1

a2

b2

c2

a3

b3

c3

a1

b1

d2

a2

b2

d3

a3

b3

R1 (R;A,B)

19

n SQL PROIECTIA este conform sintaxei:


SELECT DISTINCT lista_atribute FROM nume_tabel;
Dac lipsete clauza DISTINCT rezultatul operaiei poate
conine tupluri duplicat (deci nu este relaie n sensul definiiei
din modelul relaional).

SELECT DISTINCT [COD MARFA], [DENUMIRE


MARFA]
FROM [MARFURI VANDUTE];

20

Algebra relaional: Operatori Unari:Sel


2. Selecia relaiei R fa de criteriul Q este relaia R1 cu aceeai
structur ca i R, ale crei tupluri satisfac criteriul specificat.
Altfel spus, prin operatorul de selecie, dintr-un tabel cu un anumit
numr de coloane se obine unul cu aceleai coloane, dar cu un numr
mai mic de rnduri.
Selecia triaz dintr-un tabel numai tuplurile ce satisfac o
condiie precizat (printr-un predicat).
Relaia R
A

a1

b1

a2

b2

a3

b3

R1SELECTIE(R;A=a2
OR A=a3)

R1
Relaia R2

R2SELECTIE(R;A=a2
AND B=b2)

a2

b2

a3

b3

21

n limbajul SQL selecia se exprim printr-o


form particular a frazei SELECT, n care:
lista de atribute este format din toate
atributele unei singure relaii
clauza WHERE este obligatorie i introduce
condiia de selecie pentru tupluri

SELECT * FROM nume_tabel WHERE


conditie [clauze_secundare];

22

EXEMPLU

SELECT *
FROM [MARFURI CUMPARATE]
WHERE CALITATE=1;

23

III. OPERATORI DE EXTENSIE: 1. Compunerea JOIN

Compunerea a dou tabele R i S, dup valorile


egale ale unui atribut comun A, conduce la obinerea
unui tabel T ale crei tupluri s-au format prin
produsul cartezian al tuplurilor din R i S prezentnd
valori egale pe atributul de compunere A.

Fie tabelele:
R- Marfuri_Vandute

Cod marfa

Denumire marfa

Unitate de masura

Calitate

100

Portocale

Kg

200

Prune

Kg

500

Mere

Kg

24

S - Cantitati_Comandate_Pe_Produs
Numar comanda

Cantitate

Cod marfa

1001

100

200

2002

300

100

T= Join
(Marfuri_Vandute,Cantitati_Comandate_Pe_Produs;
Marfuri_Vandute.Cod_marfa =
Cantitati_Comandate_Pe_produs.Cod_marfa)
Cod marfa

Denumire marfa

Unitate de masura

Calitate

Numar

Cantitate

comanda
100

Portocale

Kg

2002

300

200

Prune

Kg

1001

100

25

SELECT [Marfuri cumparate].[cod marfa],


[Marfuri cumparate].[denumire marfa],
[Marfuri cumparate].[unitate de masura],
[Marfuri cumparate].[Calitate],
[Cantitati_Comandate_pe_produs].[Num
ar comanda],
[Cantitati_Comandate_pe_produs].[canti
tate]
FROM [Marfuri cumparate] INNER JOIN
Cantitati_Comandate_pe_produs ON
[Marfuri cumparate].[cod marfa]=
[Cantitati_Comandate_pe_produs].[cod
marfa];
26

III. OPERATORI DE EXTENSIE: 2. DIVIZIUNEA

Diviziunea relaiei R1 prin relaia R2 este relaia


R3 format din toate tuplurile care, concatenate cu
fiecare tuplu din R2 returneaz ntotdeauna un
tuplu din R1, se noteaz R3 = R1 R2.

Observaie:

Trebuie ca mulimea atributelor relaiei R2 sa fie o


submulime a mulimii atributelor relaiei R1. Relaia R3
obinut prin operaia de diviziune are ca atribute toate
atributele diferenei celor dou mulimi de atribute (adic
acele atribute care aparin relaiei R1 i nu aparin relaiei
R2) i conine acele tupluri t care au proprietatea c pentru
orice tuplu s din R2 exist un tuplu n R1 care are un atribut
egal cu un atribut al tuplului s.
27

2. OPERATORI DE EXTENSIE: Div


R1
A

a1

b1
b1

a2

b1
b1

a3

b1
b1

a1

b2
b2

a3

b2
b2

a4

b2
b2

a1

b3
b3

a3

b3
b3

a5

b3
b3

a1

b4
b4

a3

b4
b4

a4

b4
b4

a1

b5
b5

a2

b5
b5

a3

b5
b5

a5

b5
b5

R2

R3

b1

b2

a1

b3

a3

b4
b5

28

Care dintre valorile


a1, a2, a3, a4 i a5
apar n relaia R1, n
tupluri, mpreun cu
toate valorile
atributului B
(mpritor) din R2,
respectiv b1, b2, b3,
b4, b5 ?

R1 - Cantitati_Marfuri_Vandute
Cod marfa

Denumire marfa

Unitate

de Calitate

Numar comanda

Cantitate

masura
100

Portocale

Kg

1001

100

100

Portocale

Kg

2002

300

200

Prune

Kg

1001

100

200

Prune

Kg

2002

300

500

Mere

Kg

1001

100

500

Mere

Kg

2002

300

R2 Marfuri_Comandate
Cod marfa

Denumire marfa

Unitate de masura Calitate

200

Prune

Kg

100

Portocale

Kg

500

Mere

Kg

R3 = R1 R2 CANTITATI_Pe _Comenzi
Numar

Cantitate

comanda
2002

300

1001

100

29

n SQL, diviziunea se exprim printr-o fraz SELECT,


introducnd explicit lista atributelor de proiecie i condiia de
egalitate a atributelor corespondente din cele doua relaii
prin clauza WHERE.
SELECT DISTINCT [CANTITATI_PE_COMENZI].[NUMAR
COMANDA], [CANTITATI_PE_COMENZI].[CANTITATE]
FROM [CANTITATI MARFURI VANDUTE],
CANTITATI_PE_COMENZI
WHERE [CANTITATI MARFURI VANDUTE].[NUMAR
COMANDA]=
[CANTITATI_PE_COMENZI].[NUMAR COMANDA];

30