Sunteți pe pagina 1din 4

Algebră relațională

Operații unare:
1. SELECT:
- Selectează dintr-un tabel pe baza unei condiții;
- Are formatul:
S<condiție>(<Nume_Tabel/Nume_Relație>)

2. PROJECT:
- Selectează coloane dintr-un tabel;
- Are formatul:
P<listă_atribute>(<Nume_Tabel/Nume_Relație>)

Operații binare:
1. Operații din teoria mulțimilor:
a. Reuniune:
- Trebuie să fie compatibilă: Cele 2 relații trebuie să aibă același tip
de n-upluri;
- Face o mulțime cu mai multe înregistrări întoarse din alte relații;
b. Intersecție;
c. Diferența;
d. Produs cartezian:
- Rezultă o relație Q(A1, A2, ..., An, B1, B2, ..., Bm)
2. Operații JOIN:
a. JOIN:
- Similar cu produsul cartezian, doar că se păstrează elementele ce
satisfac condiția;
- Formă:
Tabel_1 ⋈ col_1=col_2 Tabel_2
b. NATURAL JOIN:
- Echivalent cu INNER JOIN din SQL;
- Are forma:
Tabel_1 * col_1=col_2 Tabel_2
- Dacă col_1 și col_2 au același nume, se poate speciica doar acela:
Tabel_1 * col Tabel_2
- Dacă nu se specifică nicio coloană la condiție se consideră
implicit toate perechile de coloanele cu același nume;
c. JOIN ADITIONAL DREPT/STÂNG:
- Echivalent cu LEFT/RIGHT JOIN din SQL;
- Forma - stânga:
Tabel_1 ]⋈ col_1=col_2 Tabel_2
- Forma – dreapta:
Tabel_1 ⋈[ col_1=col_2 Tabel_2

Funcții agregat:
* Rezultatul este o relație cu un singur n-uplu.
Formă: F<funcții pe aici>(<Nume_Tabel/Nume_Relație>)

Funcții de grup:
* Se aplică mai multe funcții pe grupuri de înregistrări.
Formă: <grupul atributelor>F<funcții pe aici>(<Nume_Tabel/Nume_Relație>)

1) Sa se gaseasca adresa tuturor angajatilor ce lucreaza pentru


departamentul 'Cercetare’:

R1 = SDep_Nume=’Cercetare’(Departament) //se selectează dep. De cercetare


R2 = R1 ⋈D_Nr=Dep_Nr Angajat //se selectează angajații din dep. De cercetare
REZ = PNume, Prenume, Adresă(R2) //se selectează adresa, numele și prenumele

2) Pentru fiecare proiect localizat in 'Bucuresti', se cere lista numarului


proiectului, numarul departamentului coodornator, numele managerului
departamentului, adresa si data sa de nastere:

R1 = SP_Loc=’Bucuresti’(Proiecte)
R2 = R1 ⋈D_Coord=D_nr Departament
R3 = R2 ⋈SSN=M_SSN Angajat
REZ = PNume, Prenume, Adr, Data_N, D_nr, P_nr (R3)
3) Sa se gaseasca numele angajatilor care lucreaza la toate proiectele
controlate de departamentul cu numarul 5:

R1 = SD_Nr=5 (Departament)
R2 = R1 ⋈D_Nr=D_Coord Proiect
R3 = R2 ⋈SSN=P_Nr AngajatiProiecte
R4 = R3 ⋈SSN=SSN Angajat
REZ = PNume, Prenume (R4)

4) Sa se gaseasca lista tuturor angajatilor care au in intretinere doua sau


mai multe persoane:

R1(SSN, Nr_Intretinuti) = <A_SSN>F<COUNT(I_SSN)>(Intretinut)


R2 = SNr_Intretinuti>=2 (R1)
REZ = PNume, Prenume (R2 * Angajat)

5) Sa se gaseasca lista numelor angajatilor care nu au persoane in


intretinere:

R1 = PSSN (Angajat)
R2 = PA_SSN (Intretinut)
R3 = R1 - R2
REZ = PNume, Prenume (R3 * Angajat)

6) Sa se gaseasca lista managerilor care au cel putin o persoana in


intretinere:

R1(M_SSN) = Departament ⋈A_SSN=M_SSN Intretinut


R2 = PM_SSN (R1)
REZ = PNume, Prenume (R2 * Angajat)

7) Să se determine numele angajaților + numele supervizorilor, rezultatul


conținând și angajații fără supervizor:

R1(Nume_A, Prenume_A, SSSN) = PNume, Prenume, SSSN (Angajat)


R2 = R1 ] ⋈SSSN=SSN Angajat
REZ = PNume_A, Prenume_A, Nume, Prenume (R2)
8) Să se determine numele și SSN al angajaților și întreținuților pe care îi
au (în rezultat vor fi incluși toți angajații, chiar și cei fără întreținuți):

R1(Nume_A, Prenume_A, SSN) = PNume, Prenume, SSN (Angajat)


R2(Nume_I, Prenume_I, A_SSN) = PNume, Prenume, A_SSN (Întreținut)
REZ = R1 ] ⋈SSN=A_SSN R2

9) Să se determine numele managerilor ce au persoane în întreținere:

R1 = Angajat ⋈SSN=M_SSN Întreținut


R2 = R1 ⋈SSN=A_SSN Întreținut
REZ = PNume, Prenume (R2)

10) Să se determine numele departamentelor, managerilor pt


departamentele ale căror manageri au cel puțin 2 persoane în întreținere +
coordonează cel puțin 5 proiecte:

R1 = Departament ⋈D_nr=D_coord Proiect


R2 = PD_Nume, D_nr, P_nr (R1)
R3(D_Nume, D_Nr, Nr_P) = <D_nr>F<COUNT(P_nr)> (R1)
R4 = SNr_P>=5 (R3)
R5 = Departament ⋈SSN=M_SSN Angajat
R6 = R5 ⋈SSN=A_SSN Întreținut
R7 = PNume, Prenume, D_nr, I_SSN (R6)
R8(Nume, Prenume, D_Nr, Nr_I) = <Nume, Prenume, D_Nr>F<COUNT(I_SSN)> (R7)
R9 = SNr_I>=2 (R8)
R10 = R4 ⋈D_nr=D_nr R9
REZ = PNume, Prenume, D_Nume (R10)

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