1 UNIVERSITATEA “OVIDIUS” CONSTANTA SISTEME INFORMATIC E DE ASISTARE A DECIZIILOR CIG, ANUL III, SEMESTRUL II Ozten CHELAI 2 CUPRINS 1. CURS 1. Baze… [614552]

Ozten CHELAI
1 UNIVERSITATEA “OVIDIUS” CONSTANTA

SISTEME INFORMATIC E DE ASISTARE A DECIZIILOR

CIG, ANUL III, SEMESTRUL II

Ozten CHELAI
2 CUPRINS
1. CURS 1. Baze de date. Concepte. ………………………….. ………………………….. …………………. 5
1.1. Baze de date. Considerații generale ………………………….. ………………………….. ……….. 5
1.1.1. Definiție ………………………….. ………………………….. ………………………….. ………….. 5
1.1.2. Obiecte ………………………….. ………………………….. ………………………….. …………… 5
1.2. SGBD (Sisteme pentru Gestiunea Bazelor de Date) ………………………….. ……………… 5
1.2.1. Definitie ………………………….. ………………………….. ………………………….. ………….. 5
1.2.2. Nivele de abstractizare a datelor ………………………….. ………………………….. …….. 5
1.2.3. Arhitectură ………………………….. ………………………….. ………………………….. ………. 6
1.2.4. Servicii ………………………….. ………………………….. ………………………….. …………… 6
1.2.5. Instrumente de prelucrare ………………………….. ………………………….. ………………. 6
1.2.6. Avantaje ………………………….. ………………………….. ………………………….. …………. 6
1.2.7. Exemple ………………………….. ………………………….. ………………………….. ………….. 6
1.3. Modele de date ………………………….. ………………………….. ………………………….. ……….. 7
1.3.1. Defini ție ………………………….. ………………………….. ………………………….. ………….. 7
1.3.2. Modelul Entitate -Relatie. Modelul E -R ………………………….. ……………………….. 7
1.3.3. Modelul relational ………………………….. ………………………….. ………………………… 7
1.4. SQL (structured Query Language) ………………………….. ………………………….. …………. 8
1.4.1. Terminologie: ………………………….. ………………………….. ………………………….. ….. 8
1.4.2. Proprietăți tabel ………………………….. ………………………….. ………………………….. .. 8
1.4.3. Limbaje ………………………….. ………………………….. ………………………….. …………… 9
DML ………………………….. ………………………….. ………………………….. ………………………….. … 9
LABORATOR 1 ………………………….. ………………………….. …… Error! Bookmark not defined.
2. CURS 2. SQL – TIPURI DE DATE ………………………….. ………………………….. ……………. 12
2.1. SQL. Con textul în care se utilizează tipurile de date ………………………….. …………… 12
2.2. Terminologia SQL ………………………….. ………………………….. ………………………….. …. 12
2.3. Tipuri de date ………………………….. ………………………….. ………………………….. ……….. 13
2.4. Studiu de caz: ACCESS ………………………….. ………………………….. ……………………… 13
2.4.1. Tipul numeric de date (Number) ………………………….. ………………………….. …… 13
2.4.2. Tipul șir de cara ctere (text la Access) ………………………….. ………………………… 14
2.4.3. Tipul data calendaristică. ………………………….. ………………………….. ……………… 14
2.4.4. Tipul “logic” ………………………….. ………………………….. ………………………….. ….. 15
2.4.5. Tipul NULL ………………………….. ………………………….. ………………………….. …… 15
2.4.6. Funcții pentru conversii între tipurile de date ………………………….. ……………… 15
2.5. Comenzi SQL ………………………….. ………………………….. ………………………….. ……….. 16
2.6. DML. ………………………….. ………………………….. ………………………….. …………………… 16
2.6.1. Comanda SELECT ………………………….. ………………………….. ……………………… 16
2.6.2. Alias -uri de coloane ………………………….. ………………………….. ……………………. 17
2.6.3. Expresii calculate ………………………….. ………………………….. ……………………….. 17
LABORATOR 2. Interogarea datelor dintr -un tabel ………………………….. ………………………… 18
3. CURS 3 BD – SQL. INTEROGARI DIN MAI MULTE TABELE ………………………….. . 20
3.1. OPERATORI PE MULȚIMI ………………………….. ………………………….. ………………. 20
3.1.1. Operatori din algebra relațională ………………………….. ………………………….. …… 20
3.1.2. Operații și operatori SQL ………………………….. ………………………….. …………….. 20
3.1.3. Interogǎri compatibile ………………………….. ………………………….. …………………. 21
3.1.4. Operatorul UNION ………………………….. ………………………….. ……………………… 21
3.1.5. Operatorul INTERSECT ………………………….. ………………………….. ……………… 21
3.1.6. Operatorul MINUS ………………………….. ………………………….. ……………………… 21
3.2. SQL. Implementarea operatorului JOIN ………………………….. ………………………….. .. 21
3.2.1. Specific area joncțiunii ………………………….. ………………………….. …………………. 22

Ozten CHELAI
3 3.2.2. Produsul cartezian ………………………….. ………………………….. ………………………. 22
3.3. SQL. Joncțiuni echivalente – EQUI -JOIN ………………………….. ………………………….. 22
3.3.1. Specificarea joncțiunii în clauza WHERE ………………………….. ………………….. 22
3.3.2. Utilizarea alias -urilor pentru denumirea tabelelor. ………………………….. ……….. 22
3.3.3. Operatorul INNER JOIN ………………………….. ………………………….. ……………… 23
3.4. Joncțiuni neechivalente – THETA -JOIN ………………………….. ………………………….. .. 23
3.4.1. Implementare SQL ………………………….. ………………………….. ……………………… 23
3.5. Condiții adiționale ………………………….. ………………………….. ………………………….. …. 23
3.6. Joncțiuni externe – OUTER -JOIN ………………………….. ………………………….. ………… 23
3.7. Autojoncțiuni – SELF -JOIN. ………………………….. ………………………….. ……………….. 24
LABORATOR 3. JONCȚIUNI ………………………….. ………………………….. ………………………….. 25
4. CURS 4 BD – SQL. FUNCȚII DE GRUP ȘI INTEROGǍRI ………………………….. ……… 29
4.1. AGREGAREA DATELOR FOLOSIND FUNCȚII DE GRUP ………………………… 29
4.1.1. Funcții de grup ………………………….. ………………………….. ………………………….. . 29
4.1.2. Comanda SQL ………………………….. ………………………….. ………………………….. .. 29
4.1.3. Descrierea funcțiilor de grup ………………………….. ………………………….. ………… 29
4.1.4. Clauza GROUP BY ………………………….. ………………………….. …………………….. 30
4.1.5. Filtrarea liniilor pentru funcțiile de grup ………………………….. …………………….. 31
4.2. SQL. SUBINTEROGĂRI ………………………….. ………………………….. …………………… 31
4.2.1. Operatori de comparație ………………………….. ………………………….. ………………. 31
4.2.2. Operatori pe mulțimi ………………………….. ………………………….. …………………… 32
4.2.3. Subinterogări corelate ………………………….. ………………………….. …………………. 33
4.2.4. Subinterogări în clauza FROM ………………………….. ………………………….. …….. 33
LABORATOR 4 IDD ………………………….. ………………………….. ………………………….. ………….. 34
5. CURS 5 BD – SQL (DML, DDL) ………………………….. ………………………….. ……………….. 38
5.1. SQL. DML (Data Manipulation Language). ………………………….. ………………………. 38
5.1.1. DML. Considerații generale ………………………….. ………………………….. …………. 38
5.1.2. Comenz i pentru modificarea datelor stocate ………………………….. ……………….. 38
5.1.2.1. Adăugarea de linii ………………………….. ………………………….. ……………….. 38
5.1.2.2. Modificarea datelor dintr -un tabel ………………………….. ………………………. 39
5.1.2.3. Ștergerea liniilor ………………………….. ………………………….. ………………….. 40
5.1.3. Tranzacții ………………………….. ………………………….. ………………………….. ………. 40
5.1.3.1. Tranzacții. C onsiderații generale ………………………….. ………………………… 40
5.1.3.2. Avantajele tranzacțiilor: ………………………….. ………………………….. ……….. 40
5.1.3.3. Tipuri de tranzacții ………………………….. ………………………….. ………………. 40
5.1.3.4. Comenzi pentru controlul explicit al tranzacțiilor: ………………………….. .. 41
5.2. SQL -DDL ………………………….. ………………………….. ………………………….. …………….. 42
5.2.1. SQL. DDL ( Data Definition Language). Considerații generale ………………….. 42
5.2.2. Crearea tabelelor ………………………….. ………………………….. ………………………… 42
5.2.3. Restricții ………………………….. ………………………….. ………………………….. ……….. 43
5.2.4. Crearea unui tabel utilizând o subinterogare ………………………….. ……………….. 43
5.2.5. Intreținerea tabelelor ………………………….. ………………………….. …………………… 44
5.2.6. SQL. Vederi (Views) ………………………….. ………………………….. …………………… 44
LABORATOR 5 ………………………….. ………………………….. ………………………….. …………………. 46
6. CURS 6 BD. SQL. DCL ………………………….. ………………………….. ………………………….. .. 48
6.1. DCL. Condiderații generale. ………………………….. ………………………….. ……………….. 48
6.2. Securitatea BD. ………………………….. ………………………….. ………………………….. ……… 48
6.2.1. Tipuri de securitate ………………………….. ………………………….. ……………………… 48
6.2.2. Comenzi pentru securitatea sistemului ………………………….. ……………………….. 48
6.2.3. Privilegii sistem ………………………….. ………………………….. ………………………….. 48

Ozten CHELAI
4 6.2.4. Comenzi pentru securitatea d atelor ………………………….. ………………………….. .. 49
7. Curs 7. Dezvoltarea de aplicații cu baze de date. SGBD Access. ………………………….. …. 50
7.1. Considerații generale ………………………….. ………………………….. ………………………….. 50
7.2. Evenimente ………………………….. ………………………….. ………………………….. …………… 50
7.3. Modelul bazat pe componente ………………………….. ………………………….. ……………… 50
7.4. Standarde ………………………….. ………………………….. ………………………….. ……………… 50
7.5. Modul de utilizare ………………………….. ………………………….. ………………………….. …. 51
7.5.1. Formulare Access ………………………….. ………………………….. ……………………….. 51
7.5.2. Rapoarte Access ………………………….. ………………………….. …………………………. 52
LABORATOR 6 ………………………….. ………………………….. ………………………….. …………………. 53
8. SUBIECTE ………………………….. ………………………….. ………………………….. ………………….. 54
8.1. TEORIE ………………………….. ………………………….. ………………………….. ……………….. 54
8.2. INTEROGARI SIMPLE ………………………….. ………………………….. …………………….. 55
8.3. INTEROGARI COMPLEXE ………………………….. ………………………….. ………………. 57
8.4. FORMULARE. RAPOARTE ………………………….. ………………………….. ……………… 58

Ozten CHELAI
5
1. CURS 1. Baze de date. Concepte .

1.1.Baze de date . Considerații generale
1.1.1. Definiție
Colecție de date structurate si obiecte asociate acestora ce oferă o organizare ce
facilitează extragerea de informații și prelucrarea acestora.
1.1.2. Obiecte
Obiectele bazelor de date sunt r eprez entate în principal de tabele cu o structură
riguroasă și restricții ce definesc corelarea datelor din tabele și între tabele. In
unele medii de operare bazele de date mai includ și obiecte asociate tabelelor,
facilitând operațiile de prelucrare a dat elor din tabele. Exemple
1.2.SGBD (Sisteme pentru Gestiunea Bazelor de Date)
1.2.1. Definitie
Un SGDB este un mediu de dezvoltare (framework) care oferă un context eficient
pentru memorarea și extragerea de informa ții din bazele de date.
Un SGBD
• ascunde detaliile referitoare la memorarea și gestionarea datelor. Asigur ă
proiectarea unor structuri de date complexe prin care se vor reprezenta
informa țiile în baza de date. Complexitatea este ascuns ă de SGBD
• asigur ă un extragerea informatiilor în mod eficient .

1.2.2. Nivele de abstractizare a datelor
• nivelul fizic – descrie cum sunt memorate datele
• nivelul conceptual :
– descrie în detaliu structurile de date low -level, printr -un num ăr mic de
structuri relativ simple
– ce date sunt memorate în BD
– relațiile care exist ă între ele
– este utilizat de administratorul BD care d ecide ce informa ții se p ăstreaz ă în
BD.
• nivelul vizualiz ărilor – simplific ă interac țiunea cu utilizatorii care necesit ă doar
o parte a BD. Într-un sistem se pot furniza mai multe vizualiz ări pentru aceea și
BD.

Ozten CHELAI
6
1.2.3. Arhit ectură
Arhitectura SGBD și a aplicații lor cu BD este “client -server”
1.2.4. Servicii
Serviciile se pot împărții în
– funcții de prelucrare a datelor
o definire a structurii
o manipulare informații
▪ extragere și prelucrare
o control al datelor (tranzacții, gestiunea utiliz atorilor)
– servicii de calitate
o persis tența datelor
o integritatea datelor
o consistența datelor
o acces concurent la date

1.2.5. Instrumente de prelucrare
i. Procedurale – limbaje de programare procedurale care oferă suport
prelucrărilor algoritmice
ii. Declarative – limbaj e de programare neprocedurale ce oferă suport
interogărilor
1.2.6. Avantaje
– corespunzătoare serviciilor de calitate
1.2.7. Exemple
Access
Oracle
MySQL
SQL -Server
SyBase
Visual FoxPro
vizualizare 1 vizualizare 2 vizualizare n
nivel conceptual
nivel fizic Interactiunea nivelelor

Ozten CHELAI
7 1.3.Modele de date
1.3.1. Defini ție
O colec ție de instrumente (tools) conceptuale pentru descr ierea de:
• date
• relații între date
• sema ntici ale datelor (semnifica ții)
• restric ții asupra datelor (constrains).
Modelul de baza: Modelul relațional al datelor.

1.3.2. Modelul Entitate -Relatie . Modelul E -R
Lumea real ă este o colec ție de entități (obiecte de baz ă) și relații (între aceste
obiecte de ba ză).
O entitate este un obiect care există și este distinct de alte obiecte. Distinct pentru
că este definit de un set de atribute care descriu obiectul.
O relatie este o asociere între mai multe entități ( de exemplu unui student i se
asociaz ă toate notel e pe care le ob ține într-o sesiune).
Un set de entit ăți este totalitatea entit ăților de acela și tip.
Un set de rela ții este totalitatea rela țiilor de acela și tip.
Modelul reprezint ă și o serie de restric ții(chei) cărora trebuie s ă li se conformeze
conținutul. Sunt folosite pentru a păstra calitățile de integritate a bazei de date.

