Sunteți pe pagina 1din 28

Algebra RELATIONALA

Curs nr. 9

Algebra relaional cuprinde un ansamblu de


operatori ce actioneaza pe relaii (tabele surs) i
produc noi relaii (tabele rezultat).
Clasificarea operatorilor se poate face n funcie de
modul de aplicabilitate, deosebind astfel:
A. Operatorii generali pe mulimi sunt :
Reuniune;
Intersecie;
Diferen;
Produs cartezian.
B. Operatorii specifici pe relaii sunt:
Selecie;
Proiecie;
Compunere;
Diviziune.

O alt clasificare a operatorilor se bazeaz pe numrul de tabele


cerute de acel operator. Astfel, deosebim operatorii binari care
se aplic pentru cel puin dou tabele, operatori unari pentru a
cror aplicare este nevoie de cel puin o tabel,operatorii de
extensie.
Operatorii binari sunt :
Reuniune;
Intersecie;
Diferen;
Produs cartezian;
Operatorii de extensie sunt:
Compunere;
Diviziune.
Operatori unari sunt:
Selecie;
Proiecie.

REUNIUNEA a doua relatii R si S, cu aceeasi


structura, unde R este formata din n tupluri,
iar S din m tupluri, are ca rezultat o a treia
relatie T, avand aceeasi structura cu a
relatiilor sursa si continand n+m tupluri.
RELATIA R

RELATIA T(RUS)
RELATIA S

A
a1
a2

B
b1
b2

A
a3
a4

B
b3
b4

a1

b1

a2

b2

a3

b3

a4

b4

INTERSECTIA a doua relatii R si S avand aceeasi structura, este o relatie T


continand tuplurile identice ce apartin atat lui R cat si lui S.
RELATIA R

RELATIA S

a1
a2

b1
b2

A
a1
a3

B
b1
b3

RELATIA T

A
a1

B
b1

Diferenta a doua relatii R si S avand aceeasi structura (R-S)


este o relatie T ce contine multimea tuplurilor apartinand
lui R, dar neapartinand lui S.

Relatia R

Relatia S

a1 b1 c1
a2 b2 c2

A
a3
a4
a5
a6

B
b3
b4
b5
b6

Relatia T

C
c3
c4
c5
c6

A
a1
a2

B
b1
b2

C
c1
c2

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.
Relatia R
Relatia S
Relatia T

A
a1
a2

B
b1
b2

C
c1
c2

D
d1
d2

A
a1
a1
a2
a2

B
b1
b1
b2
b2

C
c1
c2
c1
c2

D
d1
d2
d1
d2

Proiectia. Din relatia R se obtine o alta


relatie R1, care va contine o
submultime din atributele initiale din
R, fara tupluri duplicate. Numarul de
atribute din R1 este mai mic dect
numarul de atribute din R.

Relatia R

A
a1
a2
a3

B
b1
b2
b3

C
c1
c2
c3

R1
(R;A,B)
Relaia R1

D
d1
d2
d3

A
a1
a2
a3

B
b1
b2
b3

Prin intermediul proieciei, dintr-un tabel cu un


anumit numr de coloane se obine unul cu un
numr mai mic de coloane, dar cu acelasi numar de
inregistrari

Selecia relaiei R fa de criteriul Q este relaia R1


cu aceeai structur ca i R, ale crei tupluri satisfac
criteriul specificat.
R1
SELECTIE(R;A=a2 OR A=a3)

Relatia R

A
a1
a2
a3

Relaia R1

B
b1
b2
b3

A
a2

B
b2

a3

b3

Compunerea
Compunerea a dou tabele R1 i R2 este o tabel R3 ce combin tuplurile celor
dou tabele surs, fiind alese doar acelea care ndeplinesc o anumit condiie
specificat n cadrul compunerii. Gradul relaiei obinute ca urmare a compunerii a
dou relaii este egal cu suma gradelor relaiilor surs. n funcie de natura
condiiilor, compunerea cunoate mai multe cazuri particulare :
echicompunerea;
compunerea natural;
compunerea extern.

Echicompunerea

Este compunerea pentru care condiia este alctuit numai din egaliti,
putnd conine una sau mai multe egaliti. n cazul echicompunerii n
tabela rezultat apar dou cmpuri ce au valori identice. Gradul relaiei
obinute ca rezultat al echicompunerii este egal cu suma gradelor celor doua
relaii surs.

Compunerea natural
Compunerea natural este echicompunerea a dou tabele,
pentru care exist cel puin cte un cmp avnd acelai nume
i tip i n care, din rezultat, se elimin cmpurile identice.
Gradul relaiei obinute ca rezultat al compunerii naturale este
mai mic dect suma gradelor celor dou relaii surs, deoarece
sunt eliminate cmpurile identice.

