Sunteți pe pagina 1din 22

BD Algebra relationala 1

Algebra relationala
Modelul relational al datelor si algebra relationala Modelul relational al datelor si algebra relationala
In terminologia relationala, un rind al tabelei este denumit n n- -uplu uplu, o
coloana poarta denumirea de atribut atribut iar tabela se numeste relatie relatie.
Tipul datelor descriind tipul valorilor ce pot apare in fiecare coloana
este numit si domeniu domeniu. Un domeniu domeniu D este reprezentat de un set de
valori atomice.
Este foarte util sa se specifice pentru un domeniu un nume relevant
pentru interpretarea valorilor datelor, ca de exemplu pentru relatia
aferenta entitatilor student, numele relatiei poate fi asignat la
valoarea STUDENT, iar atributele sale ca in exemplul de mai jos:
NUME NUME :Setul numelor persoanelor
Algebra relationala 2
BD
NUME NUME :Setul numelor persoanelor
NR_TEL NR_TEL :Numarul de telefon reprezentat pe 8 digiti
DEP_NR DEP_NR :Numarul departamentului la care studentul studiaza
Conceptul matematic ce acopera modelul relational este produsul
cartezian al listei domeniilor. Un domeniu este un simplu set de
valori ca de exemplu setul intregilor. Produsul cartezian al
domeniilor D1,D2,...Dn sau D1xD2,x..xDn este setul tuturor
n_uplurilor (v1,v2,...,vn) in care viDi. O relatie este reprezentata de
orice subset al produsului cartezian al unuia sau mai multor
domenii.
O schema relatie R data prin R(A1,A2,...,An) reprezinta un set al
atributelor Ai. Fiecare atribut Ai joaca rolul numelui acelui domeniu
Di in relatia R. Di este domeniul lui Ai si se noteaza dom(Ai). O
schema relatie este utilizata pentru descrierea relatiei R, unde R
este numele relatiei. Se defineste gradul relatiei ca fiind numarul
atributelor n ale schemei relatiei. Fie de exemplu o schema relatie
de grad 7, ce descrie studentii intr-o universitate:
STUDENT(Nume, SSN, Telefon, Adresa_stabila,
Adresa_flotanta, Virsta, Directie_specializare)
O relatie r(sau relatie instanta) a unei relatii R(A1,A2,...,An) notata
prin r(R), se reprezinta ca un set al n-uplurilor ti, asa ca
r=(t1,t2,...,tm). Fiecare n-uplu t este o lista ordonata de n valori
Algebra relationala 3
BD
prin r(R), se reprezinta ca un set al n-uplurilor ti, asa ca
r=(t1,t2,...,tm). Fiecare n-uplu t este o lista ordonata de n valori
t=<v1,v2,...,vn>, unde fiecare valoare vi pentru i=1,n este un
element al dom(Ai) sau o valoare speciala nula. Se utilizeaza de
asemenea in mod curent termenii relatie intensiva pentru R
respectiv relatie extensiva pentru relatia instanta r(R).
Se poate da pentru o relatie urmatoarea definitie:
O relatie r(R) este un subset al produsului cartezian al domeniilor ce
defineste R
r(R) (dom(A1),dom(A2),...,dom(An))
Produsul cartezian contine toate combinatiile domeniilor. Deci,
notind numarul valorilor sau cardinalitatea domeniului D prin [D], si
presupunind ca toate domeniile sint finite, numarul total al n-uplurilor
in produsul cartezian va fi dat de
[dom(A1)]*[dom(A2)]*....*[dom(An)]
Caracteristici ale relatiilor
ordinea n-uplurilor intr-o relatie. Se spune despre doua relatii in care
ordinea atributelor este diferita ca sint identice.
ordonarea valorilor intr-un n-uplu. Un n-uplu este o lista ordonata de
n valori. Desi, la nivel logic ordinea atributelor si valorile lor nu este
importanta, trebuie mentinuta corespondenta intre atribute si valori.
Algebra relationala 4
BD
importanta, trebuie mentinuta corespondenta intre atribute si valori.
O relatie r a schemei relatiei R=(A1,A2,...,An) este un set finit de
n-upluri r=(t1,t2,...,tm) unde fiecare n-uplu ti are forma data de R, cu
D o reuniune a domeniilor atributelor, D=dom(A1)dom(A2)
....dom(An). In aceasta definitie t(Ai) este o valoare din dom(Ai)
pentru i=1,n.
valorile intr-un n-uplu. Fiecare valoare in n-uplu este o valoare
atomica ce nu poate fi divizata in fragmente. Daca sint atribute care
nu au valori aplicabile la anumite n-upluri, atunci va fi reprezentata
de o valoare speciala numita atributul null.
interpretarea interpretarea unei unei relatii relatii. O schema relatie poate fi interpretata ca o
declaratie sau un tip de asertiune.
Se defineste schema bazei de date relationale S ca un set al
schemei relatiilor S=[R1,R2,...,Rm] impreuna cu un set al restrictiilor
de integritate. Se defineste instanta unei baze de date relationale ca
un set al relatiilor instanta [r1,r2,...,rm]. Se da mai jos, schema bazei
de date relationale COMPANIE, avind relatiile ANGAJAT,
DEPARTAMENT, LOC_DEP, PROIECT, LUCREAZA_LA,
INTRETINUT.
ANGAJAT (Nume, Ini, Pren, Ssn, Dat_Na, Adr, Sex, Salariu, Sssn,
D_Nr)
DEPARTAMENT(Dep_Nume, Dep_Nr, Dep_Manager,
Algebra relationala 5
BD
DEPARTAMENT(Dep_Nume, Dep_Nr, Dep_Manager,
Dat_Inc_Manager)
LOC_DEP(Dep_Nr, Dep_Loc )
PROIECT(P_Nume, P_Nr, P_Loc, Dep_Nr)
LUCREAZA_LA(A_Ssn, P-Nr , Ore)
INTRETINUT(A_Ssn , C_Nume, Sex, Data_N, Relatie)
Obs: Nu am insistat pe includerea in schema a tuturor atributelor, ci pe
modelarea schemei conform modelului relational
Operatia SELECT Operatia SELECT
Relatia ce rezulta dupa operatia SELECT contine aceleasi atribute
cu relatia initiala, asupra careia se face operatia. Se poate spune ca
in general operatia SELECT are urmatoarea sintaxa:
S
<conditie selectie>
(<nume relatie>)
Expresiile booleene specificate in <conditie selectie>, fac parte din
clase de forma:
<nume atribut> <operator relational> <valoare constanta>
sau
Algebra relationala 6
BD
sau
<nume atribut_1> <operator relational> <nume atribut_2>
unde,
<nume atribut> este numele unui atribut al relatiei definite; <operator
relational> este data de unul din operatorii {=,<,<=,>,>=,#}, iar
<valoare constanta> are interpretarea de constanta.
Exemple:
S
D_NR=4
(ANGAJAT)
S
SALARIU>4000
(ANGAJAT)
S
(D_NR=3 .AND. SALARIU>4000) .OR. (D_NR=4)
(ANGAJAT)
Semnificatia operatiilor booleene este:
(cond1 .AND. cond2) adevarata daca ambele conditii sint adevarate,
altfel falsa.
(cond1 .OR. cond2) este adevarata daca fie conditia 1, fie conditia 2
este adevarata.
(.NOT. cond) este adevarata atunci cind conditia este falsa.
Faptul ca operatia se aplica la o singura relatie face ca operatia de
selectie sa fie unara. Operatia se aplica la fiecare n_uplu individual,
iar gradul relatiei rezultante in urma unei operatii SELECT este egal
Algebra relationala 7
BD
iar gradul relatiei rezultante in urma unei operatii SELECT este egal
cu gradul (ordinul) relatiei initiale R. Operatia SELECT este
comutativa comutativa adica
S<cond1>(S<cond2>(R))=S<cond2>(S<cond1>(R))
O cascada de operatii SELECT se pot combina utilizind operatorul
AND.
S<cond1>(S<cond2>(...(S<condn>(R))..)=S<cond1>.AND.<cond2>
.AND..AND. <condn>(R)
Operatia PROJECT Operatia PROJECT
Daca se considera o relatie similara cu o tabela atunci operatia
SELECT selecteaza acele rinduri din tabela ce corespund conditiei de
selectie.
Operatia PROJECT este utilizata pentru a selecta numai acele coloane
ce corespund listei atributelor specificate. Se presupune ca se doreste
obtinerea pentru angajatii companiei a numelui si prenumelui.
P
(NUME, PREN)
(ANGAJAT)
Se observa ca forma generala a unei operatii PROJECT este
P
<lista atribute>
(<nume relatie>)
Algebra relationala 8
BD
P
<lista atribute>
(<nume relatie>)
unde,
P este simbolul utilizat pentru operatia PROJECT;
<lista atribute> reprezinta lista atributelor pastrate din relatia
specificate prin <nume relatie>.
Operatia PROJECT nu este in general comutativa. Aplicarea unei
succesiuni de operatii PROJECT, daca succesiunea este valida,
este echivalenta cu o singura operatie PROJECT.
P<lista1>(P<lista2>(R))=P<lista1>(R)
Obs: Operatia este valida numai daca lista2 contine toate atributele din
lista1
Combinatii Select Project
Se considera ca exemplu, obtinerea relatiei ce contine numele,
prenumele si salariul angajatilor ce lucreaza in departamentul 3.
Pentru aceasta este necesara aplicarea atit a operatiei SELECT cat
si a operatiei PROJECT. Aplicarea pe rand a operatiilor SELECT si
PROJECT duce la crearea unei relatii intermediare notata in
exemplul de mai jos REL1.
REL1= S
D_NR=3
(ANGAJAT)
REZULTAT = P
NUME,PREN,SALARIU
(REL1)
Oalta, cea a utilizarii unei operatii compuse, asigura obtinerea
Algebra relationala 9
BD
Oalta, cea a utilizarii unei operatii compuse, asigura obtinerea
relatiei rezultat fara o relatie intermediara.
REZULTAT = P
NUME,PREN,SALARIU
(S
D_NR=3
(ANGAJAT))
Aplicarea secventelor complexe de operatii poate rezolva si
problema redenumirii atributelor in relatiile intermediare. Astfel,
redenumirea atributelor in relatia rezultat se exemplifica in urmatorul
exemplu
TEMP = S
D_NR=5
(ANGAJAT)
REZ(P_NUME,U_NUME,SALARIU) = P
NUME,PREN,SALARIU
(TEMP)
Setul teoretic al operatiilor
Prin setul teoretic se inteleg operatiile standard cum sunt
REUNIUNE, INTERSECTIE, DIFERENTA. Operatiile din aceasta
categorie se aplica asupra a doua relatii, deci fac parte din categoria
operatiilor binare. Ca exemplu, se presupune ca se doreste lista
numerelor de cod (Social Security Number) a tuturor angajatilor ce
lucreaza in departamentul 3 sau sunt supervizori angajati ai
departamentului 3. O modalitate de realizare este data mai jos:
REL1= S (ANGAJAT)
Algebra relationala 10
BD
REL1= S
D_NR=3
(ANGAJAT)
REL2 = P
SSN
(REL1)
REL3(Ssn) = P
SSSN
(REL1)
REZ = REL2 REL3
Aplicarea operatiei REUNIUNE asupra unei baze de date relationale
nu este posibila intotdeauna. Referitor la operatiile de mai sus este
necesar ca cele doua relatii sa aiba acelasi tip de n-upluri conditie
numita si compatibilitatea compatibilitatea reuniunii reuniunii.
Se spune ca doua relatii R(A1,A2,...An) si S(A1,A2,...,An) sint
compatibile reuniunii daca au acelasi grad n, si daca dom(Ai) este
identic cu dom(Bi) pentru 1<=i<=n. Altfel spus, cele doua relatii au
acelasi numar de atribute si atributele caracterizeaza acelasi
domeniu.
Fie doua relatii R si S. Se pot defini operatiile teoretice pe cele doua
relatii astfel:
REUNIUNEA este operatia al carei rezultat include toate n-uplurile
Algebra relationala 11
BD
REUNIUNEA este operatia al carei rezultat include toate n-uplurile
ce sint fie in R, fie in S, fie in ambele relatii R si S. In rezultat se
elimina n-uplurile duplicat, relatia rezultanta se noteaza prin RS.
INTERSECTIA este operatia ce asociaza relatiei RS acele n-upluri
ce sint continute atat in relatia R cat si in relatia S.
DIFERENTA notata R\S contine toate n-uplurile ce se gasesc in
relatia R si nu se gasesc in relatia S.
Rezultatul produsului cartezian intre relatiile R(A1,A2,..,An) si
S(B1,B2,...,Bm) este o relatie Q(A1,A2,..,An,B1,B2,..,Bm) avind m+n
atribute in ordinea specificata. In relatia rezultata se combina un
n-uplu al relatiei R cu fiecare n-uplu al relatiei S, asa ca, daca R are
nr n-upluri si S are ns n-upluri, atunci Q=RxS va avea nr*ns n-upluri.
Ca exemplu, se considera cerinta de obtinere pentru fiecare
angajata de sex feminin lista numelor persoanelor pe care le are in
intretinere. O posibilitate este:
REL1 = S (ANGAJAT)
Algebra relationala 12
BD
REL1 = S
SEX='F'
(ANGAJAT)
REL2 = P
NUME,PREN,SSN
(REL1)
REL3 = REL2 x INTRETINUT (produs cartezian)
REL4 = S
SSN=A_SSN
(REL3)
REZ = P
NUME,PREN,C_NUME
(REL4)
REL3 este rezultatul aplicarii produsului cartezian intre REL2 si
relatia INTRETINUT.
Operatia JOIN
Operatia JOIN este utilizata pentru combinarea n-uplurilor din doua
relatii intr-o singura relatie. Este una din operatiile specifice bazelor de
date relationale ce implica mai mult de o relatie, permitind construirea
de noi relatii pe baza celor existente.
Se considera ca se doreste sa se obtina numele managerului fiecarui
departament. Pentru aceasta este necesara combinarea n-uplurilor
ANGAJAT cu n-uplurile DEPARTAMENT si selectarea acelora pentru
care atributele Ssn si Dep_manager au valori egale. Aceasta poate fi
realizata prin utilizarea operatiei JOIN, astfel:
REL1 = DEPARTAMENT ><
DEP_MANAGER=SSN
ANGAJAT
Algebra relationala 13
BD
REL1 = DEPARTAMENT ><
DEP_MANAGER=SSN
ANGAJAT
REZ = P
DEP_NUME,NUME,PREN
(REL1)
In concluzie operatia JOIN intre doua relatii R(A1,A2,..,An) si
S(B1,B2,..,Bm) are structura
R><
<cond join>
S
avind ca rezultat o relatie Q cu n+m atribute Q(A1,A2,..,An,B1,..Bm) in
aceasta ordine, fiind similara cu produsul cartezian dar, sint
retinute numai acele n-upluri ce satisfac suplimentar conditia de
join.
Structura tipica a unei conditii join este:
<conditie> AND <conditie> AND <conditie> AND..AND <conditie>
unde, fiecare conditie este de forma Ai@Bi, cu Ai atribut al relatiei R si
Bi atribut al relatiei S. Sigur ca aceasta conditie nu poate fi
adevarata decit daca atributele Ai si Bi reprezinta acelasi
domeniu. Operatia notata simbolic @ esta asimilata cu una din
operatiile {=,<,<=,>=,>,#}. Se precizeaza faptul ca n-uplurile la
care atributele JOIN sunt nulle nu apar la rezultat.
Cele mai obisnuite operatii JOIN invoca numai conditii de egalitate,
motiv pentru care operatia se va numi EQUIJOIN. In aceasta situatie se
Algebra relationala 14
BD
motiv pentru care operatia se va numi EQUIJOIN. In aceasta situatie se
pot obtine in rezultat mai multe perechi de atribute care au aceeasi
valoare ca urmare a indeplinirii egalitatii. Intrucit relatia obtinuta este
superflua, o noua operatie a fost introdusa, operatie numita si
NATURAL JOIN care elimina al doilea atribut din conditia de egalitate.
Pentru NATURAL JOIN se va lista numele atributelor comune intre
care avem conditia de egalitate.
Se cere obtinerea informatiilor despre proiecte impreuna cu cele ale
departamentelor ce le coordoneaza:
PROIECT_DEPART = PROIECT ><
(DEP_NR)
DEPARTAMENT
O operatie ceruta des in baze de date este DIVISION, operatie ce
doreste sa dea raspuns la intrebari de tipul "care este numele
angajatilor ce lucreaza la aceleasi proiecte ca si angajatul Popescu
Vasile ?". Pentru rezolvare se procedeaza astfel:
1. se determina lista proiectelor la care lucreaza Popescu Vasile,
obtinand o noua relatie REL2
REL1 = S
NUME='POPESCU' .AND. PREN='VASILE'
(ANGAJAT)
REL2 = P
P_NR
(LUCREAZA_LA *
A_SSN=SSN
REL1)
2. se creeaza relatia ce include perechea atributelor <P_NR, A_SSN>,
Algebra relationala 15
BD
2. se creeaza relatia ce include perechea atributelor <P_NR, A_SSN>,
pentru angajatii ce lucreaza la proiectul ce are numarul <P_NR>
REL3 = P
P_NR,A_SSN
(LUCREAZA-LA)
3. in final se aplica relatia DIVISION la doua relatii, ce va identifica
angajatii doriti.
REL4(SSN) = REL3+REL2
REZ = P
NUME,PREN
(REL4 * ANGAJAT)
JOIN aditional
Operatia JOIN se aplica doar la n-uplurile ce satisfac conditia de
join. Ca exemplu, la NATURAL JOIN intre relatiile R si S, toate
n-uplurile pentru care atribute cu nume identic din cele doua relatii
sunt egale apar in rezultat, iar n-uplurile din cele doua relatii ce nu
satisfac conditia sint eliminate din rezultat. Sunt situatii in care se
doreste ca rezultatul sa contina toate n-uplurile unei relatii. Pentru
aceasta a fost introdus un set de operatii numit si JOIN ADITIONAL
pentru pastrarea tuturor n-uplurilor din R , S sau din ambele. De
exemplu, pentru a obtine lista ce contine toti angajati si la cei care
Algebra relationala 16
BD
exemplu, pentru a obtine lista ce contine toti angajati si la cei care
sunt manageri si departamentul ;a care sunt manageri se poate
aplica o operatie JOIN ADITIONAL STING (LEFT OUTER JOIN),
operatie cu simbulul ]><, care va retine fiecare n-uplu din prima
relatie sau relatia stinga R, iar acolo unde conditiile join nu sunt
adevarate atributele lui S in rezultat au valori nule.
REL1 = (ANGAJAT) ]><
SSN=DEP_MANAGER
(DEPARTAMENT)
REZ = P
NUME,INI,PREN,DEP_NUME
(REL1)
Similar pentru JOIN ADITIONAL DREPT
Functii
Operatiile discutate nu pot obtine rezultate ale functiilor matematice
efectuate asupra colectiilor de valori din baza de date (operatii
asupra valorilor unui atribut in toate n-uplurile relatiei). De exemplu,
o cerere care sa furnizeze suma salariilor tuturor angajatilor.
Functii agregat:
Principalele functii oferite de algebra relationala sunt: SUM, AVERAGE,
MAX, MIN, COUNT. SUM si AVERAGE se pot aplica numai atributelor
cu domeniu numeric, MAX, MIN numai atributelor cu domeniu ce poate
Algebra relationala 17
BD
cu domeniu numeric, MAX, MIN numai atributelor cu domeniu ce poate
fi ordonat, pe cind functia COUNT se poate aplica pentru atribute cu
orice domeniu. Oricare din aceste functii se iau in calcul toate n-uplurile
unei relatii.
Functii de grup:
Se aplica independent pentru n-uplurile apartinand unor grupuri de
n-upluri.
Ca exemplu, aplicarea functiilor pe grupul angajatilor care lucreaza in
cadrul aceluiasi departament, identificati prin valoarea atributului D_nr
ca atribute de grupare
O operatie de tip functie de grup se scrie:
<grupul atributelor>
F
<lista functii>
(<nume relatie>)
unde,
<grupul atributelor> este o lista a atributelor relatiei specificate prin
<nume relatie>;
<lista functii> se refera la o lista cu perechii <functie>,<atribut>.
Algebra relationala 18
BD
<lista functii> se refera la o lista cu perechii <functie>,<atribut>.
Obs:
Daca atributele de grupare lipsesc functiile se aplica pe intreaga
relatie obtinand o relatie ce contine un singur n-uplu si un numar de
atribute egal cu numarul functiilor invocate.
Atunci cand sunt precizate atribute de grupare relatia rezultat are un
numar de atribute dat de suma dintre numarul atributelor de grupare
si numarul de functii invocate si un n umar de n-uluri egal cu
numarul valorilor distincte ale atributelor de grupare.
Exemple:
Se considera baza de date COMPANIE la care se doreste sa se
obtina pentru fiecare departament, numarul angajatilor si media
salariilor angajatilor pe departament. Relatia rezultata are atributele
D_NR, NUMAR_ANGAJATI, MEDIE_SALARIU obtinute prin
aplicarea functiilor COUNT si AVERAGE in conjunctie cu atributul
de grupare.
R(D_NR, NUMAR_ANGAJATI, MEDIE_SALARIU) =
F (ANGAJAT)
Algebra relationala 19
BD
D_NR
F
COUNT SSN, AVERAGE SALARIU
(ANGAJAT)
Daca in schimb nu se specifica atributele de grup atunci functia se
aplica la toate n-uplurile relatiei, obtinind o relatie cu un singur
n-uplu:
F
COUNT SSN, AVERAGE SALARIU
(ANGAJAT)
Exemple
Ex.1. Sa se gaseasca adresa tuturor angajatilor ce lucreaza pentru
departamentul 'Cercetare,.
CERCET_DEPART = S
DEP_NUME='Cercetare'
(DEPARTAMENT)
CERCET_DEPART_ANGAJAT = (CERCET_DEPART ><
D_NR=DEP_NR
ANGAJAT)
REZ = P
NUME,INI,PREN,ADR
(CERCET_DEPART_ANGAJAT)
Ex.2. Pentru fiecare proiect localizat in 'Bucuresti', se cere lista
numarului proiectului, numarul departamentului coodornator,
numele managerului departamentului, adresa si data sa de nastere.
Algebra relationala 20
BD
numele managerului departamentului, adresa si data sa de nastere.
BUC_PROIECT = S
P_LOC='BUCURESTI'
(PROIECT)
COORD_DEP = (BUC_PROIECT ><
DEP_NR=DEP_NR
DEPARTAMENT)
PROIECT_DEP_MANAGER = (COORD_DEP ><
DEP_MANAGER=SSN
ANGAJAT)
REZ =
P
P_NR,DEP_NR,NUME,INI,PREN,ADR,DAT_NA
(PROIECT_DEP_MANAGER)
Ex.3. Sa se gaseasca numele angajatilor care lucreaza la toate
proiectele controlate de departamentul cu numarul 5.
DEP5_PROIECT(P_NR) = P
P_NR
(S
DEP_NR=5
(PROIECT)
ANG_PROIECT(SSN,P_NR) = P
A_SSN,P_NR
(LUCREAZA_LA)
REZ1 = ANG_PROIECT + DEP5_PROIECT
REZ = P
NUME,INI,PREN
(REZ1*ANGAJAT)
Ex.4. Sa se gaseasca lista tuturor angajatilor care au in intretinere doua
sau mai multe persoane. In mod strict aceasta nu poate fi rezolvata
prin operatii ale algebrei relationale. Pentru aceasta se utilizeaza
Algebra relationala 21
BD
prin operatii ale algebrei relationale. Pentru aceasta se utilizeaza
functia COUNT ce nu face parte din operatiile algebrei relationale. In
formularea de mai jos s-a presupus ca persoanele in intretinerea
unui anumit angajat au nume distincte.
REL1(SSN,NR_DE_INTRETINUTI) =
A_SSN
F
COUNTC_NUME
(INTRETINUT)
REL1 = S
NR_DE_INTRETINUTI>2
(REL1)
REZ = P
NUME,INI,PREN
(REL1 * ANGAJAT)
Ex.5. Sa se gaseasca lista numelor angajatilor care nu au persoane in
intretinere.
REL1 = P
SSN
(ANGAJAT)
ANG_CU_INTRETINUT = P
A_SSN
(INTRETINUT)
ANG_FARA_INTRETINUT = (REL1 - ANG_CU_INTRETINUT)
REZ = P
NUME,INI,PREN
(ANG_FARA_INTRETINUT * ANGAJAT)
Ex.6. Sa se gaseasca lista managerilor care au cel putin o persoana in
intretinere.
REL1(SSN) = P
DEP_MANAGER
(DEPARTAMENT)
Algebra relationala 22
BD
REL1(SSN) = P
DEP_MANAGER
(DEPARTAMENT)
ANG_CU_INTRETINUT = P
A_SSN
(INTRETINUT)
MANAGER_CU_INTRETINUT = (REL1 II ANG_CU_INTRETINUT)
REZ = P
NUME,INI,PREN
(MANAGER_CU_INTRETINUT * ANGAJAT)

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