Mapping cardinalities exprim ă numărul de entit ăți cu care se poate asocia o anume
entitate via un set de rela ții (one to one, etc.)
Diagrama E-R este o reprezentare grafic ă a structurii unei BD. Ea are urm ătoarele
componente:
– dreptunghi – pentru reprezentarea setului de entit ăți
– elipse – pentru reprezentarea atributelor
– romburi – pentru reprezentarea rela țiilor între seturi de entita ăți
– linii – pentru reprezentarea leg ăturii între atribute -seturi de entit ăti-
seturi de rela ții.

1.3.3. Modelul relational
Model elaborat de Edgar F. Codd în 1970. MR separă aspectele fizice de cele
logice ale bazei de date.
MR are la bază modelul conceptual Entitate -Relație.
Are la baza algebra relațională care oferă următoarele instrumen te
• o colectie de obiecte cunoscute sub numele de relații
• o multime de operatori ce actioneza asupra relatiilor pentru a produce noi
relatii. student nume adresa
oras
relatie
e sesiune nota disciplin a

Ozten CHELAI
8
Operatorii relationali sunt:
Relatia Desc rierea
Restrictia (selecția) este o o peratie care preia si afiseaza datele din relatie.Este
posibil sa se afiseze toate randurile sau doar randurile care indeplinesc o conditie
sau mai multe conditii .Aceasta este de multe ori numita 'submultime orizontal a'
Proiectia este operatia care afise aza anumite coloane din relatie si de aceea este
numita 'submultime verticala'.
Produs este rezultatul obtinut cand randurile a doua multimi de date sunt
concatenate conform conditiilor specificate.
Join este rezult atul obtinut cand randurile a doua mul timi de date sunt concatenate
conform conditiilor specificate.
Reuniunea afiseaza toate randurile care apar in una ,in cealalta sau in ambele din
cele doua relatii.
Intersectia afiseaza toate randurile care apar in a mbele din cele doua relatii.
Diferent a afiseaza randurile care apar numai intr -o singura relatie (SQL utilizeaza
operatorul minus ).

1.4.SQL (structured Query Language)
Limbaj de interogare declarativ pentru bazele de date. Standard implementat de toate
SGBD moderne.

1.4.1. Terminologie:
Tabel = entit ate (MER), relație (MR)
Coloana = atribut (MER, MR)
Linii = tuplu (MR)
Câmp (intersecția dintre o linie și o coloană) = valoare atribut
Relație = relație (MER)
Restricții : (pentru început vom prezenta doar restricții de bază )
– cheie primară – identifică î n mod un ic fiecare coloană din tabel
– not NULL *
– cheie străină – utilizată pentru a relaționa tabelul cu un altul.
• NULL = valoare neintrodusă într -un câmp.
1.4.2. Proprietăți tabel
Un singur tabel are urmatoarele proprietati:
• Nu exista randuri duplicate
• Nu exista nume de coloana duplicate
• Ordinea randurilor este neimportanta
• Ordinea coloanalor este neimportanta
• Valorile sunt atomice(nedecompozabile).
SQL conține comenzi pentru realizarea funcțiilor asociate bazelor de date:
– creare
– modificare
– stergere

Ozten CHELAI
9 – interogar e
– prelucrare (calcule, filtrare, ordonare, etc.)
– protecție.
1.4.3. Limbaje
Comenzile sunt grupate în următoarele limbaje:
b. DML (Data Manipulation Language) – comenzi pentru introducerea,
modificarea și stergerea datelor din BD.
c. DDL (Data Definition Languag e) – comenzi pentru crearea, modificarea
structurilor de date (tabele, relații)
d. DCL (Data Control Language) – comenzi pentru gestiunea operațiilor realizate
și a drepturilor de acces la date.

DML
SELECT [DISTINCT] *|listaColoane FROM listăTabele WHERE co ndiție…
Liste = succesiuni de elemente de același fel, despărțite prin virgulă
listaColoane cuprinde denumirile coloanelor sau nume alternative date acestora
(ALIAS -uri).
listaTabele cuprinde denumirile tabelelor sau nume alternative date acestora (ALIAS –
uri).

Comanda afișează valorile din coloanele specificate în lista , din tabelele specificate,
care îndeplinesc condiția specificată.

Ozten CHELAI
10
LABORATOR 1
Studiu de caz: MS Access. Crearea unei BD

1. Crearea unei baze de date
a. Structurǎ tabele
i. tipuri de coloane
ii. restricții element are: cheie primarǎ, not null, cheie unică, cheie străină
(restricție de integritate referențială) și alte restricții
iii. linii
b. Relații de integritate între tabele
2. Creați BD „Universitate” cu urmǎtoarele tabele și structurǎ:
a. Facultǎți
id_facult ate – AutoNumber, cheie primarǎ
nume_facultate – text, not null, cheie unică
b. Specializǎri
id_spec – AutoNumber, cheie primarǎ
nume_spec – text, not null, cheie unică
id_facultate – number, cheie străină ce specifică legarea cu tabelul Facultăți
c. Personal
id_persona l – AutoNumber, cheie primarǎ
nume – text, not null
cnp – number
sex – text(1), valori „M” sau „F”, not null
casatorit – logic
data_angajare – data
salariu – number
profesie – text, not null
id_sef – number
id_facultate – number, cheie străină ce s pecifică legarea cu tabelul Facultăți
d. Studenti
id_student – AutoNumber, cheie primarǎ
nume – text, not null
id_spec – number, cheie străină ce specifică legarea cu tabelul Specializari
grupa –number
an – Number
Valoare_taxa – Number
e. BaremSalariu
sal_min – Number
sal_max – Number
impozitFix – Number
procent – Number
grad – Number

Legǎturile între tabele sunt specificate dupǎ cum urmeazǎ

Ozten CHELAI
11

3. Introduceți date în tabele
– 4 linii in tabelul „facultati”
– Specializarile corespunzatoare in tabelul „specializari”
– >10 linii in Personal
OBS. Conținutul tabelului BaremSalariu va fi:

SAL_MIN SAL_MAX IMPOZITFIX PROCENT GRAD
0 2400000 0 18 1
2400001 5800000 432000 23 2
5800001 9300000 1214000 28 3
9300001 13000000 2194000 34 4
13000001 99999999 3452000 40 5

b.

Ozten CHELAI
12
2. CUR S 2. SQ L – TIPURI DE DATE

2.1. SQL. Contextul în care se utilizează tipurile de date

Limbajul SQL este un limbaj de programare declarativ (neprocedural ) “implementat” în
toate SGBD moderne. Implementarea se referă la suportul de execuție (interpretor) ofer it de
SGBD.
Limbajele de programare declarative sunt limbaje în care se specificǎ explicit “ ce” se dorește
și nu algoritmul de soluționare a problemelor (deci “ cum” se obține soluția),
Limbajul SQL este eficient dacă organizarea datelor este realizată d upă mode lul rela țional. In
consecință SGBD -urile care au interpretoare SQL se numesc SGBD relaționale (SGBDR).

SGBDR oferă interfețe grafice cu utilizatorul pentru introducerea comenzilor SQL, mai mult
(Access) sau mai puțin automatizate.
2.2.Terminologia SQL
Modelul Entitate -Relatie stǎ la baza modelului relațional. Corespunzǎtor acestuia, lumea real ă
este o colec ție de entități (obiecte de baz ă) și relații (între aceste obiecte de baz ă).
Un tabel este o structurǎ de bazǎ de memorare și reprezintǎ un set de e ntitǎți de acela și tip.
Tabelul pǎstreazǎ toate datele setului de entitǎți.
Tabelul este format din coloane sau atribute ce reprezintǎ caracteristicile entitǎților. Fiecare
atribut ia valori într -un domeniu de valori.
Coloanele sunt caracterizate prin tipul de da tǎ ce specificǎ valorile care se pot introduce în
tabel, lǎțimea coloanei ce reprezintǎ numǎrul de caractere care se pot introduce în coloanǎ și
restricțiile care se definesc pe coloana respectivǎ referitoare la valorile care se introduc în
coloan ǎ.
O linie în tabel reprezintǎ o ent itate sau obiect și este format din valorile coloanelor pe linia
respectivǎ.
O cheie primarǎ reprezintǎ coloana (atributul) sau combinația de atribute care identificǎ în
mod unic o entitate (linie) în tabel. Se pot astf el refer i entitǎțile prin valorile cheii primare.
Un câmp specificǎ o valoare a unui atribut. Se aflǎ, deci la intersecția dintre o coloanǎ și o
linie. Un câmp poate conține o valoare sau o valoare null (nici o valoare).
Exemplu: Fie tabelul “studenti”. Ca racteris ticile studentului sunt:
– cod_student (numar matricol)
– nume
– prenume
– data_nasterii
– cod_specializare
-…

Cod_student Nume Prenume Data_nasterii Cod_specializare
1234 Ionescu Ion 12.05.1984 5
256 Popescu Gheorghe 10.02.1983 4
879 Andrei Ilie 05.07.198 0 5
linie coloana
camp Cheie primara

Ozten CHELAI
13 2.3.Tipuri de date

In toate mediile de programare exist ǎ o structurare a datelor în func ție de reprezentarea lor în
memorie. O structur ǎ elementar ǎ (primitiv ǎ) reprezint ǎ un tip de dat ǎ.
Tipul de date specific ǎ domeniul de valori pentru o coloana. Deoarece valoarea coloanei se
schimb ǎ pentru fiecare linie, ea reprezint ǎ o variabil ǎ a limbajului de programare.
Pentru fiecare tip de data exist ǎ definite valori constante care se pot utiliza în construc ția
expresiilor.
Mediul de programare ofer ǎ utilizatorului posibilitatea de a specifica tipul datelor manipulate
și instrumente primare de manipulare a lor: operatori și func ții.
Operatorii se aplic ă operanzilor, iar func țiile au argumente (sau nu) și întorc un rezultat.
Utilizarea operatorilor:
<Operand> < operator > – operator monadic (cu un operand)
<Operand1> <opera tor> <operand2> – operator diadic (cu doi operanzi)
Utilizarea func țiilor:
Func ție() – funcție fără argumente
Func ție(arg1, arg2,…) – funcție cu argumente

O expresie, pentru un tip de dat ă, este format ǎ din variabile , constante, operatori, funcții și
întoarce un rezultat.

In SGBD -uri tipurile de date se utilizeaz ǎ pentru a specifica:
– coloane
– constante
SGBD -urile ofer ă, în funcție de numărul și calitatea serviciilor, o multitudine de tipuri de date
pentru utilizare. Tipurile de date prezente în toate medii le și de uz general sunt:
– numeric
– sir de caractere
– data calendaristica
– logic
– valori speciale: NULL (valoare a unui c âmp în care nu s -a introdus informa ție)
Ele se asociaz ă coloanelor și pentru ele sunt definite constante, operatori și funcții.

2.4. Studiu de caz: ACCES S

Se vor prezenta tipurile de date, modalitatea de definire a constantelor, operatorii asocia ți
tipurilor de date și func țiile pe care sistemul de gestiune Access le pune la dispozi ția
programatorilor.
Pentru a se p ăstra caracterul de generalita te și pentru o mai u șoară înțelegere, nu se vor
prezenta toate tipurile de date, operatorii și funcțiile asociate acestora.

2.4.1. Tipul numeric de date (Number)
Constante:
– numere întregi și zecimale: reprezentate zecimal
– numere reale : reprezentate în mantis ă și exponent astfel: valMantisa EvalExponent.
Exemplu: 2.3*10^9 se scrie 2 .3E+09, .0000003 se scrie 3E -7

Operatori:
– aritmetici sunt: +, -, *, /, ^ (ridicare la putere)

Ozten CHELAI
14 – de compara ție: =, <>, <, >, <=, >= , BETWEEN valoareInf AND valoareSup . În urma
evalu ării rezult ă o valoare logic ă (true sau false).

Func ții:
Sqr(n) – rădăcină pătrată din n.
Int(n) – aproximare la întreg a lui n.
Round(n,m) – rotunjire la m zecimale a num ărului n.
Str(n) – conversie în șir de caractere
Val(sir) – conversie în valoare numeric ă

2.4.2. Tipul șir de caractere (text la Access)
Constante:
– constantele de tip șir de caractere sunt delimitate de ghilimele. Ex: “test”
– se pot utiliza caracterele de grup ( wildcard ) pentru a specifica orice caracter:
o * orice grup de caractere
o ? un caracter (ori care)
Operatori: &, Like, In
– & – concatenare șiruri
Concatenare: expresie1 & expresie2
unde operanzii sunt expresii oarecare, rezultatul este un șir de caractere cu cele două șiruri
alipite sau Null dacă unul din operanzi este Null.
– Like – comparație cu un șablon
Operatorul Like compară două șiruri cu observația că al doilea tremen este un
șablon. Prin urmare rezultatul este True dacă primul șir operand este format după șablon,
False în caz contrar. Atunci când un operand este Null, rezultatul este tot Null .
Construcția șablonului poate cuprinde caractere de grup, liste de caractere, domenii de caractere:
o ? un caracter oarecare
o * un grup de caractere oarecare (chiar nici unul)
– In – comparație cu elementele unei mulțimi
Func ții:
Cele mai utilizate pentru șiruri de caractere sunt:
Chr(n) – intoarce caracterul cu codul ASCII n
ASC(str) – întoarce codul ascii pentru str
Left(str,n) – extrage sub șirul stng din str cu lungimea de n
Right(str,n) – extrage sub șirul drept din str cu lungimea de n
Mid(str,n,m) – extra ge sub șirul din str ce începe din pozi ția n cu lungimea m
Ucase(str) – converte ște în majuscule str
Trim(str) – extrage blancurile din marginile lui str
Len(str) – întoarce lungimea șirului str
Space(n) – întoarce un șir cu n spații
InStr(str1, str2) – întoarce pozi ția str2 în str1

2.4.3. Tipul data calendaristică.
Constante:
– Format general la Access: #dd.mm.yyyy#

Operatori: +, -, Between…AND…. , LIKE
– aritmetici : + sau – se utilizează pentru a aduna sau scădea zile dintr -o dată calendaristică
– comparație:
o Beetw een dataInf And dataSup pentru a verifica dacă valoarea a parține intervalului
specificat