Compunerea extern
Compunerea extern este o echicompunere care,
spre deosebire de aceasta, afieaz i tuplurile care
nu au corespondent n cadrul celor dou tabele surs.
Compunerea extern poate s fie la stnga i n acest
caz se vor afia toate tuplurile din primul tabel, pentru
cele care nu au corespondent se completeaz cu
NULL valoarea atributelor lips, iar din al doilea tabel
se vor afia doar tuplurile care au corespondent n
primul tabel. Compunerea extern la dreapta
presupune acelai mecanism, cu deosebirea c se vor
afia toate tuplurile din tabelul doi chiar dac au sau
nu corespondent iar din tabelul unu se vor afia doar
tuplurile ce au corespondent.

Diviziunea relaiei R1 (A1, A2 An) de grad (p+m)


prin relaia R2 (Ap+1, , Am) de grad m este relaia E
(A1, A2, , Ap) de grad p, format din toate tuplurile
care, concatenate cu fiecare tuplu din R2, dau
totdeauna un tuplu din R1 (E = R1 R2).

Relatia RS

A
a1
a2
a3

B
b1
b2
b3

C
c1
c2
c3

Relatia R

D
d1
d2
d3

E
e1
e2
e3

C
c1
c2
c3

D
d1
d2
d3

Relatia S

E
A
e1
a1
e2
a2
e3
a3

B
b1
b2
c3

Realizarea operatorilor relaionali n


SQL Operatori binari
Tabele pentru exemplificare

Reuniunea: CLIENTI411 U CLIENTI419

Intersecia: CLIENTI411 CLIENTI419


CodC Nume Oras
1
A
Iasi
Realizare SQL:
SELECT CLIENTI411.*
FROM CLIENTI411 INNER JOIN CLIENTI419 ON CLIENTI411.CODC=CLIENTI419.CODC;
Sau
SELECT CLIENTI411.*
FROM CLIENTI411, CLIENTI419
WHERE CLIENTI411.CODC=CLIENTI419.CODC;
Sau
SELECT CLIENTI411.*
FROM CLIENTI411
WHERE CODC IN (SELECT CODC F ROM CLIENTI419) ;

Diferenta: CLIENTI411 - CLIENTI419


CodC

Nume

Oras

2
3

B
C

Cluj
Cluj

Realizare SQL:
SELECT CLIENTI411.*
FROM CLIENTI411 LEFT JOIN CLIENTI419
ON CLIENTI411.CODC=CLIENTI419.CODC
WHERE CLIENTI419.CODC IS NULL;
Sau
SELECT CLIENTI411.*
FROM CLIENTI411
WHERE CODC NOT IN (SELECT CODC FROM CLIENTI419) ;

Produs Cartezian
CLIENTI419 X PRODUSE
NUME
A
D
A
D

DENPROD
P1
P1
P2
P2

Realizare SQL:
SELECT NUME, DENPROD
FROM CLIENTI419, PRODUSE;

PROIECTIE (CLIENTI419; CodC, Nume)


CodC

Nume

1
4

A
D

Realizare SQL:
SELECT CodC, Nume FROM Clienti419 ;

SELECTIE (CLIENTI411; Oras=Cluj)


CodC Nume Oras
2
B
Cluj
3
C
Cluj

Realizare SQL:
SELECT Clienti411.* FROM Clienti411
WHERE Oras=CLUJ ;

Compunere (CLIENTI419, FACTURI ;


CLIENTI419.CODC=FACTURI.CODC )
CLIENTI419.CODC NUME ORAS

NRF

VALOARE

FACTURI.CODC

CLUJ

100

12.000.000,00 lei

CLUJ

101

13.000.000,00 lei

Realizare SQL:
SELECT * FROM CLIENTI411 INNER JOIN FACTURI ON
CLIENTI419.CODC=FACTURI.CODC ;

Compunere condiionat
Clauza LEFT OUTER JOIN, conserv
toate nregistrrile tabelei din stnga
SELECT *
FROM T1 LEFT OUTER JOIN T2
ON T1.A1 = T2.A3;
T1

A3

A4

15

10

AA

25

15

BB

A1

A2

10
20

REZULTAT

T2

A1

A2

A3

A4

10

15

10

AA

20

25

NULL

NULL

Clauza RIGHT OUTER JOIN, conserv


toate linile tabelei din dreapta
SELECT *
FROM T1 RIGHT OUTER JOIN T2
ON T1.A1 = T2.A3;
T1

A1

A2

10
20

RZULTAT

T2

A3

A4

15

10

AA

25

15

BB

A1

A2

A3

A4

10

15

10

AA

NULL

NULL

15

BB

Diviziunea este operatorul relaional a crui realizare n SQL este destul de


dificil. Pentru a identifica clienii care au cumprat aciuni la ambele societi
avnd codul CABU i ADME va trebui s realizm diviziunea tabelului
Tranzacie la tabelul ce conine ca nregistrri cele dou coduri de societi

S-ar putea să vă placă și