Ozten CHELAI
15 o Like – comparație cu un șablon

Funcții :
Date() – întoarce data curentă a sistemului
Day(d) – întoarce ziua, ca valoare numerică, pentru data (d) specificată ca argume nt
Month(d) – întoarce luna, ca valoare numerică, pentru data (d) specificată ca argument
WeekDay(d) – întoarce ziua din săptămână, ca valoare numerică, pentru data (d) specificată ca
argument
Year(d) – întoarce anul, ca valoare numerică, pentru data (d) s pecificată ca argument
Now() – întoarce ora curentă a sistemului
MonthName(d) – întoarce numele lunii, ca șir de caractere, pentru data (d) specificată ca
argument
DateAdd(interval, numar,d) – întoarce data corespunzătoare adăugării numărului specificat de
intervale din argumentul funcției:
Unde: pentru interval se pot folosi urmatoarele șabloane pentru a specifica – perioada:
“yyyy” – an
“q” – sfert de an
“m” – luna
“y” – zi a anului
“d “- zi
“ww” – saptamana
numar reprezinta numarul de perioade;
d reprezinta data calendaristicǎ.
2.4.4. Tipul “logic”
Constante: true, false, yes, no
Operatori logici:
– and (conjuncția logică)
– or (disjuncția logicǎ)
– Not (negația logicǎ)
– IS NULL
– IS NOT NULL

Funcții:
IIf(expr, valAdev , valFals )
Unde:
expr = expresie lo gicǎ
valAdev = expresie care se evalueazǎ și a cǎrei valoare se întoarce dacǎ expr este adevǎratǎ
valFals = expresie care se evalueazǎ și a cǎrei valoare se întoarce dacǎ expr este falsǎ

2.4.5. Tipul NULL
Constantǎ: NULL
Operatori: IS NULL, IS NOT NULL
Funcții: NZ(expr,val) – pentru valoarea NULL a expr intoarce valoarea val specificata.

2.4.6. Funcții pentru conversii între tipurile de date
CVDate(sir) – convertește in data calendaristica sirul dat ca argument
DateValue(d) – – converte ște in sir data calendaristica datǎ ca argument

Ozten CHELAI
16 Val(string ) – convertește sirul dat ca argument în valoare numericǎ
Str(number ) – convertește în șir numarul specificat ca argument

Funcții de conversie a expresiei dată ca argument în tipul specificat de nu mele funcției:
CBool( expression )
CByte( expression )
CCur( expression )
CDate( expression )
CDbl( expression )
CDec( expression )
CInt( expression )
CLng( expression )
CSng( expression )
CStr( expression )
CVar( expression )

2.5.Comenzi SQL
SQL conține comenzi pentru realizarea funcțiilor asociate bazelor de date:
– creare
– modificare
– stergere
– interogare
– prelucrare (calcule, filtrare, ordonare, etc.)
– protecție.
Comenzile sunt grupate în următoarele limbaje:
e. DML (Data Manipulation Language) – comenzi pentru introducerea,
modificarea și stergerea datelor din BD.
f. DDL (Data Definition Language) – comenzi pentru crearea, modificarea
structurilor de date (tabele, relații)
g. DCL (Data Control Language) – comenzi pentru gestiunea operațiilor realizate
și a drepturilor de acces la date.

2.6.DML .
2.6.1. Comanda SELECT
Comanda SELECT este utilizată pentru extragerea datelor din tabele.

Sintaxă
SELECT [DISTINCT] {*|listă_coloane} FROM tabel WHERE expresie_logica ORDER BY
listă_expresii

Unde:
*|listă_coloane * specifică coloanele care se vor afișa (*= toat e coloanele)
FROM tabel = tabelul din care se extrag datele
WHERE expresie_logica = specifică condiția de filtrare a liniilor afișate (se vor afișa doar
liniile care respectă condiția)
ORDER BY listă_expresii = specifică criteriile de ordonare la afișare. Prima expresie din lista
este criteriul principal. La valori egale pe acest criteriu se utilizeaza al doilea criteriu din listă
ș.a.m.d. Pentru specificarea tipului de ordonare se utilizeaza ASC, DESC

Ozten CHELAI
17 DISTINCT – elimină liniile duplicat

Exemple:

SELECT * FROM personal;
SELECT nume, profesie FROM personal ORDER BY nume
SELECT nume, salariu FROM personal WHERE salariu BETWEEN 10000000 and
20000000
SELECT nume, salariu FROM personal WHERE id_sef IS NULL
SELECT nume FROM personal WHERE data_angajare=#01.01.20 00#
SELECT nume FROM personal WHERE data_angajare BETWEEN #01.01.1989# AND
#01.01.2005#
SELECT nume & “ este “ &profesie &”.” FROM personal;

2.6.2. Alias -uri de coloane
Alias -ul reprezintă un nume dat de utilizator cu care se afișează și se poate utiliza o coloană,
expresie sau tabel pentru comanda respectivă.
Alias -ul se specifică cu clauza AS.

Exemplu:
SELECT nume AS angajat, profesie FROM personal

2.6.3. Expresii calculate
In lista de coloane sau în celelalte clauze ale comenzii SELECT se pot utiliza expresii care
sunt construite din coloane, constante, funcții și operatori.
Exemplu

SELECT nume, salariu*12 AS salariuAnual FROM personal
SELECT nume, (salariu+15%)*12) AS sal ariuAnual FROM personal where id_sef IS NULL
SELECT nume, salariu*12 AS salariuAnual FROM personal WHERE salariu*12>50000000
ORDER BY mid(nume,2,1)

Ozten CHELAI
18

LABORATOR 2 . Interogarea datelor dintr -un tabel

SELECT [DISTINCT] * |listǎ_coloane FROM tabel WHERE c ondiție ORDER BY
listǎ_expresii

Clauza DISTINCT – specificatǎ pentru eliminarea liniilor duplicat la afișare
FROM – specificǎ tabelul (tabelele – se vor detalia ulterior) din care se extrag datele
* – specificǎ toate coloanele tabelului specificat de FROM
WHERE condiție – filtreazǎ valorile afișate a.î. acestea sǎ satisfacǎ condiția specificatǎ.
Deci condiție reprezintǎ o expresie logicǎ care valorile adevǎrat sau fals.
ORDER BY listǎ_expresii – specificǎ ordinea de afișare a rezultatelor

1. Afisati toate da tele din tabelele: facultati, specilaizari, personal, BaremSalariu

2. Afișați numele, numarul facultǎții și salariul angajaților cu salariul între 4000000 și
9000000. Realizati doua interogari diferite.

3. Afișați specializǎrile și id_spec în ordinea facultǎți lor și specializǎrilor pe facultate.

4. Afișați tipurile diferite de functii.

5. Afișați angajații facultǎților cu numǎrul 1 și 2.

6. Afișați numele și functiile personalului facultǎții cu numǎrul 2.

7. Afisati personalul cu numele conținând “ESCU” sau “GHE”.

8. Afișați toți angajații care au șef.

9. Afișǎți urmǎtoarea propoziție pentru fiecare angajat:

***** este angajat la facultatea cu numarul ** si are salariul de ******.

10. Afișați salariul anual brut (salariu*%spor lunar) pentru toți angajații.

11. Afișați angajați i dupǎ anul 2000.

12. Afișați numele și salariul anual al personalului facultatii 1 cu salariul anual mai mare
decât 50000000, în ordine alfabetica.

13. Afisati numele si data angajarii salariatilor angajati in 2000.

14. Afisati numele si functia tuturor angajatilo r fara sef.

15. Afisati numele si salariul anual al angajatilor. Sefii au in plus un spor de 25%.

Ozten CHELAI
19
16. Afisati numele tuturor angajatilor cu a treia litera A.

17. Afișați angajații care sunt femei.

18. Afișați angajații casatoriți.

19. Afisați salariile lunare în lei grei , rotunjite la o zecimala pentru tot personalul.

20. Afisati numele, functia si salariul angajatilor cu functia: LECTOR sau ASISTENT si
salariul diferit de 9000000, 5000000, 5500000.

21. Afisati numele si ocupatiile tuturor angajatilor facultatilor cu id_faculta te 1 sau 2 care
nu sunt lector.

22. Afisati numele, functia si salariul marit cu 20% pentru sefi.

23. Afisati numele, salariul, data angajarii pentru anagajatii dupa 1998 care sunt lector si
au litera A in nume.

24. Afisati angajatii care au manager din facultatile cu id_facultate 1 si 2.

25. Afisati toti angajatii facultatii 2 care sunt ‘lector’ sau ‘conferentiar’.

26. Afisati salariile marite cu 20% pentru conferentiari si profesori.

27. Afisati salariile marite cu 20% pentru conferentiari si profesori, 15% lectori și 10%
pentru ceilalți.

28. Afisati numarul de zile de la angajare al intregului personal.

29. Afisati angajatii in luna martie.

30. Afisati ziua din saptamana in urmatorul an dupa angajare pentru intregul personal.

31. Afisati numarul de caractere al numelor angajatilor din personal.

32. Afisati angajații cu numele mai lung de 20 de caractere.

33. Afisati angajatii care au spor de salariu, angajati dupa 1990 din facultatea 1.

34. Afisati gradul salariului de 9000000.

35. Afisati pentru sefi urmatoarea propozitie. Atenție numele incepe c u majuscula.

****** este SEF al facultatii cu numarul *.

Ozten CHELAI
20
3. CURS 3 BD – SQL. INTEROGARI DIN MAI MULTE TABELE

3.1.OPERATORI PE MULȚIMI
3.1.1. Operatori din algebra relațională
În modelul relațional relația reprezintă un tabel alcătuit din coloane și linii.
O linie d in tabel se numește tuplă , iar o coloană atribut .
La baza limbajului SQL stă algebra relațională. Aceasta definește 8 operatori relaționali care
operează pe relații.
Operatorii care acționează pe o relație sunt unari , iar cei pe două relații sunt binari .
Operatorii se clasifică în funcție de tipul operațiilor în:
– operatori de bază: SELECT, PROJECT, UNION, DIFFERENCE, PRODUCT
– operatori derivați: INTERSECT, DIVIDE, JOIN.
Operațiile realizate de operatori sunt:
SELECT – extrage tuplele (liniile) care îndepli nesc o condiție
PROJECT – extrage atributele specificate
UNION – reunește tuplele a două relații
DIFFERENCE – elimină tuplele care sunt într -o relație, dar nu în alta
PRODUCT – realizează produsul cartezian al tuplelor din două relații (combina fiecare lin ie
dintr -un tabel cu fiecare din cel de -al doilea tabel)
INTERSECT – extrage tuplele care se găsesc în două relații
DIVIDE – extrage valorile atributelor dintr -o relație care are valorile celorlalte atribute în a
doua relație
JOIN – combină tuplele din dou ă relații cu anumite condiții specificate. În funcție de
condițiile specificate există mai multe tipuri de JOIN:
– NATURAL JOIN – combină tuplele din două relații cu condiția ca atributele cu
același nume din cele două relații să aibă aceleași valori
– EQUI -JOIN – combină tuplele din două relații cu condiția ca atributele specificate din
două relații să aibă aceleași valori
– THETA -JOIN – combină tuplele din două relații cu condiția ca atributele specificate
din cele două relații să îndeplinească o condiție
– SEM I-JOIN – selectează tuplele din prima relație care sunt corelate cu cele din a doua
relație după o condiție
– OUTER -JOIN – combină tuplele din două relații după o condiție specificată, afișând în
cazul care într -o relație nu există coresapondent valori NULL.
– SELF -JOIN – combină tuplele din aceeași relație exprimate ca fiind din două relații
după o condiție specificată

3.1.2. Operații și operatori SQL
Pentru extragerea datelor din mai multe tabele sunt implementați operatorii pe mulțimi
definiți în algebra relaționa lă. Pentru relații compatibile (cu aceeași structură) sunt definite
operațiile de: reuniune, intersecție, scădere, iar pentru alte asocieri operațiile de joncțiune
(compunere).

Ozten CHELAI
21 3.1.3. Interogǎri compatibile
Sunt considerate interogǎri compatibile, comenzile SELE CT care îndeplinesc următoarele
condiții:
– comenzile SELECT trebuie să aibă același număr de coloane și de același tip
– numele coloanelor care se afișează sunt cele din prima comandă SELECT
– dimensiunea coloanei rezultat este aceea a celei mai mari
– opțiunea D ISTINCT este implicită (excepție operatorul UNION ALL).

3.1.4. Operatorul UNION
Implementează reuniunea a două interogări compatibile. Sunt eliminate liniile duplicat..
Operatorul UNION ALL realizează reuniunea cu linii duplicat.
Utilizare
SELECT nume,functie,sa lariu FROM personal WHERE id_facultate=1
UNION
SELECT nume,functie,salariu FROM personal WHERE id_facultate=2

sau
SELECT nume,functie,salariu FROM personal WHERE id_facultate=1
UNION ALL
SELECT nume,functie,salariu FROM personal WHERE id_facultate=2

3.1.5. Operatorul INTERSECT
(nu este implementat la Access)
Implementează intersecția a două interogări compatibile. Sunt eliminate liniile duplicat..
Utilizare
SELECT functie,salariu FROM personal WHERE id_facultate=1
INTERSECT
SELECT functie,salariu FROM personal WHERE id_facultate=2

3.1.6. Operatorul MINUS
(nu este i mplementat la Access)
Implementează diferența a două interogări compatibile. Sunt eliminate liniile duplicat..
Utilizare
SELECT functie,salariu FROM personal WHERE id_facultate=1
MINUS
SELECT functie,salariu FROM personal WHERE id_facultate=2

Se poate uti liza clauza ORDER BY la sfârșitul interogării.

3.2.SQL. Implementarea operatorului JOIN
Operatorul JOIN specifică joncțiunea (relația, legătura) dintre tabele în extragerea datelor di n
ele. În SQL sunt implementate operații pentru operatorii EQUI -JOIN, THETA -JOIN,
OUTER -JOIN, SELF -JOIN.
Joncțiunile implementate sunt:
1. joncțiuni echivalente – EQUI -JOIN
2. joncțiuni neechivalente – THETA -JOIN

Ozten CHELAI
22 3. joncțiuni externe – OUTER -JOIN
4. autojoncțiuni – SELF -JOIN.

3.2.1. Specific area joncțiunii
Specificarea condiției de joncțiune se re alizează în clauza WHERE . Tabelele din care se
extrag datele sunt specificate în clauza FROM , iar denumirile de coloane pot fi prefixate de
numele tabelulul astfel: tabel.coloană . În cazul în care denumirea de coloană este clară se
poate specifica doar col oana (adică se știe cărui tabel aparține).

3.2.2. Produsul cartezian
Produsul cartezian apare dacă se specifică coloane din mai multe tabele și nu se specifică o
condiție de joncțiune între tabele.
Exemplu:
SELECT personal.nume, facultate.nume_facultate
FROM per sonal, facultate
Interogarea va afisa toate combinațiile dintre valorile celor două coloane.

3.3.SQL. Joncțiuni echivalente – EQUI -JOIN
3.3.1. Specificarea joncțiunii în clauza WHERE
In joncțiunile echivalente valorile dintr -o coloană a unui tabel sunt egale cu valo rile unei
coloane din celălalt tabel. Se pot extrage date din cele două tabele care verifică condiția.
Se pot adăuga condiții adiționale în clauza WHERE.
Sintaxă SQL:
SELECT [tabel1.]coloană, [tabel2.]coloană, ….
FROM tabel1, tabel2, …
WHERE tabel1.coloană 1=tabel2.coloană2
Exemplu: Sa se afișeze numele și denumirea specializării angajaților din tabelul personal:
SELECT personal.nume, facultati.nume_facultate
FROM personal, facultati
WHERE personal.id_facultate=facultati.id_facultate

Adăugarea condițiilor a diționale se realizează în clauza WHERE astfel:
Exemplu: Sa se afișeze numele și denumirea specializării angajaților din tabelul personal
pentru facultatea de Matematică
SELECT personal.nume, facultati.nume_facultate
FROM personal, facultati
WHERE personal .id_facultate=facultati.id_facultate AND
UCASE(facultati.nume_facultate) LIKE “*MATEMATICA*”
Joncțiunile echivalente se mai numesc joncțiuni interne sau joncțiuni simple .

3.3.2. Utilizarea alias -urilor pentru denumirea tabelelor.
Alias -urile reprezintă nume alte rnative, mai convenabile in exprimare, date tabelelor cu
clauza AS si utilizabile in specificarea coloanelor. Alias -ul se poate utiliza doar pentru
comanda în care a fost definit.
Exemplu:

Ozten CHELAI
23 SELECT p.nume, f.nume_facultate
FROM personal AS p, facultati AS f
WHERE p.id_facultate=f.id_facultate AND UCASE(f.nume_facultate) LIKE
"*MATEMATICA*"

3.3.3. Operatorul INNER JOIN
La Access există implementat operatorul de joncțiune internă: INNER JOIN în clauza
FROM astfel:
FROM tabel1 INNER JOIN tabel2 ON tabel1 .coloană1 operatorComparație
tabel2 .coloană2
In acest caz nu mai este specificarea condiției de joncțiune în clauza WHERE .
Exemplu:
SELECT personal.nume, facultati.nume_facultate
FROM personal INNER JOIN facultati ON personal.id_facultate=facultati.id_facultate
WHERE UCASE(facultati.nume_facultate) LIKE “*MATEMATICA*”

3.4.Joncțiuni neechivalente – THETA -JOIN
3.4.1. Implementare SQL
In joncțiunile neechivalente valorile dintr -o coloană a unui tabel sunt într -o altfel de
relație, decât de egalitate, cu valorile unei coloane din celălalt tabel. Se pot extrage date
din cele două tabele care verifică condiția specificată. Se pot adăuga cond iții adiționale în
clauza WHERE.
Sintaxă SQL:
SELECT [tabel1.]coloană, [tabel2.]coloană, ….
FROM tabel1, tabel2, …
WHERE tabel1.coloană1 operator tabel2.coloană2
Operatorul trebuie să fie un operator de comparație sau logic care are ca rezultat o valoare
logică (true sau false).
Exemplu: Sa se afișeze numele și gradul salariilor angajaților din tabelul personal:
SELECT personal.nume, personal.salariu, baremSalariu.grad
FROM personal, baremSalariu
WHERE personal.salariu BETWEEN baremSalariu.sal_min AND
barem Salariu.sal_max

3.5.Condiții adiționale
Se pot adăuga condiții adiționale în clauza WHERE pentru filtrarea liniilor răspuns.
Se pot utilizaalias -uri.

3.6.Joncțiuni externe – OUTER -JOIN
Joncțiunile externe afișează și datele care nu au corespondent într -o relație , înlocuind
absența cu valori NULL.
In unele sisteme de gestiune (Oracle) există implementat operatorul de outer -join cu
simbolul (+) în partea deficitară de informație.
Exemplu:
SELECT personal.nume, facultati.nume_facultate

Ozten CHELAI
24 FROM personal, facultati
WHERE personal.id_faculatate (+) = facultati.id_facultate

La Access sunt implementați operatorii LEFT JOIN și RIGHT JOIN în clauza FROM,
specificănd joncțiunea externă și partea deficitară de informație astfel:
FROM tabel1 LEFT JOIN tabel2 ON tabel1 .coloană1 operatorComparație
tabel2 .coloană2
LEFT JOIN înseamnă afișarea informației din tabelul din stânga chiar dacă în partea
dreaptă nu există informație asociată aceseia.
In acest caz nu mai este necesară specificarea condiției de joncțiune în clauza WHERE.
Exemplu:
SELECT personal.nume, facultati.nume_facultate
FROM personal RIGHT JOIN facultati ON personal.id_facultate=facultati.id_facultate

3.7.Autojoncțiuni – SELF -JOIN.
Autojoncțiunile extrag date dintr -un singur tabel, dar care este interpretat în mod diferit. Ele
sunt folosite când este necesară parcurgerea tabelelor de două ori pentru a obține informația.
De exemplu dacă se cere afișarea numelui angajatului și a numelui șefului fiecărui angajat din
tabelul personal. Se parcurge o dată tabelul pentru a obține id_sef, iar a doua oară pentru a
identifica numele angajatului cu valoarea id_sef corespunzătoare.
SELECT p.nume,s.nume
FROM personal AS p, personal AS s
WHERE p.id_sef=s.id_personal
In interogare s -au simulat două tabele unul de angajați (p) și unul pentr u șefi (s). Condiția de
joncțiune fiind ca id_sef din angajați să fie id_personal din șefi.

Ozten CHELAI
25
LABORATOR 3 . JONCȚIUNI

1. Copiati baza de date suport2.mdb.Observati modificarile. Baza de date mai are
adaugat tabelul “studenti” in relatie cu tabelul “specia lizari”. Completati tabelul
studenti cu cateva randuri.

2. Afisati numele studentilor si denumirile specializarilor la care sunt studenti.

3. Afisati numele studentilor impreuna cu denumirile specializarilor si facultatilor in
ordine alfabetica dupa nume

4. Afisati numele, denumirea specializarii si facultatea studentilor cu taxa mai mare decat
400.

5. Afisati numele angajatilor, salariile si gradatiile corespunzatoare

6. Afisati angajatii cu gradatia 3.

7. Afisati toti studentii facultatii de Stiinte Economice.

8. Afisati numele angajatilor, functia, salariul, gradatia si numele facultatii pentru toti
angajatii care nu apartin departamentului “Auxiliari”, ordonati dupa salariu in ordine
descrescatoare.

9. Afisati numele, functia, facultatea, salariul si impozitul angaja tilor din tabelul
personal, ordonati dupa facultate si nume.

10. Afisati denumirea facultatii care nu are angajati in tabelul personal.

11. Afisati toti angajatii (nume si id) impreuna cu numele si id -ul sefului.

12. Afisati la interogarea 11 si sefii.

13. Gasiti fun ctia care a fost ocupata in prima jumatate a anului 1999 si aceeasi functie a
fost ocupata in timpul aceleiasi perioade in 2000.

14. Gasiti toti angajatii care s -au angajat inaintea sefilor lor.

15. Afisati studentii fara taxa impreuna cu denumirea facultatii, specializarii, anul de
studiu si grupa in ordinea facultatilor, specializarilor, anilor de studii, grupei si dupa
nume.

16. Afișați studenții din anul 1 ai facultații de Științe Economice, ordonați alfabetic pe
grupe.

17. Afișați studenții fǎrǎ taxǎ din anul 1 ai facultații de Științe Economice, ordonați
alfabetic pe grupe.

Ozten CHELAI
26
18. Afișați studenții din anul 1 ai facultații de Științe Eco nomice, ordonați alfabetic pe
grupe.

19. Afișați facultǎțile și specializǎrile pentru care nu sunt studenți în baza de date.

20. Afișați pentru fiecare angajat colegii di aceeași facultate.

21. Afișați numele sefilor și denumirea facultǎții.

22. Afișați numele angajaț ilor, denumirea facultǎții și salariul angajaților cu gradul
salariului egal cu 1.

23. Afișați personalul facultǎții de Matematica și Informatica, casatoriți, angajați dupa
anul 2000.

24. Afișați denumirile facultatilor și funcțiile peronalului angajat.

25. Afișați denumirea facultǎții, numele, funcția, salariul mǎrit cu 20% și gradul noului
salariu pentru toți angajații.

26. Afișați numele, funcția, salariul și suma necesarǎ pentru fiecare angajat pentru a trece
la gradul urmǎtor de salariu.

Ozten CHELAI
27
SOLUTII LABORATOR 3

1.
2. SELECT s.nume,sp.nume_spec FROM studenti AS s, specializari AS sp WHERE
s.id_spec=sp.id_spec

3. SELECT s.nume,sp.nume_spec, f.nume_facultate FROM studenti AS s, specializari
AS sp, facultati AS f where s.id_spec=sp.id_spec AND sp.id_facultate=f.id_facultat e
ORDER BY s.nume

4. SELECT s.nume,sp.nume_spec, f.nume_facultate FROM studenti AS s, specializari
AS sp, facultati AS f WHERE s.id_spec=sp.id_spec AND
sp.id_facultate=f.id_facultate AND s.valoaretaxa>400

5. SELECT p.nume,p.salariu, b.grad FROM personal AS p, BaremSalariu AS b WHERE
p.salariu BETWEEN b.sal_min AND b.sal_max

6. SELECT p.* FROM personal AS p, BaremSalariu AS b WHERE p.salariu
BETWEEN b.sal_min AND b.sal_max AND b.grad=3

7. SELECT s.* from studenti AS s, specializari AS sp, facultati AS f WHERE
s.id_s pec=sp.id_spec AND sp.id_facultate=f.id_facultate AND
UCASE(f.nume_facultate)="STIINTE ECONOMICE"

8. SELECT p.nume,p.functie, p.salariu, b.grad, f.nume_facultate FROM personal AS p,
BaremSalariu AS b, facultati AS f WHERE p.salariu BETWEEN b.sal_min AND
b.sal_max AND p.id_facultate=f.id_facultate AND
UCASE(f.nume_facultate)<>"AUXILIARI" ORDER BY p.salariu DESC

9. SELECT p.nume,p.functie, p.salariu, f.nume_facultate,
b.impozitfix+b.procent/100*p.salariu AS impozit FROM personal AS p, BaremSalariu
AS b, facultati AS f WHERE p.salariu BETWEEN b.sal_min AND b.sal_max AND
p.id_facultate=f.id_facultate ORDER BY f.nume_facultate, p.nume

10. SELECT f.nume_facultate FROM personal AS p RIGHT JOIN facultati AS f ON
p.id_facultate=f.id_facultate WHERE p.nume IS NULL

11. SELECT p .nume, p.id_facultate FROM personal AS p RIGHT JOIN facultati AS f
ON p.id_facultate=f.id_facultate WHERE p.nume IS NULL

12. SELECT p.nume, p.id_personal, s.nume, s.id_personal FROM personal AS p,
personal AS s WHERE p.id_sef=s.id_personal

13. SELECT p.nume, p. id_personal, p.id_facultate,s.nume, s.id_personal FROM personal
AS p LEFT JOIN personal AS s ON p.id_sef=s.id_personal

14. SELECT p.functie FROM personal AS p INNER JOIN personal AS s ON
p.functie=s.functie WHERE (p.data_angajare BETWEEN #01/01/1999# AND
#30/06/1999#) AND (s.data_angajare BETWEEN #01/01/2000# AND #30/06/2000#)

Ozten CHELAI
28
15. SELECT p.nume, p.data_angajare, s.nume,s.data_angajare FROM personal AS p,
personal AS s WHERE p.id_sef=s.id_personal AND p.data_angajare <
s.data_angajare

16. SELECT f.nume_facultate, sp.nume_spec, s.an, s.grupa, s.nume FROM studenti AS
s, specializari AS sp, facultati AS f WHERE s.id_spec=sp.id_spec AND
sp.id_facultate=f.id_facultate AND s.valoaretaxa IS NULL ORDER BY
f.nume_facultate, sp.nume_spec, s.an, s.grupa, s.nume

Ozten CHELAI
29 4. CURS 4 BD – SQL. FUNCȚII DE GRUP ȘI INTEROGǍRI
4.1.AGREGAREA DATELOR FOLOSIND FUNCȚII DE GRUP
4.1.1. Funcții de grup
Funcțiile de grup operează pe mai multe linii intorcând un rezultat. Se poate specifica un
criteriu de grupare a datelor cu clauza GROUP BY, pentru ca funcțiile de grup să întoarcă un
rezultat pentru fiecare grup de linii. Din acestă cauză,funcțiile de grup nu pot fi asociate în
lista de coloane cu coloane individuale. Coloanele au valori diferite pentru fiecare linie, iar
funcțiile de grup se referă la un grup d e linii. Se poate utiliza, însă în lista de coloane, criteriul
de grupare deoarece liniile au aceeași valoare pentru acesta.

Funcțiile de grup mai utilizate sunt: AVG, MIN, MAX, COUNT, SUM.

Funcțiile de grup ignoră valorile NULL. Excepție face funcția C OUNT(*).

4.1.2. Comanda SQL
Sintaxa generală a comenzii este:
SELECT [ criteriu ,] funcțieGrup( expresie1 )
FROM tabel
[WHERE condiție]
[GROUP BY criteriu ]
[HAVING expresie 2]
[ORDER BY expresie]
unde:
– expresie reprezintă o expresie ce cuprinde coloane, deci are va lori pentru fiecare linie
a tabelului specificat;
– criteriu reprezintă o list ă de expresii;
– condiție , reprezintă o expresie logică.

4.1.3. Descrierea funcțiilor de grup
AVG(expr) calculeaza valoarea medie a expresiei specificate ca argument, ignorând valorile
null.
COUNT(expr) întoarce numărul de linii ce au valori diferite de null ale expresiei specificate
ca argument.
COUNT (*) întoarce numărul de linii din tabelul specificat, inclusiv cele cu valori NULL în
ele.
MAX(expr) calculeaza valoarea maximă a expresi ei specificate ca argument, ignorând
valorile null.
MIN(expr) calculeaza valoarea minimă a expresiei specificate ca argument, ignorând valorile
null.
SUM(n) calculeaza suma valorilor expresiei specificate ca argument, ignorând valorile null.

Exemple:
1. Extragerea salariului minim, maxim și mediu din tabelul “personal” se face cu
comanda:
SELECT MIN(salariu), MAX(salariu), AVG(salariu)

Ozten CHELAI
30 FROM personal
Atenție valorile NULL sunt ignorate.
2. Extragerea salariilor anuale minim, maxim și mediu care iau în consider ație și sporul
se face cu comanda:
SELECT MIN(salariu*(1+NZ(spor,0)),MAX(salariu*(1+NZ(spor,0)),
AVG(salariu*(1+NZ(spor,0)) FROM personal
Deoarece o expresie care are un operand NULL are ca rezultat o valoare NULL, se
utilizează funcția NZ(expr,val) care a sociază valoarea specificată de al doilea
argument valorilor NULL ale expresiei expr dată ca prim argument.

3. Afișarea numărului de angajați din tabelul personal se face cu comanda:
SELECT COUNT(*) FROM personal;

4.1.4. Clauza GROUP BY
Clauza GROUP BY este utiliz ată pentru a specifica un criteriu de grupare a liniilor.
Criteriul de grupare a liniilor se referă la valori egale pentru criteriul specificat pentru
liniile din același grup.
Criteriul se specifică printr -o listă de expresii care conțin coloane. O expres ie este o
coloană sau o expresie care conține coloane și operatori și funcții asociate.
Exemple:
1. Sa se afișeze salariile minim, maxim, mediu pentru fiecare facultate:
SELECT id_facultate,MIN(salariu) AS Sal_minim, MAX(salariu) AS Sal_maxim,
AVG(salariu) AS Sal_mediu
FROM personal
GROUP BY id_facultate
2. Să se afișeze salariile maxime pentru fiecare funcție:
SELECT functie,MAX(salariu)
FROM personal
GROUP BY functie
3. Sa se afișeze salariile maxime pentru fiecare funcție pe facultate
SELECT id_facultate,functie, MAX(salariu)
FROM personal
GROUP BY id_facultate,functie

Imbricarea funcțiilor de grup
Funcțiile de grup se pot imbrica, adică se poate utiliza o funcție de grup ca argument al
altei funcții de grup.
Exemplu: Să se afișeze salariul mediul cel mai mare din tabelul personal:
SELECT MAX(AVG(salariu)) FROM personal
Din păcate nu toate sistemele de gestiune implementează acestă imbricare, iar în SGBD
Access nu este permisă imbricarea funcțiilor.

Greșeala cea mai frecventă la utilizarea funcțiilor de grup este aceea de asociere a unei
coloane (cu valori individuale pe fiecare linie) cu o funcție de grup în clauza SELECT.
Exemplu:
SELECT nume, MAX(salariu) FROM personal;
Comanda este greșită deoarece coloana nume are valori diferite pentru fiecare linie, iar
funcția MAX întoarce o valoare pentru toate liniile din tabel.

Ozten CHELAI
31 4.1.5. Filtrarea liniilor pentru funcțiile de grup
Filtrarea liniilor pentru funcțiile de grup se realizează cu clauza HAVING
<expresieLogică> .
Spre deosebire de clauza WHERE sunt filtrare ieșirile func țiilor de grup.
Intr-o comandă SELECT se pot utiliza ambele clauze: WHERE filtrează liniile înainte de
aplicarea funcțiilor de grup, iar HAVING liniile rezultat.
Exemplu:
Afișăm salariile muinime pe facultăți mai mici decât 5000000:
SELECT id_facultate, MI N(salariu) FROM personal GROUP BY id_facultate HAVING
MIN(salariu)<5000000
Observație: În clauza HAVING se utilizează doar expresii valide pentru funcțiile de grup.
Adică nu se pot utiliza coloane cu valori individuale dacă nu sunt specificate în clauza
GROUP BY.

Ordonarea liniilor întoarse se interogare se realizează cu clauza ORDER BY care poate
include ca criterii de ordonare funcțiile de grup și criteriul de grupare.
Exemplu: Afișam salariile medii pe facultăți în ordine descrescătoare a salariilor:
SELECT id_facultate, AVG(salariu)
FROM personal
GROUP BY id_facultate
ORDER BY AVG(salariu) DESC

4.2.SQL. SUBINTEROGĂRI

Subinterogările sunt interogări incluse în alte interogări. Rezultatul subinterogării, furnizat
dinamic la execuție, este utilizat în inter ogare Subinterogarea se numește interogare
interioară , iar interogarea în care se utilizează interogare exterioară .
Clauzele în care se pot utiliza subinterogări sunt: WHERE, HAVING, FROM.

Subinterogările din clauzele WHERE, FROM sunt utilizate în opera ții de comparație astfel:
WHERE <expresie> <operator> (SELECT ……)

Subinterogarea este inclusă între paranteze.

4.2.1. Operatori de comparație
Subinterogările întorc valori. A cestea pot fi :
– o valoare pentru fiecare linie
– o mulțime de valori pentru fiecare linie
– o listă de valori corespunzătoare mai multor coloane.

Operatorii de comparație sunt:
– operatorii asociați tipurilor de date
– operatori pe mulțimi: IN, ANY(SOME), ALL
– operatorul EXIST de corelare a interogării exterioare cu cea interioară

Operatorii de com parație asociați tipurilor de date se utilizează pentru compararea cu o
valoare nu cu o mulțime de valori. În cazul utilizării lor, subinterogarea trebuie să întoarcă o
singură valoare. Operatorii sunt: >, <, >=, <=, <>, BETWEEN…AND…, LIKE

Ozten CHELAI
32 Exemple:
1. Afișați angajații cu salariul egal cu salariul minim din tabelul “personal”:
SELECT nume, salariu FROM personal WHERE salariu = (SELECT MIN(salariu)
FROM personal)
2. Afișați salariile minime pe facultăți mai mari decât salariul minim al facultății 2:
SELECT id_fac ultate,MIN(salariu) FROM personal GROUP BY id_facultate HAVING
MIN(salariu) > (SELECT MIN(salariu) FROM personal WHERE id_facultate=2)
3. Afișați angajații cu salariul mai mare sau egal decât al angajatului cu codul 3 și funcția
egală cu cea a angajatului 8.
SELECT nume, salariu FROM personal
WHERE salariu > (SELECT salariu FROM personal WHERE id_personal=3)
AND functie = (SELECT functie FROM personal WHERE id_personal=8)

4.2.2. Operatori pe mulțimi
Operatorii pe mulțimi sunt IN, <opcomparație> ANY , <opcomparație> ALL

Operatorul IN
Operatorul IN este utilizat pentru a compara un operand cu elemente unei mulțimi. Valoarea
returnată este true dacă operandul este egal cu unul din elementele mulțimii. Altfel răspunsul
este false.
Exemplu: Afișați angajații cu salariul egal cu salariul minim din fiecare facultate:
SELECT nume, salariu, id_facultate
FROM personal
WHERE salariu IN (select MIN(salariu) FROM personal GROUP BY id_faculatate)

Operatorul <opcomparație> ANY
Operatorul ANY compară un operand cu fiecare element a l unei mulțimi. Astfel:
• < ANY înseamnă < maxim
• ANY înseamnă > minim
• = ANY înseamnă IN
Exemplu: Afișați angajații din tabelul personal cu salariul mai mic decât al asisteților, care nu
sunt asistenți:
SELECT nume, salariu, functie
FROM personal
WHERE salar iu <ANY (select salariu FROM personal WHERE
UCASE(TRIM(functie))=”ASISTENT”)
AND UCASE(TRIM(functie))<>”ASISTENT”

Operatorul <opcomparație> ALL
Operatorul ALL compară un operand cu toate elementele unei mulțimi. Astfel:
• < ALL înseamnă < minim
• >ALL înseam nă > maxim
Exemplu: Afișați angajații din tabelul personal cu salariile mai mari decât salariile medii pe
facultati:
SELECT nume, salariu, functie
FROM personal
WHERE salariu >ALL (select AVG(salariu) FROM personal GROUP BY id_facultate)

Operatorul EXISTS

Ozten CHELAI
33 Operatorul EXISTS testeazǎ existența elementelor unei mulțimi și întoarce FALSE pentru o
mulțime vidǎ și TRUE dacǎ mulțimea are elemente.
Exemplu: Afișați facultǎțile fǎrǎ angajați :
SELECT id_facultate, nume_facultate
FROM facultati AS f
WHERE NOT EXISTS (SELECT 1
FROM personal
WHERE id_facultate = f.id_facultate);

4.2.3. Subinterogări corelate
Subinterogǎrile corelate sunt subinterogǎri în care se utilizeazǎ valori obținute din interog area
externǎ.
Exemplu : Afișați angajații cu salariul mai mare decât salariul mediu pe departament :
SELECT nume,salariu,id_facultate
FROM personal AS p
WHERE salariu > (SELECT AVG(salariu) FROM personal
WHERE id_facultate=p.id_facultate)

4.2.4. Subinterogări în clauza FROM
Subinterogǎrile se pot utiliza în clauza FROM, caz în care trebuie specificat alias -ul tabelului
corespunzǎtor subinterogǎrii:
Exemplu : Afișați angajații cu salariul mai mare decât salariul mediu pe departament :
SELECT p.nume, p.salariu, m .salmediu
FROM personal AS p, (SELECT id_facultate, AVG(salariu) AS salmediu
FROM personal GROUP BY id_facultate) AS m
WHERE p.id_facultate=m.id_facultate AND p.salariu>m.salmediu

Exemplu: Afișăți funcția cu cel mai mic salariu mediu
SELECT functie, AVG( salariu) FROM personal
GROUP BY functie
HAVING AVG(salariu) = (SELECT MIN(s.salmediu) FROM (select AVG(salariu) AS
salmediu FROM personal GROUP BY id_facultate) AS s)

Ozten CHELAI
34

LABORATOR 4 – Functii de grup

1. Afișați salariul maxim pe fiecare tip de functie in ordinea descrescǎtoare a
salariilor.

2. Afișați totalul salariilor pe facultăți pentru fiecare tip de funcție.

3. Afișați, în ordine descrescǎtoare dupǎ salariu, angajatii care câștiga cel mai mare
salariu pentru fiecare tip de functie.

4. Afișați salariul med iu anual pe fiecare tip de functie in ordinea crescǎtoare a
salariilor.

5. Afișați angajații cu salariul mai mare decât salariile medii pe fiecare tip de functie.

6. Afișați cei mai recenti angajati din fiecare facultate. Ordonati dupa data angajarii.

7. Afișaț i angajații cu salariul mai mare decât salariul mediu pe functia respectiva.

8. Listati, folosind o subinterogare, toate facultǎțile care nu au angajati.

9. Afișați numărul de angajați ai fiecărei facultăți.

10. Afișați numele și salariul primilor trei angajati, în functie de salariul cistigat.

11. Afișați totalul salariilor pe fiecare funcție pentru facultatea de “Stiinte
Economice”.

12. Afișați totalul taxelor pe fiecare facultate.

13. Afișați facultatea cu totalul cel mai mare al taxelor.

14. Afișați numarul de studenti a i fiecărei facultăți.

15. Afișați numarul de studenți fără taxă pe fiecare specializare.

Ozten CHELAI
35

SOLUTII LABORATOR 4

1. SELECT functie, MAX(salariu)
FROM personal
GROUP BY functie
ORDER BY MAX(salariu) DESC

2. SELECT id_facultate,functie, SUM(salariu)
FROM personal
GROUP BY id_facultate,functie
ORDER BY id_facultate,functie

3. SELECT personal.nume,personal.functie,personal.salariu
FROM (SELECT functie,MAX(salariu) AS sal FROM personal
GROUP BY functie) AS t INNER JOIN personal ON
t.functie=personal.functie AND t.sa l=personal.salariu
ORDER BY personal.salariu DESC

Comparati cu interogarea urmatoare:
SELECT nume, functie, salariu
FROM personal
WHERE salariu IN (SELECT MAX(salariu) FROM personal
GROUP BY functie)
ORDER BY salariu DESC
Obsevati diferenta! I n prima interogare sunt afisati angajatii care au salariu maxim
al functiei, iar in a doua interogare angajatii cu salarii egale cu salariile maxime pe
functii.

4. SELECT functie, AVG(salariu*(1+NZ(spor,0))*12)
FROM personal
GROUP BY functie
ORDER BY AVG(s alariu*(1+NZ(spor,0))*12)

5. SELECT nume,functie,salariu
FROM personal
WHERE salariu > ANY (SELECT AVG(salariu) FROM personal GROUP BY
functie)
ORDER BY salariu

6. SELECT nume, id_facultate, data_angajare
FROM personal
WHERE data_angajar e IN (SELECT MAX(data_angajare)
FROM personal
GROUP BY id_facultate)
ORDER BY id_facultate;

Ozten CHELAI
36 7. SELECT nume, salariu, id_facultate
FROM personal AS p
WHERE salariu > (SELECT AVG(salariu)
FROM personal
WHERE id_facultate = p.id_facultate)
ORDER BY id_facultate;

8. SELECT id_facultate, nume_facultate
FROM facultati AS f
WHERE NOT EX ISTS (SELECT 1
FROM personal
WHERE id_facultate = f.id_facultate);

9. SELECT id_facultate,COUNT(*)
FROM personal GROUP BY id_facultate

10. SELECT nume, salariu
FROM personal p
WHERE 3 > (SELECT COUNT(*)
FROM personal
WHERE p.salariu < salariu);

11. SELECT functie, SUM(salariu)
FROM personal
GROUP BY id_facultate,functie
HAVING id_facultate = (SELECT id_facultate FROM facultati WHERE
UCASE(TRIM(nume _facultate))="STIINTE ECONOMICE")
ORDER BY id_facultate,functie

12. SELECT f.nume_facultate, sp.nume_spec,SUM(s.valoareTaxa)
FROM studenti as s, specializari AS sp, facultati AS f
WHERE s.id_spec=sp.id_spec AND sp.id_facultate=f.id_facultate
GROUP BY f.nume_ facultate, sp.nume_spec

13. SELECT t.nume_facultate, MAX(totaltaxa)
FROM (SELECT f.nume_facultate, sp.nume_spec,SUM(s.valoareTaxa) AS
totalTaxa
FROM studenti as s, specializari AS sp, facultati AS f
WHERE s.id_spec=sp.id_spec AND sp.id_facultate=f.id_faculta te
GROUP BY f.nume_facultate, sp.nume_spec) AS t
GROUP BY t.nume_facultate

14. SELECT f.nume_facultate,COUNT(s.id_student)
FROM studenti as s, specializari AS sp, facultati AS f
WHERE s.id_spec=sp.id_spec AND sp.id_facultate=f.id_facultate
GROUP BY f.nume_f acultate

15. SELECT f.nume_facultate,COUNT(s.id_student)
FROM studenti as s, specializari AS sp, facultati AS f

Ozten CHELAI
37 WHERE s.id_spec=sp.id_spec AND sp.id_facultate=f.id_facultate AND
s.valoaretaxa IS NULL
GROUP BY f.nume_facultate

Ozten CHELAI
38
5. CURS 5 BD – SQL ( DML , DDL)

5.1.SQL. DML (Data Manipulation Language).
5.1.1. DML. Considerații generale
DML (Data Manipulation Language) include operații de modificare a datelor stocate în
tabelele bazei de date și de control al operării acestora.

Operațiile de modificare a datelor stocate în tabele sunt:
– adăugare linii în tabele (INSERT)
– modificare date stocate (UPDATE)
– ștergere linii.

Baza de date este gestionată de serverul de bază de date și este centralizată. Utilizatorii, clienți
ai serverului de bază de date, accesează concurent baza de date.

Din motive de consistență a datelor și de lucru în regim concurent (arhitectură centralizată
client -server), operațiile de modificare trebuie realizate într -un climat sigur care să garanteze
execuția acestora la server în baza de date. În acest se ns, operațiile de modificare sunt
organizate în unități logice numite tranzacții . Mediul de lucru, implementat în acest fel, se
numește tranzacțional.
Un mediu de lucru tranzacțional oferă siguranță în execuție
O tranzacție garantează execuția explicită, atomică a tuturor operațiilor de modificare .
Explicită deoarece se execută explicit la cerere, iar atomică pentru că presupune execuția
tuturor operațiilor din tranzacție (indivizibilă). În cazul în care una din operații nu se poate
realiza, sistemul revi ne la starea sigură inițială (înainte de tranzacție). Pentru a oferi suport
mediului tranzacțional, în SQL sunt incluse comenzi pentru manipularea tranzacțiilor.

5.1.2. Comenzi pentru modificarea datelor stocate
5.1.2.1. Adăugarea de linii
Adăugarea liniilor presupune in troducerea valorilor în coloane, corespunzător structurii
tabelului. În consecință, trebuie cunoscută sau specificată ordinea coloanelor a.î. să existe o
corespondență clară între cele două (valoare -coloană).

Adăugarea de linii într -un tabel se realizeaz ă cu comanda INSERT .
Sintaxa generală a comenzii INSERT este:
INSERT INTO tabel [(coloană1, coloană2, …)]
VALUES (valoare1, valoare2, …)

Cu această comandă se inserează o singură linie în tabel.
Lista de coloane poate lipsi, caz în care valorile se introd uc corespunzător ordinii fizice de
stocare a tabelului.

Ozten CHELAI
39 Pentru introducerea valorilor se vor utiliza constantele în formatul specificat pentru tipul de
dată al coloanei. Astfel șirurile de caractere vor fi delimitate de ghilimele, data calendaristică
se va specifica corespunzător SGBD. La Access formatul este #zz/ll/aaa#.
Exemplu:
INSERT INTO specializari (nume_spec,id_facultate)VALUES (“Mate -Info”,2)
sau
INSERT INTO specializari VALUES (13,“Mate -Info”,2)

Valorile NULL se pot introduce prin specificarea e xplicită, cu constanta NULL, sau implicit
prin omiterea unei valori a unei coloane.
Se pot utiliza funcțiile asociate tipurilor de date pentru specificarea valorilor.
Exemplu: Introducerea unui angajat cu data angajării, data curentă (funcția date()):
INSE RT INTO personal (nume,data_angajare, salariu,functie,sex,id_sef,id_facultate)
VALUES ("Ion Ion",date(),10000,"lector","m",1,1)

In comanda INSERT se pot utiliza subinterogări pentru a introduce mai multe linii dintr -un alt
tabel.
Sintaxa generală a comen zii este:
INSERT INTO tabel [(listă_coloane)] subinterogare
Cu observația că trebuie să existe o corespondență clară între coloanele întoarse de
subinterogare și coloanele tabelului sau lista de coloane specificată în comandă.
Clauza VALUES lipsește.

Exem plu. Introducerea în tabelul “sefi”, cu aceeași structură cu tabelul “personal”, a liniilor
corespunzătoare șefilor:
INSERT INTO sefi SELECT * FROM personal WHERE id_sef IS NULL
5.1.2.2. Modificarea datelor dintr -un tabel
Modificarea datelor dintr -un tabel se face prin specificarea explicită a coloanelor și a valorilor
pentru colana respectivă. In mod implicit se modifică valorile coloanei pentru toate liniile din
tabel. Restricționarea (filtrarea) liniilor modificate se face cu clauza WHERE.

Sintaxa generală a co menzii de modificare este:
UPDATE tabel
SET coloană1 = valoare1 [, coalană2 = valoare2,…]
WHERE expresie_logică

Exemplu. Comanda cu care se modifica în 2 numărul specializării studentului cu numarul 1
este:
UPDATE studenti
SET id_spec=2
WHERE id_student=1

Atenție. Dacă lipsește clauza WHERE se modifică toate liniile din tabel.

Utilizarea subinterogărilor pentru actualizarea datelor….
?

Ozten CHELAI
40 5.1.2.3. Ștergerea liniilor
Stergerea liniilor se face cu comanda DELETE. Această comandă acționează implicit pe toate
liniile t abelului specificat. Restricționarea liniilor șterse se realizează cu clauza WHERE.
Sintaxă generală:
DELETE [FROM] tabel
[WHERE <expresie_logică>]

Exemple:
1. Stergerea tuturor liniilor din tabelul “sefi”:
DELETE FROM sefi
2. Stergerea anagajatului “Ion Ion” din tabelul personal:
DELETE FROM personal WHERE UCASE(nume)=”ION ION”

Se pot utiliza subinterogări pentru a restricționa liniile șterse.
Exemplu: Ștergerea angajaților Facultății de Medicina:
DELETE FROM personal WHERE id_facultate=(SELECT id_facultate F ROM facultati
WHERE UCASE(nume_facultate)="MEDICINA")

Pentru toate operațiile de modificare trebuie respectate restricțiile impuse bazei de date.

5.1.3. Tranzacții
5.1.3.1. Tranzacții. Considerații generale
Tranzacțiile sunt mai bine implementate mediile ce oferǎ suport aplicațiilor cu acces la
distanțǎ la bazele de date. SGBD Access, din acest punct de vedere, la nivelul server -ului
SQL este mai deficitar.
Conceptul de tranzacție este fundamental în bazele de date, deoarece reprezintǎ modalitatea
de a se asigura consist ența datelor.
O tranzacție este alcǎtuitǎ din mai multe instrucțiuni SQL și reprezintǎ cea mai micǎ unitate
de execuție a serverului SQL. Ea se executǎ atomic, adicǎ nu se poate executa o parte din
tranzacție: toate comenzile sau nici una. Fiecare utilizat or lucreazǎ într -un spațiu propriu de
lucru, iar operațiile de modificare a datelor se realizeazǎ într -o tranzacție în spațiul respectiv.
Schimbǎrile nu pot fi vǎzute de alți utilizatori al bazei de date. Modificarea datelor la server
(permanetizarea) se r ealizeazǎ printr -o comandǎ explicitǎ de execuție: COMMIT.
Starea BD la începutul tranzacției este sigurǎ (stabilǎ), iar sistemul poate fi readus în
respectiva stare pe parcursul unei tranzacții. Readucerea se în starea respectivǎ se realizeazǎ
fie implicit de cǎtre sistem în caz de eroare pe parcursul execuției tranzacției, fie explicit de
utilizator printr -o comandǎ ROLLBACK.
Permanetizarea tranzacției indicǎ terminarea ireversibilǎ a tranzacției.
5.1.3.2. Avantajele tranzacțiilor:
– asigurǎ consistența datelor
– previ zualizeazǎ schimbǎrile înainte de a le face permanente
– grupeazǎ operațiile legate logic.

5.1.3.3. Tipuri de tranzacții
1. DML – orice numǎr de comenzi de modificare tratate ca o unitate logicǎ de execuție
2. DDL – o comandǎ DDL

Ozten CHELAI
41 3. DCL – o comandǎ DCL

O tranzacție începe c u prima comandǎ de modificare a datelor.

5.1.3.4. Comenzi pentru controlul explicit al tranzacțiilor:
COMMIT
SAVEPOINT nume
ROLLBACK [TO SAVEPOINT nume]

COMMIT – executǎ atomic modificǎrile din tranzacție în baza de date
SAVEPOINT nume – marcheazǎ un punct de sal vare în tranzacția curentǎ
ROLLBACK [TO SAVEPOINT nume] – sfârșește tranzacția curentǎ prin revenire în starea
inițialǎ sau readuce tranzacția la punctul de salvare indicat

Ozten CHELAI
42
5.2.SQL -DDL

5.2.1. SQL. DDL (Data Definition Language). Considerații generale

DDL conține comenzi pentru crearea și întreținerea obiectelor bazei de date.
Baza de date este formatǎ din mai multe obiecte:
– tabele
– vederi (view) = tabele virtuale ce afișeazǎ anumite informații din tabelele bazi de date
– secvențe – obiecte ce genereazǎ valori în secv ențǎ utilizate pentru cheile primare sau
unice
– proceduri stocate = cod program asociat datelor și stocat în baza de date
– indecși = structuri auxiliare utilizate pentru optimizarea operațiilor cu datele din baza
de date.

5.2.2. Crearea tabelelor
Un tabel se poate crea prin urmǎtoarele medode:
– o comandǎ explicitǎ DDL de creare a unei noi structuri tabelare
– utilizând o subinterogare

Sintaxa comenzii de creare a unui tabel cu structurǎ nouǎ este:
CREATE TABLE tabel (expresieColoana1, expresieColoana2, expresieColoan a3…. ,
restricțiiTabel )
unde
expresieColoana1 = <denumireColoana> <tipColoana> [DEFAULT <expresie>]
<restricție>

<denumireColoana> reprezintǎ denumirea coloanei (un sigur cuvânt fǎrǎ caractere speciale)

<tipColoana> reprezintǎ tipul coloanei.
Tipuri de date
Cele mai utilizate tipuri de date la Access sunt:
Numerice: NUMBER, BYTE, INTEGER, LONG, SINGLE
Caracter: CHAR(nr_caractere), VARCHAR(nr_caractere), TEXT(nr_caractere)
Datǎ calendaristicǎ: DATE, DATETIME
Logic: LOGIC

[DEFAULT <expresie>]
Clauza D EFAULT specificǎ valoarea expresiei ca fiind valoare implicitǎ pentru coloana
respectivǎ.

<restricție> – specificǎ restricțiile (constrângerile) care trebuie îndeplinite pentru valorile din
coloana respectivǎ.

<restricțiiTabel> – specificǎ restricțiile (constrângerile) care trebuie îndeplinite pentru
valorile din tabel

Ozten CHELAI
43 5.2.3. Restricții
Restricțiile (constângerile) sunt utilizate pentru pǎstrarea integritǎții datelor introduse în
tabele. Serverul de BD este forțat sǎ verifice datele a.î. ele sǎ verifice condi țiile specificate.
Restricțiile se definesc la crearea tabelelor.

Existǎ douǎ tipuri de restricții din punct de vedere al localizǎrii:
– definite la nivelul coloanelor
– definite la nivelul tabelului.

Tipuri de restricții din punct de vedere al condițiilor d e verificare (chei) :
NOT NULL – se aplicǎ doar la nivel de coloanǎ
UNIQUE KEY
PRIMARY KEY
FOREIGN KEY
CHECK <condiție>

NOT NULL – specificǎ necesitatea unei valori pentru coloana cǎreia i s -a asociat
UNIQUE KEY – specificǎ valori unice în coloana (expresi a) cǎreia i s -a asociat. Sunt admise
valori NULL. Specificarea restricției se face cu clauza UNIQUE .
PRIMARY KEY – specificǎ cheia primarǎ pentru tabelul respectiv cu valori unice în coloana
(expresia) cǎreia i s -a asociat. Nu sunt admise valori NULL. Spec ificarea restricției se face cu
clauza PRIMARY KEY .
FOREIGN KEY – specificǎ cheia strǎinǎ – o legǎturǎ cu o altǎ coloanǎ(expresie) cu valori
unice (UNIQUE sau PRIMARY KEY) impunând o restricție de integritate referențialǎ.
Valorile care pot fi luate pentr u cheia strǎinǎ fiind cele care existǎ pentru cheia unicǎ.
Specificarea restricției se face cu clauza REFERENCES tabel(expresieColoana) .
CHECK <condiție> – specificǎ o condiție care trebuie verificatǎ de datele introduse în coloanǎ
sau tabel. Specificarea restricției se face cu clauza CHECK <condiție> .

Restricțiilor li se poate asocia un nume cu clauza CONSTRAINT <numeRestricție>
utilizatǎ înainte de specificarea tipului de restricție.

Exemplu:
Crearea tabelului Specializari
CREATE TABLE specializari
(id_spec NUMBER CONSTRAINT sp_pk PRIMARY KEY,
nume_spec TEXT(50) NOT NULL,
id_facultate INTEGER REFERENCES facultati (id_facultate))

5.2.4. Crearea unui tabel utilizând o subinterogare
Comanda SQL este:
CREATE TABLE tabel [coloanǎ1, coloanǎ2, …]
AS subinterogare

Exemplu: Crearea tabelului pers_StEc:
CREATE TABLE pers_StEc
AS
SELECT id_personal, nume, functie, salariu*(1+NZ(spor,0))*12 AS sal_anual, data_angajare
FROM personal

Ozten CHELAI
44 WHERE id_facultate=1

La MS Access implementarea comenzii SQL de creare a unui tabel ut ilizând o interogare este:
SELECT coloanǎ1, coloanǎ2,… INTO tabel
FROM tabel
WHERE condiție

Exemplu:
SELECT id_personal, nume, functie, salariu*(1+NZ(spor,0))*12 AS sal_anual, data_angajare
INTO pers_StEc
FROM personal
WHERE id_facultate=1

5.2.5. Intreținere a tabelelor
Operațiile de întreținere a tabelelor sunt:
– modificarea structurii tabelelor
– ștergerea tabelelor
– redenumirea tabelelor

Modificarea structurii tabelelor se referǎ la:
– adǎugarea de coloane:
ALTER TABLE tabel
ADD expresieColoana1, expresieColo ana2, expresieColoana3…. , restricțiiTabel
Exemplu:
ALTER TABLE pers_StEc
ADD id_s ef INTEGER

– modificarea coloanelor:
ALTER TABLE tabel
MODIFY (expresieColoana1, expresieColoana2, expresieColoana3…. ,
restricțiiTabel )

Ștergerea unuin tabel se reali zeazǎ cu comanda:
DROP TABLE tabel
Exemplu: DROP TABLE pers_StEc

5.2.6. SQL. Vederi (Views)
O vedere reprezintă un tabel virtual ce cuprinde răspunsul unei interogări. Vederea reprezintă
o fereastră prin care pot fi vizualizate sau/și modificate datele din tabel ele bazei de date.
Vederea este stocată în baza de date ca obiect distinct, prin comanda SQL corespunzătoare.

Avantajele vederilor ca obiecte distincte ale bazei de date sunt:
– oferă posibilitatea de a restricționa accesul la date pentru anumiți utilizato ri;
– permit realizarea de interogări simple pentru obținerea datelor din mai multe tabele
fără a fi necesară cunoșterea structurii tabelelor și a relațiilor dintre ele;
– prezintă mai multe vizualizări ale acelorași date stocate în tabele (vederi multiple).
Din punct de vedere al complexității și al operațiilor de modificare permise, vederile se împart
în:

Ozten CHELAI
45 – vederi simple
– vederi complexe.

Vederile simple sunt vederile în care:
– datele se obțin dintr -un singur tabel
– nu conțin funcții de grup
– permit operații de mo dificare a datelor din tabel.

Vederile complexe sunt vederile în care:
– datele se obțin din mai multe tabele
– conțin funcții de grup
– nu permit, în general, operații de modificare a datelor din tabel.

Comanda cu care se creează o vedere este:
CREATE [OR REP LACE] VIEW nume_vedere [(alias1, alias2,…)]
AS subinterogare
[WITH READ ONLY]
unde:
OR REPLACE – caluza care se utilizeazǎ în cazul modificǎrii view -ului
nume_vedere – numele care se atribuie view -ului
(alias1, alias2,…) – lista denumirilor de coloane ale view -ului
AS subinterogare – subinterogarea care definește view -ul
WITH READ ONLY – clauzǎ ce nu permite comenzi de modificare pentru view -ul respectiv.

Exemplu: Comanda SQl cu care se creazǎ view -ul personal1 ce conține id -ul, numele și
funcția anga jaților facultații cu codul 1:
CREATE VIEW personal1
AS SELECT id_personal, nume, functie
FROM personal
WHERE id_facultate=1
Observatii: View -ul nu poate conține clauza ORDER BY
View -urile complexe conțin coloane calculate, funcții de grup sau clauza DI STINCT. În acest
caz operațiile de modificare nu sunt admise.

Stergerea unui view se face cu comanda DROP VIEW nume_view.

SGBD Access nu implementeazǎ comenzile de creare/ștergere view -uri.

Ozten CHELAI
46

LABORATOR 5

1. Creați, utilizând comenzi SQL, o copie a bazei de date “suport2”:
a. Tabelul facultăți
b. Tabelul specializări
c. Tabelul personal
d. Tabelul BaremSalariu.
2. Populati tabelele (introduceti linii) cu datele care sunt introduse in BD suport2.
3. Creați cu datele din tabelul personal tabelul personal_StEc cu angajații fa cultății de
“Stiințe economice”.
4. Actualizați coloana salariu din tabelul “personal” a.î. valoarea salariului să fie mărită cu
15% pentru toți angajații.
5. Adăugați coloana “grad” numerică în tabelul personal.
6. Actualizați valorile din coloana “grad” corespunz ător valorilor din tabelul BaremSalariu.
7. Ștergeți liniile corespunzătoare angajaților cu id_facultate=1.

SOLUTII
1. CREATE TABLE facultati
(id_facultate NUMBER PRIMARY KEY,
nume_facultate TEXT(50) NOT NULL)

CREATE TABLE specializari
(id_spec NUMBER PRIMA RY KEY,
nume_spec TEXT(50) NOT NULL UNIQUE,
id_facultate NUMBER REFERENCES facultati (id_facultate))

CREATE TABLE personal
(id_personal NUMBER PRIMARY KEY,
nume TEXT(50) NOT NULL,
sex TEXT(1) NOT NULL,
casatorit LOGICAL,
data_angajare DATE,
salariu NUMBE R NOT NULL,
spor NUMBER,
functie TEXT(20) NOT NULL,
id_sef NUMBER,
id_facultate NUMBER REFERENCES facultati (id_facultate))

CREATE TABLE baremSalariu
(sal_min NUMBER,
Sal_max NUMBER,
Impozitfix NUMBER,
Procent BYTE,
Grad BYTE PRIMARY KEY)

2. Populati tabel ele (introduceti linii) cu datele care sunt introduse in BD suport2.

Ozten CHELAI
47 INSERT INTO facultati (id_facultate, nume_facultate) VALUES (1,”Stiinte
Economice”);
INSERT INTO facultati (id_facultate, nume_facultate) VALUES (2,”Matematica si
Informatica”);
INSERT IN TO facultati (id_facultate, nume_facultate) VALUES (3,”Drept si
Administratie”);
INSERT INTO facultati (id_facultate, nume_facultate) VALUES (4,”Medicina”);
INSERT INTO facultati (id_facultate, nume_facultate) VALUES (5,”Auxiliari”);

INSERT INTO specializ ari (id_spec, nume_spec, id_facultate) VALUES (1,”Finante
si Banci”,1);
………

Ozten CHELAI
48
6. CURS 6 BD. SQL. DCL
6.1.DCL. Condiderații generale.
Accesul la o baza de date se face autorizat.
Limbajul DCL (Data Control Language) cuprinde comenzi pentru controlul accesului
utilizatorilor la baza de date.
Utilizatorii bazei de date au asociat un nume și o parolǎ.
În funcție de drepturile ce la au asupra bazei de date, utilizatorii sunt de urmǎtoarele tipuri:
– utilizatori obișnuiți
– administratori (dba = DataBase Administrator)

Utilizatorilor li se asociazǎ drepturi (privilegii ). Privilegiile reprezintǎ permisiuni de a
realiza anumite operații asupra datelor.

Privilegiile sunt organizate în grupuri de privilegii numite roluri .
Utilizatorului i se pot aloca privilegii distincte sau roluri (mai multe privilegii odatǎ).

6.2.Securitatea BD.
6.2.1. Tipuri de securitate
Securitatea BD se împarte în:
1. securitatea sistemului – ce se referǎ la accesul și folosirea BD de cǎtre utilizatori
2. securitatea datelor – ce se referǎ la obiectele BD și acțiunile asupra acestora.

6.2.2. Comenzi pentru securitatea sistemului
Comanda DCL pentru crearea unui utilizator este:
CREATE USER nume IDENTIFIED BY parolǎ

Comanda de ștergere a unui utilizator:
DROP USER nume

Modificarea parolei unui utilizator se face cu comanda:
ALTER USER nume IDENTIFIED BY parola

Dupǎ crearea unui utilizator acesta nu are drepturi.
6.2.3. Privilegii sistem
Privilegiile sistem sunt:
3. CREATE TABLE – dreptul de a crea tabele
4. CREATE VIEW – dreptul de a crea view -uri
5. CREATE SEQUENCE – dreptul de a crea s ecvențe
6. CREATE PROCEDURE – dreptul de a crea proceduri stocate
7. CREATE SESSION – dreptul de conectare la baza de date

Comanda de acordare (atribuire) a drepturilor este:
GRANT privilegiu [,privilegiu, ….]

Ozten CHELAI
49 TO user[, user….]

Crearea unui rol se realizea zǎ cu comanda:
CREATE ROLE nume_rol
Rolului i se agigneazǎ drepturi cu comanda GRANT.
Utilizatorilor li se poate asigna un rol cu comanda GRANT.
GRANT nume_rol TO user[, user,…]

Exemplu: Comenzile de creare a rolului “manager” cu drepturile de creare ta bel și view și
asignarea rolului de manager utilizatorului “Ovidius”.
CREATE ROLE manager;
GRANT CREATE TABLE, CREATE VIEW TO manager;
CREATE USER ovidius IDENTIFIED BY ovidius
GRANT manager TO ovidius.

6.2.4. Comenzi pentru securitatea datelor
Fiecare obiect al bazei de date are asociate privilegii care se pot acorda utilizatorilor. Acestea
sunt:
ALTER – drept de modificare
DELETE – drept de ștergere
REFERENCES – de referințǎ de integritate
EXECUTE – de execuție
UPDATE – de modificare
INSERT – de introducere a n oi linii în tabele
Etc.
Acordarea privilegiilor asupra obiectelor se face cu comanda:
GRANT privilegiu_obiect[(coloane)]
ON obiect
TO user|rol|PUBLIC
WITH GRANT OPTION.

Clauza WITH GRANT OPTION indicǎ dreptul de a acorda privilegii altor utilizatori asup ra
obiectelor BD>

PUBLIC – indicǎ toți utilizatorii BD.

Ozten CHELAI
50
7. Curs 7. Dezvoltarea de aplicații cu baze de date. SGBD Access.

7.1.Considerații generale
O aplicație cu baze de date trebuie sǎ cuprindǎ o interfatǎ graficǎ cu utilizatorul care sǎ -i ofere
posibilitat ea de a introduce, modifica, șterge datele din tabelele bazei de date și de extragere
de informații și tipǎrire a lor la imprimantǎ.
Operațiile de introducere a datelor în tabele se realizeazǎ prin intermediul formularelor , iar
cele de pregǎtire a tipǎriri i prin intermediul rapoartelor .
Formularele (FORMS) conțin obiecte de interacțiune cu utilizatorul prin care acesta poate
introduce date și furniza comenzi.
Rapoartele (REPORTS) conțin obiecte pentru afișarea rezultatelor.

7.2.Evenimente
Interfetele aplicatii lor sunt grafice (GUI = Graphic user Interface), i.e. utilizatorul
interactioneaza cu aplicatia prin utilizarea obiectelor grafice. Specificarea interactiunii se
realizeaza prin intermediul evenimentelor.
Evenimentele sunt declansate de actiunea tastelor sau butoanelor mouse -ului.
Acestea pot fi: Click, Dubluclick, Enter, Focus, etc..Aplicatia trebuie sa fie pregatita pentru a
le trata.

7.3.Modelul bazat pe componente
Model nou utilizat in realizarea sistemelor moderne de calcul. Reprezinta “industrializare a”
dezvoltarii software a sistemelor de calcul bazandu -se pe asamblarea elementelor comune
testate in realizarea aplicatiilor. Ceva asemanator cu constructia calculatoarelor de tip PC in
ziua de astazi.
Software are insa in plus fata de hardware si dimensi unea abstractizarii. O componenta
software nu este limitata de caracteristicile fizice ale obiectului pe care il reprezinta. O
componenta software poate fi asamblata si reasamblata in diferite aplicatii schimbaindu -i-se
caracteristicile.

In consecințǎ, me diile de dezvoltare oferǎ utilizatorului software reutilizabil (gata scris, de
folosit) sub formǎ de componente (bucǎți de software) sau obiecte (vezi cursul 7) organizat în
pachete și standardizat (pentru o mai ușoarǎ comunicare între ele).

7.4.Standarde
Standardele elaborate de firma Microsoft pentru baze de date sunt:
DAO (Data Access Objects)
ADO (Active Data Objects)
ActiveX.
Standardele conțin specificații de utilizare pentru diferite obiecte sau componente elaborate.

Ozten CHELAI
51 7.5.Modul de utilizare
În aplicațiile M icrosoft, utilizarea obiectelor se face in formǎ graficǎ (Design View).
Dezvoltatorul își alege obiectele, reprezentate grafic, le așeazǎ în containerul aplicației, le
seteazǎ proprietǎțile și asociazǎ codul necesar pe evenimentele de interacțiune cu utili zatorul.

7.5.1. Formulare Access
Formularele (Forms) reprezinta interfata principala între utilizator si o aplicatie MS Access,
fiind obiecte ale bazei de date ce permit introducerea si afisarea datelor.
Formularul conține obiectele de interacțiune cu utilizator ul, numite „ controale ”.
Detalii referitoare la modalitatea de utilizare a formularelor se gǎsesc în laborator.

Modalitatea cea mai simplǎ de utilizare este folosind expertul (Wizard).
Modul de lucru de proiectare a formularului este Design View. În acest mod de lucru
dezvoltatorul folosește urmǎtoarele instrumente (vezi figura urmǎtoare):
– caseta de controale
– containerul formularului (Form) in care dezvoltatorul poziționeazǎ controalele
– fereastra de proprietǎți a fiecǎrui control în care se seteazǎ propriet ǎțile controlului
respectiv.

Cele mai utilizate controale sunt:
– Label caseta de
controale
formular

Fereastra de
proprietati

Ozten CHELAI
52 – TextBox
– Command
– Radio, Check.
7.5.2. Rapoarte Access
Rapoartele reprezintǎ formatul în care se afișeazǎ/tipǎresc datele și prelucrǎrile acestora. Ca și
în cazul formularelor, existǎ definit un container și obiecte (controale) care se pot utiliza
pentru crearea rapoartelor.

Modul de lucru este asemǎnǎtor cu cel al formularelor. Modalitatea cea mai simplǎ de
utilizare este folosind expertul (Wizard). Modul de lucru de proiectare al ra portului este
Design View. În acest mod de lucru dezvoltatorul folosește urmǎtoarele instrumente (vezi
figura urmǎtoare):
– caseta de controale raport
– containerul raportului (Raport) in care dezvoltatorul poziționeazǎ controalele
– fereastra de proprietǎți a f iecǎrui control în care se seteazǎ proprietǎțile controlului
respectiv.

Ozten CHELAI
53

LABORATOR 6

1. Studiați din fișierul “SGBD Access.doc” subcapitolele referitoare la formularele
Access (3.3) și rapoarte (3.5).
2. Pentru baza de date suport2, creați în acestǎ ordi ne formularele:
– formularul de introducere/modificare date in tabelul facultati
– formularul de introducere/modificare date in tabelul specializari
– formularul de introducere/modificare date in tabelul personal
3. Rapoarte pentru doua interogari mai complexe cu i nformatia ordonata.
4. Formularul principal cu butoane de acces la formularele și rapoartele create.

Ozten CHELAI
54
8. SUBIECTE

8.1.TEORIE
1. Ce este o baza de date?
2. Care sunt obiectele unei baze de date?
3. Ce este un SGBD?
4. Care sunt nivelurile de abstractizare a datelor într -un SGBD?
5. Ce arhitecturǎ au aplicațiile cu BD?
6. Ce funcții de prelucrare a datelor sunt implementate în SGBD?
7. Ce servicii de calitate sunt oferite de SGBD?
8. Ce instrumente de prelucrare sunt implementate In SGBD?
9. Ce reprezintǎ un model de date?
10. Ce reprezintǎ Mode lul Entitate -Relație?
11. Ce reprezintǎ Modelul relațional al datelor?
12. Care sunt operatorii relaționali?
13. Ce reprezintǎ restricția?
14. Ce reprezintǎ proiecția?
15. Ce reprezintǎ reuniunea?
16. Ce reprezintǎ Join?
17. Ce reprezintǎ intersecția?
18. Ce sublimbaje sunt incluse în SQ L?
19. Care este sintaxa generalǎ a comenzii SELECT?
20. Ce reprezintǎ un ALIAS?
21. Ce este un limbaj neprocedural (declarativ)?
22. Ce înțelegeți prin „structura” unui tabel?
23. Ce reprezintǎ un tabel în SQL?
24. Ce reprezintǎ o restricție?
25. Ce reprezintǎ o linie într -un tabel?
26. Ce este „cheia primarǎ”?
27. Ce este un câmp?
28. Ce reprezintǎ un tip de datǎ?
29. Care sunt cele mai utilizate tipuri de date în SGBD -uri?
30. Operatorii asociați tipului numeric de date.
31. Funcții implementate pentru tipul numeric de date.
32. Operatorii asociați tipului „s ir de caractere”.
33. Funcții implementate pentru tipul de date „sir de caractere”.
34. Operatorii asociați tipului de date „datǎ calendaristicǎ”.
35. Funcții implementate pentrui tipul de date „datǎ calendaristicǎ”.
36. Operatorii asociați tipului logic de date.
37. Tipul „N ULL” de date.
38. Care sunt funcțiile pentru conversii între tipurile de date.
39. Ce cuprinde o expresie?
40. Ce specificǎ clauza DISTINCT ?
41. Tipuri de JOIN.
42. Ce operație realizeazǎ SELF -JOIN?
43. Ce operație realizeazǎ EQUI -JOIN?
44. Ce operație realizeazǎ THETA -JOIN?

Ozten CHELAI
55 45. Ce oper ație realizeazǎ OUTER -JOIN?
46. Ce operație realizeazǎ operatorul UNION?
47. Cum se specificǎ o operație de joncțiune în SQL?
48. Cum se obține un produs cartezian în SQL?
49. Cum se specificǎ o joncțiune echivalentǎ în SQL?
50. Operatorul INNER JOIN.
51. Cum se specificǎ o joncț iune ne -echivalentǎ în SQL?
52. Cum se specificǎ joncțiunile externe la Access?
53. Specificați analogiile pentru terminologiile SQL -modelul relațional -MER.
54. Ce sunt funcțiile de grup?
55. Care sunt funcțiile de grup?
56. La ce se folosește clauza GROUP BY?
57. La ce se folose ște clauza HAVING?
58. Ce sunt subinterogǎrile?
59. Ce operatori de comparație pentru mulțimi?
60. Când se utilizeazǎ operatorul IN?
61. Când se utilizeazǎ operatorul ANY?
62. Când se utilizeazǎ operatorul ALL?
63. Când se utilizeazǎ operatorul EXISTS?
64. Ce sunt subinterogǎrile cor elate?
65. Ce sunt tranzacțiile?
66. Comanda SQL de adǎugare linii în tabele.
67. Comanda SQL de modificare a datelor din tabele.
68. Comanda SQL de ștergere linii din tabele.
69. Comenzi SQL asociate tranzacțiilor.
70. Permanentizarea unei tranzacții.
71. Care sunt obiectele unei ba ze de date?
72. Comanda SQL de creare a unui tabel?
73. Ce sunt restricțiile?
74. Tipuri de restricții.
75. Ce este restricția FOREIGN KEY și cum se specificǎ?
76. Cum se creazǎ un tabel utilizând o subinterogare?
77. Comenzi SQL de modificare a structurii tabelelor.
78. Ce este o ve dere (VIEW)?
79. Care este comanda SQL cu care se creazǎ o vedere?
80. Considerații generale privind DCL.
81. Comenzi DCL pentru securitatea sistemului (gestiunea utilizatorilor).
82. Ce reprezintǎ privilegiile (drepturile) și cum se alocǎ?
83. Ce este un rol și care sunt com enzile SQL asociate acestuia?
84. Privilegii pentru securitatea datelor.
85. Ce reprezintǎ un formular?
86. Ce reprezintǎ un raport?

8.2.INTEROGARI SIMPLE
87. Sǎ se afișeze numele, funcția și salariul angajaților în ordinea descrescǎtoare a
salariilor pe fiecare funcție.
88. Sǎ se afișeze numele și funcția angajaților facultǎții cu codul 2.
89. Sǎ se afișeze angajații cu salariul 10 milioane și 20 de milioane lei ordonați dupǎ codul
facultǎții.

Ozten CHELAI
56 90. Sǎ se afișeze personalul angajat în anul 1999.
91. Sǎ se afișeze angajații care sunt femei.
92. Sǎ se afișeze angajații care sunt bǎrbați.
93. Sǎ se afișeze angajații care au spor de salariu.
94. Sǎ se afișeze angajații care nu au spor de salariu.
95. Sǎ se afișeze angajații care au funcția lector în ordine alfabeticǎ a numelor.
96. Sǎ se afișeze angajații care au fun cția asistent în ordine descrescǎtoare a salariilor.
97. Sǎ se afișeze angajații care au funcția conferențiar în ordine alfabeticǎ a numelor.
98. Sǎ se afișeze angajații care au funcția profesor în ordine descrescǎtoare a salariilor.
99. Sǎ se afișeze numele, funcția și salariul anual.
100. Sǎ se afișeze numele, funcția și salariul anual pentru angajații cu salariul anual
mai mare decât 60 milioane lei.
101. Sǎ se afișeze salariul mǎrit cu 6% pentru toți angajații.
102. Afișați angajații cu salariul între 6 milioane și 12 milioane.
103. Sǎ se afișeze salariul mǎrit cu 10% pentru toți angajații.
104. Afișați angajații cu salariul între 7 milioane și 15 milioane.
105. Afișați ang ajații facultǎților cu numǎrul 2 și 3.
106. Afisati personalul cu numele conținând “ESCU” sau “GHE”.
107. Afisati personalul cu numele începând litera “A” sau “C”.
108. Afișați toți angajații care au șef.
109. Afișați toți angajații care nu au șef.
110. Afișǎți urmǎtoarea propoziție pentru fiecare angajat:
***** este angajat la facultatea cu numarul ** si are salariul de ******.
111. Afișǎți urmǎtoarea pro poziție pentru fiecare angajat:
***** este angajat in anul ***** si are functia de ******.
112. Afișați salariul anual brut (salariu*%spor lunar) pentru toți angajații.
113. Afișați angajații dupǎ anul 1999.
114. Afișați numele și salariul anual al personalului facultat ii 1 cu salariul anual mai
mare decât 50000000, în ordine alfabetica.
115. Afisati numele si data angajarii salariatilor angajati in 1999.
116. Afișați salariul mǎrit cu 20% pentru șefi.
117. Afisati numele tuturor angajatilor cu a treia litera N.
118. Afisați salariile lunar e în lei grei, rotunjite la o zecimala pentru tot personalul.
119. Afisati numele tuturor angajatilor cu a treia litera A.
120. Afisați salariile lunare în lei grei, rotunjite la douǎ zecimale pentru tot personalul.
121. Afisati numele, functia si salariul angajatilor cu functia: LECTOR sau ASISTENT
si salariul diferit de 9000000, 5000000, 5500000.
122. Afisati numele, salariul, data angajarii pentru anagajatii dupa 1998 care sunt lector
si au litera A in nume.
123. Afisati angajatii care au manager din facultatile cu id_facultate 1 si 2.
124. Afisati numarul de zile de la angajare al intregului personal.
125. Afisati angajatii in luna ianuarie .
126. Afisati ziua din saptamana in urmatorul an dupa angajare pentru intregul personal.
127. Afisati numarul de caractere al numelor angajatilor din personal.
128. Afisati angajații cu numele mai lung de 2 2 de caractere.
129. Afisati angajatii care au spor de salariu, angajati dupa 1990 din facultatea 1.
130. Afisati gradul salariului de 9000000.
131. Afisati pentru sefi urmatoarea propozitie. Atenție numele incepe cu majuscula.
****** este SEF al facultatii cu numarul *.

Ozten CHELAI
57
8.3.INTEROGARI COMPLEXE
132. Sǎ se afișeze numele angajaților și denumirea facultǎții la care sunt angajați.
133. Sǎ se afișeze numele studenților și denumirile specializǎrilor la care sunt studenți.
134. Sǎ se afișeze numele stude nților și denumirea facultǎții la care sunt studenți.
135. Sǎ se afișeze studenții facultǎții de « Stiințe economice ».
136. Sǎ se afișeze studenții facultǎții de « Stiințe economice » in ordinea anilor de studiu
si a grupelor.
137. Sǎ se afișeze numele și gradul salarii lor angajaților din tabelul personal .
138. Afisati numele studentilor si denumirile specializarilor la care sunt studenti.
139. Afisati numele studentilor impreuna cu denumirile specializarilor si facultatilor in
ordine alfabetica dupa nume
140. Afisati numele, denumirea specializarii si facultatea stud entilor cu taxa mai mare
decat 3 00.
141. Afisati numele angajatilor, salariile si grad ele salariilor in ordinea descrescatoare a
salariilor.
142. Afisati angajatii cu gradul 4 al salariului.
143. Afisati numele angajatilor, functia, sal ariul, grad ul salariunlui si numele
specializarii pentru toti angajatii care apartin facultǎții de « Stiințe Economice »,
ordonati alfabetic dupa nume .
144. Afisati numele, functia, facultatea, salariul si impozitul angajatilor din tabelul
personal, ordonati du pa facultate si nume.
145. Afisati denumirea facultatii care nu are angajati in tabelul personal.
146. Afisati toti angajatii (nume si id) impreuna cu numele si id -ul sefului.
147. Gasiti functia care a fost ocupata in prima jumatate a anului 1999 si aceeasi functie
a fost ocupata in timpul aceleiasi perioade in 2000.
148. Gasiti toti angajatii care s -au angajat inaintea sefilor lor.
149. Afisati studentii fara taxa impreuna cu denumirea facultatii, specializarii, anul de
studiu si grupa in ordinea facultatilor, specializarilor, anilor de studii, grupei si dupa
nume.
150. Afișați studenții din anul 1 ai facultații de Științe Economice, ordonați alfabetic pe
grupe.
151. Afișați facultǎțile și specializǎrile pentru care nu sunt studenți în baza de date.
152. Afișați pentru fiecare angajat colegii din aceeași facultate.
153. Afișați numele sefilor și denumirea facultǎții.
154. Afișați numele angajaților, denumirea facultǎții și salariul angajațilo r cu gradul
salariului egal cu 2 .
155. Afișați personalul casatorit al facultǎții de Matematica și Informatica angaja t dupǎ
anul 1999 .
156. Afișați denumirile facultatilor și funcțiile angaja ților din tabelul »personal ».
157. Afișați denumirea facultǎții, numele, funcția, salariul mǎrit cu 20% și gradul noului
salariu pentru toți angajații.
158. Afișați numele, funcția, salariul și su ma necesarǎ pentru fiecare angajat pentru a
trece la gradul urmǎtor de salariu.
159. Afișați salariul maxim pe fiecare tip de f acultate in ordinea descrescǎtoare a
salariilor.
160. Afișați totalul salariilor pe facultăți pentru fiecare tip de funcție.
161. Afișați, în or dine descrescǎtoare dupǎ salariu, angajatii care câș tiga cel mai mare
salariu pe fiecare facultate .

Ozten CHELAI
58 162. Afișați salariul mediu anual pe fiecare tip de facultate in ordinea crescǎtoare a
salariilor.
163. Afișați angajații cu salariul mai mare decât salariile medii pe fiecare f acultate .
164. Afișați cei mai recenti angajati din fiecare facultate. Ordonati dupa data angajarii.
165. Afișați angajații cu salariul mai mare decât salariul mediu pe functia respectiva.
166. Listati, folosind o subinterogare, toate facultǎțile care nu au a ngajati.
167. Afișați numărul de angajați ai fiecărei facultăți.
168. Afișați numele și salariul primilor trei angajati, în functie de salariul cistigat.
169. Afișați totalul salariilor pe fiecare funcție pentru facultatea de “Stiinte Economice”.
170. Afișați totalul taxelor pe fiecare facultate.
171. Afișați facultatea cu totalul cel mai mare al taxelor.
172. Afișați numarul de studenti ai fiecărei facultăți.
173. Afișați numarul de studenți fără taxă pe fiecare specializare.

8.4.FORMULARE. RAPOARTE
174. Sǎ se creeze un formular pentru introducere a/modificarea datelor din tabelul
“facultǎți” și un formular cu un buton de afișare a formularului creat.
175. Sǎ se creeze un formular pentru introducerea/modificarea datelor din tabelul
“specializǎri” și un formular cu un buton de afișare a formularului creat .
176. Sǎ se creeze un formular pentru introducerea/modificarea datelor din tabelul
“personal” și un formular cu un buton de afișare a formularului creat.
177. Sǎ se creeze un formular pentru introducerea/modificarea datelor din tabelul
“baremsalariu” și un formular cu un buton de afișare a formularului creat.
178. Sǎ se creeze un formular pentru introducerea/modificarea datelor din tabelul
“studenți” și un formular cu un buton de afișare a formularului creat.
179. Sǎ se creeze un raport pentru o interogare și un formular cu u n buton de afișare a
raportului creat.

Similar Posts