Sunteți pe pagina 1din 61

Unitatea de studiu 4

BAZE DE DATE RELAŢIONALE

Obiectivele unităţii de studiu 4:

Baze de date relaţionale


1. Aspecte generale privind utilizarea bazelor de date relaţionale
2. Introducere în algebra relaţională
3. Proiectarea bazelor de date relaţionale

Obiectivele unităţii de studiu 4

 Cunoaşterea şi familiarizarea cu componentele programelor de calcul tabelar: registrul de


lucru şi foaia de calcul
 Analiză rapidă a datelor prin reprezentarea lor grafică
 Folosirea în foile de calcul a formulelor şi funcţiilor pentru efectuarea unei game variate de
operaţiuni: calcule matematice, financiare, statistice, logice, căutări de informaţii, simulări şi
analize etc.

Competenţe dobândite:

 Obţinerea şi gestionarea registrelor de lucru şi a foilor de calcul astfel încât modelele


proiectate să automatizeze cererile utilizatorilor
 Alegerea tipului de grafic în aşa fel încât acesta să fie sugestiv
 Susţinerea procesului decizional prin simulări şi analize de date în foile de calcul şi în grafice
 Exploatarea listelor şi a bazelor de date Excel prin actualizări, sortări şi interogări

Timpul mediu necesar asimilării: 10 ore


Instrumente software pentru Administraţia Publică

Aşa cum am văzut în capitolele anterioare, bazele de date constituie suportul


indispensabil în numeroase sisteme informatice. Algebra relaţională a condus la apariţia unei
noi generaţii de baze de date, deschizând perspective domeniului inteligenţei artificiale şi a
ingineriei programării, ceea ce a permis lărgirea continuă a cercului proiectanţilor şi
utilizatorilor de baze de date.

4.1 ASPECTE GENERALE PRIVIND UTILIZAREA BAZELOR DE


DATE RELAŢIONALE

La peste 20 de ani de la definirea şi formalizarea bazelor de date relaţionale se poate


spune că prin utilizarea acestui tip de sisteme sunt atinse obiective importante precum:
 asigurarea unei mari independenţe a programelor de aplicaţie faţă de organizarea datelor;
 utilizarea unor puternice limbaje de manipulare a datelor, atât procedurale, cât şi
neprocedurale;
 definirea unei structuri conceptuale optime care să conducă la minimizarea redundanţei
datelor şi a erorilor la actualizare;
 utilizarea unor instrumente performante de control pentru asigurarea integrităţii şi
confidenţialităţii datelor;
 utilizarea paralelismului în prelucrarea datelor(manipularea se realizează la nivel de
relaţie).
Prima firmă care a iniţiat un proiect de elaborare a SGBD relaţional (System/R-1974)
a fost IBM, dar primul SGBD comercial a fost lansat de RelationalSoftware Inc. astăzi
Oracle. Există o largă gamă de SGBD-uri relaţionale dar cele mai utilizate în cadrul
organizaţiilor sunt Visual FoxPro, Access, Paradox, Oracle, DB2(IBM), Informix, SQL
Server.

4.1.1 Noţiuni utilizate în structura relaţională a datelor


Structurarea datelor după modelul relaţional impune folosirea următoarelor noţiuni:
domeniu, relaţie, atribut, tuplu şi schema relaţională [Moréjon 1992, p. 32].
Reunite aceste elemente pot fi reprezentate ca în figura 4.1.
Domeniul reprezintă ansamblul de valori acceptat pentru un element al relaţiei, este
caracterizat printr-un nume ce poate fi definit în extensie sau în intensie.

93
Baze de date relaţionale

nume relatie

atribut
Obiecte-inventar
schema
relatiei
Cod-Furnizor Cod-ob-inv Den-ob-inv. UM PU Cantitate

211 311 Etajere buc 235000 12


202 291 Scaune buc 95000 10
211 321 Cuiere buc 47000 5 tuplu

237 312 Dulapuri buc 450000 4 n-tupluri

192 357 Salopete buc 85000 14


213 345 Manusi buc 18000 12
192 314 Ochelari buc 15000 10
211 291 Birouri buc 150000 3
domeniu
valoarea
din domeniu
Figura 4.1 Structurarea datelor după modelul relaţional

O relaţie corespunde unei restricţii semantice din universul real modelat deoarece
fiecare obiect din acest univers trebuie să fie identificat într-o manieră unică şi diferenţiat în
raport cu alte obiecte. Deci, relaţia reprezintă un subansamblu al produsului cartezian al unei
liste de domenii.
Atributul reprezintă numele dat unui domeniu dintr-o relaţie şi determină ansamblul
de valori pe care acesta îl poate lua. Noţiunea de atribut nu trebuie confundată cu cea de
domeniu. Într-o relaţie numele unui atribut este unic. Orice atribut al unei tabele oarecare
trebuie să fie atomic, adică să nu mai poată fi descompus în alt atribut. Atributele situate în
relaţii diferite pot avea acelaşi nume, dacă implicit sunt definite pe acelaşi domeniu semantic.
Tuplul sau n-uplu reprezintă un rând sau o linie distinctă de valori din cadrul unui
tabel rezultând că o relaţie este un ansamblu de tupluri care poate fi definită: extensiv (prin
indicarea listei tuturor tuplurilor ce o compun) şi intensiv (prin indicarea predicatului de
apartenenţă a unui tuplu la relaţia respectivă). Deci relaţia este un ansamblu de m-tupluri:
R={t1,t2,.....t k......t m} unde t k=(dk1,dk2,...d ki...dkn) , iar d k1 este o valoare în domeniul
D1...Dn.
n - este ordinul relaţiei(numărul valorilor dintr-un tuplu)

m - este cardinalitatea relaţiei(numărul tuplurilor dintr-o relaţie)

Identificarea în mod unic, fără ambiguităţi, a oricărui tuplu dintr-o relaţie se


realizează printr-o cheie primară formată dintr-un singur atribut (cheie simplă) sau mai multe
atribute (cheie compusă). Dacă într-o relaţie există mai multe atribute care conferă unicitatea
tuplului acestea se numesc chei candidate. O cheie candidat care nu a fost aleasă cheie
primară este considerată cheie alternativă (secundară). Asigurarea legăturii între relaţii

94
Instrumente software pentru Administraţia Publică

diferite se face prin intermediul unor atribute sau combinaţii de atribute numite chei externe
(străine).
O cheie primară, în orice moment, posedă următoarele proprietăţi:
 este unică – identifică un singur tuplu într-o relaţie;
 are o compoziţie minimală – fiecare atribut al cheii nu poate fi eliminat fără
distrugerea unicităţilor relaţiei;
 valorile atributelor din cheia primară sunt specificate deci non-nule.
Schema relaţiei se constituie din numele relaţiei urmat de lista atributelor şi,
eventual, de definirea domeniului lor [Moréjon 1992, p. 34], fiind posibile mai multe
reprezentări. Schema este cunoscută sub numele de intensia relaţiei. Ea este expresia
proprietăţilor comune şi invariante ale tuplurilor care compun relaţia. Spre deosebire de
intensie, extensia unei relaţii reprezintă ansamblul tuplurilor care compun la un moment dat
relaţia şi este variabilă în timp.
Conceptul de relaţie permite reprezentarea unei entităţi din universul modelat şi o
legătură semantică inter-entitate. Într-o entitate, fiecărei legături semantice îi corespunde o
relaţie. În teoria sistemelor, adăugarea unui nou tuplu determină modificarea fizică a relaţiei,
în timp ce din punct de vedere semantic, aceasta rămâne neschimbată. Pentru definirea, fără
ambiguităţi semantice, a unei relaţii nu este suficientă noţiunea de domeniu.

4.1.2 Reguli de integritate

În modelul relaţional trebuie respectate trei restricţii considerate minimale. Ele


constituie un anumit număr de controale care ar trebui să fie satisfăcute de către datele bazei,
pentru a putea fi considerate coerente şi concrete în raport cu lumea reală pe care o reflectă
[Date 1981, p. 2-12].
Unicitatea cheii. Conform acestei reguli într-o relaţie R care are cheia K, oricare ar fi
tuplurile t1 şi t2 trebuie satisfăcută inegalitatea: t1(K)  t2(K). Două tupluri nu pot avea
aceeaşi valoare pentru cheia primară.
Restricţia referenţială (integritatea referirii). Dacă un acelaşi atribut apare într-o
relaţie ca cheie şi într-o altă relaţie ca non-cheie, orice valoare a atributului non-cheie trebuie
să existe în atributul cheie [Moréjon 1992, p. 35]. Respectând această regulă într-o relaţie R1,
care referă o relaţie R2, valorile cheii străine (externe) trebuie să figureze printre valorile
cheii primare din relaţia R2.
Exemplu: în relaţiile STUDENT, NRMATRICOL este cheie primară; cheia relaţiei
SITSC este formată din ansamblul atributelor NRMATRICOL, CODEXAMEN şi DATAEX.
Orice valoare pentru NRMATRICOL din relaţia SITSC trebuie să existe în NRMATRICOL
din STUDENT (idem pentru CODEXAMEN). Atributul NRMATRICOL (CODEXAMEN)
în relaţia STUDENT este numit cheie primară, iar în relaţia EXAMEN este numit cheie

95
Baze de date relaţionale

străină. Relaţia SITSC poate fi numită şi referenţiată sau desemnată, în timp ce relaţiile
STUDENT şi EXAMEN pot fi numite referenţiale sau desemnante.

ST U D E N T N R . M AT R IC O L NU M E STUD ENT D AT A N A S T S E C T IE

S I T. SC N R . M AT R IC O L CO D EXAM EN D AT A E X N O TA

EXAMEN C O D EX A M EN D IS C I P L IN A

Figura 4.2 Restricţie referenţială


Restricţia de entitate. Valorile oricărui atribut care face parte dintr-o cheie primară
trebuie să fie “nenule”. Unicitatea cheii impune ca la încărcarea unui tuplu, valoarea cheii
primare să fie cunoscută. În felul acesta se elimină duplicarea tuplurilor. Pe lângă aceste
restricţii, considerate minimale, modelul relaţional poate oferi şi restricţii referitoare la
dependenţa datelor şi restricţii de comportament. Primele privesc datele ce depind unele de
altele şi pot fi: funcţionale, multivaloare şi de joncţiune.
Dependenţele funcţionale permit identificarea unui atribut sau grup de atribute prin
intermediul altui atribut sau grup de atribute.
Dependenţele multivaloare se stabilesc între datele în care un atribut sau grup de
atribute poate prezenta mai multe valori pentru o singură valoare a unui alt atribut sau grup
de atribute.
Dependenţele de joncţiune apar atunci când nu se pot manifesta dependenţe
funcţionale sau multivaloare, exprimând o relaţie mai generală.
Restricţiile de comportament, la rândul lor pot fi, cel mai adesea, de domeniu şi
temporale. Cele de domeniu impun ca valorile unui atribut să se încadreze între anumite
limite. Cele temporale impun ca valorile rezultate în urma actualizării să fie altele decât cele
anterioare actualizării.

4.2 INTRODUCERE ÎN ALGEBRA RELAŢIONALĂ

E.F. Codd fundamentează modelul relaţional pe baza teoriei matematice a relaţiilor şi


a calculului relaţional. Teoria matematică a relaţiilor este cunoscută sub numele de algebră
relaţională. Aceasta poate fi considerată ca fiind o colecţie de operaţii pe relaţii definite într-o
manieră formală, producând ca rezultat alte relaţii [Moréjon 1992, p. 38].
Operatorii relaţionali cei mai folosiţi în domeniul economic şi al administraţiei
publice sunt prezentaţi în continuare.

96
Instrumente software pentru Administraţia Publică

Reuniunea este operaţia între două relaţii R1 şi R2 având aceeaşi schemă (sunt
unicompatibile). Rezultatul va fi relaţia R3 care conţine ansamblul tuplurilor constituit prin
reuniunea tuplurilor din relaţiile R1 şi R2, eliminând duplicatele.
Matematic reuniunea se poate prezenta astfel:R3 = R1R2 sau R3 = APPEND(R1,
R2) sau R3 = OR(R1, R2) sau R3 = UNION(R1, R2).
Diferenţa este operaţia între două relaţii R1 şi R2 unicompatibilie (care au aceeaşi
schemă) obţinându-se relaţia R3 cu aceeaşi schemă dar având în conţinut un ansamblu de
realizări constituit din tuplurile relaţiei R1 care diferă de cele existente în relaţia R2.
Matematic diferenţa se poate prezenta astfel: R3 = R1 – R2 sau R3 = DIFF(R1, R2)
sau R3 = REMOVE(R1, R2) sau R3 = MINUS(R1, R2).
Intersecţia reprezintă operaţia între două relaţii R1 şi R2 care au aceeaşi schemă,
rezultatul fiind o relaţie R3 cu schemă identică şi care conţine tuplurile comune relaţiilor R1
şi R2.
Matematic intersecţia pot fi exprimată astfel: R3 = R1  R2 sau R3 = INTER(R1,
R2) sau R3 = AND(R1, R2). Pornind de la relaţiile de bază intersecţia poate fi exprimată şi
sub formele:
R3 = R1 – (R1-R2) sau R3 = R2 – (R2-R1)
Produsul cartezian este operaţia între două relaţii R1 şi R2 ce are ca rezultat o relaţie
R3 a cărei schemă se obţine prin juxtapunerea schemelor relaţiilor R1 şi R2. Relaţia R3
cuprinde toate combinaţiile n-uplurilor din relaţiile R1 şi R2. Relaţiile R1 şi R2 au scheme
diferite (fiind încălcat principiul unicompatibilităţii).
Matematic produsul cartezian poate fi exprimată astfel: R3 = R1 X R2; sau R3 =
PROD(R1, R2); sau R3 = PRODUCT (R1, R2); sau R3 = TIMES(R1, R2).
Proiecţia (decupajul vertical) reprezintă o operaţie pe o singură relaţie R1 şi are ca
rezultat o relaţie R2 redusă la atributele menţionate explicit în operanzi. N-uplurile din relaţia
R2 sunt unice. Prin proiecţie se trece la o relaţie de grad inferior relaţiei R1.
Matematic pentru proiecţie sunt folosite notaţiile: R2 =  Atribut1, Atribut2, …,
(R1) sau R2 = PROJECT(R1, Atribut1, Atribut2, …) sau R2 = R1(Atribut1, Atribut2, …)
Selecţia (restricţia) este operaţia pe o relaţie R1 care produce o nouă relaţie R2, cu
aceeaşi structură şi în care tuplurile verifică o condiţie exprimată explicit. Prin selecţie se
elimină liniile care nu satisfac condiţia impusă. Cardinalitatea relaţiei R2 va fi mai mică sau
cel mult egală decât cardinalitatea relaţiei R1. Matematic selecţia se poate scrie astfel: R2 =
Condition(R1) sau R2 = R1(Condition) sau R2 = SELECT(R1, Condition) şi R2 =
RESTRICT(R1, Condition).
Joncţiunea (Join sau Teta-joncţiune) reprezintă o operaţie între două relaţii R1 şi R2
care are ca rezultat o relaţie R3 cu o schemă obţinută prin concatenarea schemelor primelor
două. Conţinutul relaţiei îl reprezintă ansamblul n-uplurilor obţinute prin concatenarea

97
Baze de date relaţionale

tuplurilor din R1 şi R2 care verifică o condiţie stabilită între atributele celor două relaţii. Sub
formă matematică joncţiunea poate fi prezentată astfel: R3 = R1 |><|R2 (Condition) sau R3 =
JOIN(R1, R2, Condition).
Joncţiunea poate fi obţinută şi prin combinaţia dintre produsul cartezian urmat de
selecţie.
R3 = SELECT(PROD(R1, R2), Condiţie)
Dacă operatorul folosit la joncţiune este „=” se obţine aşa numita echijoncţiune.

4.3 PROIECTAREA BAZELOR DE DATE RELAŢIONALE

Realizarea bazei de date presupune utilizarea unor metode şi tehnici de analiză, de


programare şi instrumente speciale de lucru, folosite la parcurgerea următoarelor etape:
 analiza mediului economic pentru care se realizează baza de date şi stabilirea
cerinţelor informaţionale;
 proiectarea structurii bazei de date: schema conceptuală (externă şi internă);
 încărcarea datelor în baza de date;
 exploatarea şi întreţinerea bazei de date.
Schematic derularea acestei etape este prezentată în figura nr. 4.3 [Lungu 1995, p.27]:
Modelele
Cerin¡e 1 sistemului
informa¡ionale Analiza sistemului (modelul
¿i a cerin¡elor structural,
Evolu¡ia informa¡ionale dinamic ¿i
cerin¡elor func¡ional)
informa¡ionale

2
Evolu¡iasistemului Proiectarea
(domeniului) economic structurii BD 4
Sistemul (domeniul) Exploatarea
economic pentru care BD
esterealizatåBD Structura BD
(schema
conceptualå,
3 externå¿i
¥ncårcarea internå)
4 datelor în BD Descrierea
¥ntre¡inere datelor
BD
Colec¡ii dedate

Figura 4.3 Etapele de realizare a unei BD

4.3.1 Proiectarea schemei conceptuale


Îmbunătăţirea performanţelor în manipularea entităţilor presupune obţinerea unei
scheme conceptuale care să asigure prevenirea şi eliminarea disfuncţionalităţilor /anomaliilor
ce se întâlnesc în special la actualizare, dar afectează şi performanţele operaţiilor de
încărcare, exploatare şi întreţinere a unei baze de date. Aducerea bazei de date la o structură

98
Instrumente software pentru Administraţia Publică

presupune parcurgerea unui proces de normalizare a relaţiilor, proces centrat pe dependenţele


dintre atributele bazei de date.
Noţiunea de dependenţă a fost introdusă în anii ’70, din secolul trecut, de către E.F.
Codd odată cu teoria relaţională de organizare şi structurare a datelor. Cu timpul sau profilat
diverse tipuri de dependenţe: funcţională, multivaloare, mutuale, ierarhice, de joncţiune şi
ISO – dependenţe. Există o dependenţă funcţională (DF) între două atribute X şi Y a unei
relaţii R dacă pentru orice valoare a lui X la un moment dat, se poate asocia numai o singură
valoare pentru Y. X este atributul sursă a DF , iar Y este atributul scop (destinaţie).
Reprezentarea grafică este X Y.
În plus, dacă un atribut sau un grup de atribute, dintr-o relaţie, determină prin DF
toate celelalte atribute ale aceleaşi relaţii, acesta constituie cheia relaţiei.
Dependenţe funcţionale (DF)
Fiind dată relaţia CANDIDAT(NRDOSARINSCR, NUME, ADRESA, MEDBAC) se
pot stabili următoarele dependenţe funcţionale:
NRDOSARINSCR  NUME
NRDOSARINSCR  ADRESA
NRDOSARINSCR  MEDBAC
Notă: Facem precizarea că NRDOSARINSCR este unic pentru fiecare candidat.
CANDIDAT NRDOSARINSCR NUME PRENUME LOCALITATE MEDBAC
110 GRIGORE RADU IASI 8.50
111 BAZA DIANA SUCEAVA 9.20
112 ANDRONACHE OANA IASI 8.50
113 DIMA OANA BACAU 8.43
114 VIERU N. GEORGE ROMAN 9.75
115 TOFAN C. MARIANA IASI 9.20
116 SIRBU PAUL SUCEAVA 8.47

Acest exemplu poate fi considerat un caz particular al dependenţei funcţionale atunci


când NRDOSARINSCR este cheie primară, putându-se aprecia că dependenţa funcţională
este o generalizare a conceptului de cheie primară. Are o mare importanţă alegerea cheii
primare. O alegere incorectă poate duce la negarea dependenţei funcţionale. De exemplu, în
relaţia CANDIDAT, atributul MEDBAC neagă dependenţa funcţională, deoarece mai mulţi
candidaţi pot avea aceeaşi medie. Rezultă că dependenţele funcţionale pot fi considerate
restricţii de integritate.
Atunci când într-un ansamblu F de dependenţe funcţionale (DF), fiecare DF din F nu
are decât un singur atribut în scop (destinaţie-partea dreaptă) se obţine o formă canonică.
Dacă sursa dependenţei funcţionale (partea stângă) conţine două sau mai multe
atribute avem o dependenţă funcţională cu sursă compusă.

99
Baze de date relaţionale

Dependenţa funcţională este elementară (totală) Data1 Data2 dacă nu există nici o
Data3 ca subansamblu al lui Data1 care să verifice dependenţa funcţională Data3 Data2.
În caz contrar avem o dependenţă parţială. Ea poate apare numai în cazul dependenţelor
funcţionale cu sursă compusă (o parte a sursei-un element din cheie - poate identifica fără
ambiguităţi destinaţia).
O dependenţă funcţională Data1 Data2 este directă dacă nu există o Data3 care
angajează o dependenţă tranzitivă Data1 Data3 Data2 (Data3 este un element din
destinaţie care poate identifica un alt element din destinaţie).

4.3.2 Formele normale (FN)


Normalizarea constituie un ansamblu de reguli, introduse iniţial de E. F. Codd şi care
au menirea de a garanta coerenţa bazei de date în timpul manipulării acesteia, evitând
totodată redundanţa datelor. Sub aspect fizic, normalizarea este un important proces în faza
de concepere a structurii unei baze de date.
Sintetizate, obiectivele normalizării sunt:
 eliminarea anomaliilor la actualizare;
 diminuarea necesităţii de reorganizare frecventă a modelului utilizat;
 posibilitatea recunoaşterii reprezentării unei relaţii oarecare;
 utilizarea unor algoritmi eficienţi pentru interogarea tuplurilor.
Procesul normalizării are ca scop garantarea coerenţei baze de date în timpul
operaţiunilor de actualizare, evitând astfel redundanţele, şi având ca rezultat un model (o
formă canonică) ce respectă criteriile de definire semantică şi integritatea datelor.
Literatura de specialitate a consacrat şase forme normale /normalizate numerotate de
la unu la cinci (1FN, 2FN, 3FN, 4FN, 5FN) şi o variantă pentru 3FN numită BCNF (Boyce-
Codd NF).
Există o anumită ierarhie în regulile de normalizare. Astfel, o relaţie este în 2FN
numai dacă în prealabil ea este în 1FN. De asemenea, este în 3FN numai dacă în prealabil a
fost în 2FN. Aşadar, o relaţie în 5FN este în acelaşi timp în 4FN, în BCNF, în 3FN, în 2FN
şi în sfârşit în 1FN. O definire corectă a formelor normale se realizează plecând de la diferite
tipuri de dependenţe dintre atribute.
Ierarhia dintre formele normale şi formele de dependenţă este prezentată în figura 4.4:

100
Instrumente software pentru Administraţia Publică

1FN
2FN DF
3FN
BCNF
4FN DMV

5FN DJ

Figura 4.4 Ierarhia formelor normale şi a celor de dependenţă


Dependenţele joacă un rol important în procesul de normalizare a schemei relaţionale,
care este un procedeu de descompunere reversibil a relaţiilor, permiţând obţinerea unei
scheme relaţionale optime.

Test grilă pentru verificarea cunoştinţelor din Unitatea de studiu 4


1. In modelul relational atributul:
a) [ ] poate fi descompus in alte atribute dupa o regula prestabilita
b) [ ] trebuie sa fie atomic
c) [ ] este sinonim cu domeniul

2. Cheia primara a unei relatii:


a) [ ] identifica in mod unic orice tuplu al relatiei
b) [ ] poate avea valori identice in doua linii ale tabelei
c) [ ] este in toate cazurile formata dintr-un singur atribut
d) [ ] se alege dintre cheile candidate

3. Intr-o relatie:
a) [ ] pot exista mai multe combinatii de atribute ce confera unicitatea fiecarui tuplu
b) [ ] schema este denumita extensie
c) [ ] trebuie sa existe o cheie primara
d) [ ] schema relatiei este alcatuita din mai multe domenii

4. Considerand o relatie PACIENTI(CODPACIENT,NUME,ADRESA,LOCALITATE)


cu 5000 de pacienti ai unei policlinici, daca aplicam operatorul de proiectie pentru a
obtine lista localitatilor din care provin pacientii, vom obtine:
a) [ ] o relatie ce are cardinalitatea mai mica sau egala cu a relatiei PACIENTI
b) [ ] o relatie cu gradul egal cu cel al relatiei PACIENTI
c) [ ] o relatie cu gradul mai mic decat cel al relatiei PACIENTI
d) [ ] o relatie ce are cardinalitatea egala sau mai mare cu a relatiei PACIENTI

5. Ce se obtine prin reuniunea relatiilor R1(Matricol,Nume, Localitate)si


R2(Matricol,CodDisc,Nota) stiind ca fiecare relatie are 30 de tupluri?
a) [ ] o relatie R3 cu 60 de tupluri
b) [ ] o relatie R3 cu 30 de tupluri
c) [ ] reuniunea este imposibila

101
Baze de date relaţionale

6. Avantajele modelului relational:


a) [ ] minimizarea redundantei datelor
b) [ ] crearea unui depozit central de date
c) [ ] asigurarea integritatii si confidentialitatii datelor

Fiecare întrebare, cu răspunsurile corecte, are un punct.


Punctajul minim pentru promovarea testului este de 3 puncte.

Bibliografie selectivă

1. [Codd 1970] Codd, E., F., A relational model of the data for large shared data bancks, Commun,
ACM13,6 (June 1970)
2. [Date 1981] Date, C., J., Referencial integrity, 7th International on VLDB, Cannes, September,
1981
3. [Davidescu 2004] Davidescu, N., D., Sisteme informatice financiar-bancare, Editura All,
Bucureşti, 2004
4. [Lungu 1995] Lungu, I., ş. a., Baze de date – Organizare, proiectare şi implementare, Ed. All,
Bucureşti, 1995
5. [Moréjon 1992] Moréjon, José, Principes et conception d’une base de données relationnelle, Les
Editions d’Organisation, Paris, 1992

102
Unitatea de studiu 5

SISTEMUL DE GESTIUNE A BAZELOR DE DATE - ACCESS

Obiectivele unităţii de studiu 5:

Sisteme de gestiune a bazelor de date. Access şi SQL


1. Caracteristici generale
2. Crearea bazelor de date
3. Crearea şi exploatarea tabelelor
4. Crearea şi utilizarea formularelor
5. Interogarea bazelor de date
6. Crearea rapoartelor

Obiectivele unităţii de studiu 5

 Crearea practică a tabelelor ce compun o bază de date, concomitent cu declararea cheilor şi


restricţiilor aferente
 Actualizarea, interogarea bazelor de date şi obţinerea de formulare şi rapoarte
 Utilizarea de filtrărilor în tabelele unei baze de date

Competenţe dobândite:

 Familiarizarea cu mediul de lucru ACCESS


 Obţinerea unei baze de date, a cheilor primare şi stabilirea legăturilor permanente dintre
tabele
 Dezvoltarea de abilităţi în manipularea datelor din tabelele unei baze de date
 Interogarea bazelor de date folosind facilitaţile oferite de filtrări

Timpul mediu necesar asimilării: 35 ore


Sisteme de gestiune a bazelor de date - Acces

5.1 CARACTERISTICI GENERALE

Microsoft Access 2007 face parte din pachetul Microsoft Office. Versiunea iniţială
1.0, a fost lansată în 1992, şi a suportat o serie de îmbunătăţiri, Access 2007 fiind versiunea
care a schimbat radical interfaţa produsului.
Principalele caracteristici ale programului ACCESS sunt următoarele:
 este un SGBD relaţional şi lucrează sub SO Windows;
 este conceput pentru uz personal sau pentru mici activităţi;
 dispune de o interfaţă atractivă şi uşor de utilizat;
 este deschis comunicării cu alte SGBD-uri (FoxPro, Paradox);
 permite realizarea unor aplicaţii complexe prin utilizarea limbajului VisualBasic;
 este compatibil cu tehnologia ActiveX care permite realizarea aplicaţiilor client /server;
 permite utilizarea de adrese şi legături Internet inclusiv accesul la baze de date din reţeaua
Internet, fiind totodată un instrument util pentru publicarea informaţiilor în pagini Web;
 conţine instrumente wizard care permit utilizatorului crearea facilă a unor obiecte (peste 20
de tipuri comune de aplicaţii);
 permite comunicarea şi utilizarea bazelor de date din SQL Server(un alt produs Microsoft
care gestionează baze de date), în cadrul unei reţele de calculatoare;
 este autodocumentat prin help.
Facilităţi Access 2007:
 interfaţă grafică îmbunătăţită,
 plus de productivitate,
 aplicaţii şablon,
 punct de plecate pentru alte aplicaţii,
 posibiliăţi noi de sortare şi filtrare,
 support pentru alegerea datelor calendaristice,
 posibilitatea de a adăuga mai uşor noi obicete în cadrul bd prin intermediul meniului create,
 crearea rapidă a tabelelor în modul de vizualizare datasheet,
 adăugarea unui nou tip de date – attachment (ce stochează fotografii, grafice Obiectele unei
aplicaţii Access 2007. În SGBD-ul Access baza de date este definită ca o colecţie de obiecte:
tabele (table), formulare (form), rapoarte (report), cereri de interogare (query).
 Tabele (table) care organizează şi stochează datele propriu-zise,
 Cereri (query) generate prin comenzi de interogare SQL,
 Formuri (form) pentru introducerea, prezentarea şi modificarea datelor,

104
Instrumente software pentru Administraţia Publică

 Rapoarte (report) afişează date din una sau mai multe tabele în forma dorită de utilizator,
eventual grupate pe mai multe niveluri.
Notă! Paginile Web de acces la date, lansate în access 2003 pentru transferul
aplicaţiilor pe Internet au dispărut în Access 2007, odată cu implementarea
mecanismului de export al datelor direct în format html.

Instrumente Wizard
Microsoft Access dispune de două categorii de instrumente de tip wizard:
 orientate obiect care facilitează crearea de obiecte prin parcurgerea unor etape de
dialog între utilizator şi sistem pe baza căruia se dă forma obiectului (rapoarte,
formulare etc.);
 generale când rezolvarea unor probleme se poate face automat prin utilizarea unor
şabloane (Contact Management etc.).
Deschiderea unei sesiuni de lucru Excel se poate realiza în mai multe moduri:
- butonul Start (figura 5.1), selectând din meniul All Programs opţiunea Microsoft
Office Access 2007,
- meniul rapid, selectând comanda New şi apoi opţiunea Microsoft Office Access
2007;
- shortcut-ul de pe Desktop (figura 5.1), accesând pictograma de pe desktop, dacă a
fost creată o scurtătură Access.
Lansarea SGBD-ului Access se face în mod asemănător oricărui instrument Microsoft
Office: START →All Programs → Microsoft Office → Microsoft Office Access 2007.

Figura 5.1 Deschiderea sesiunii Microsoft ACCESS

Pentru a crea o bază de date, Access oferă mai multe modalităţi (figura 5.2):
 ca o aplicaţie complet nouă (cea mai utilizată metodă);

105
Sisteme de gestiune a bazelor de date - Acces

 pe scheletul unei baze deja existente (prin copiere);


 folosind un şablon.

Figura 5.2 Fereastra Microsoft Access pentru crearea unei noi baze de date

Spre deosebire de vechile versiuni, în Access 2007 meniurile apar abia după ce este
deschisă o bază de date, sau după ce se precizează numele unei noi baze de date şi destinaţia
în care aceasta se va salva.
Configurarea sesiunii de lucru în Access.
Ca şi alte produse software, Access permite stabilirea unor parametri de lucru pentru
sesiunea curentă şi, eventual, a sesiunilor viitoare. În acest scop, se activează din butonul
Office Button, butonul Access Options. Fereastra acestei comenzi este structurată pe
numeroase opţiuni: Popular, Current Database, Datasheet etc. În contextul care ne interesează
vizăm opţiunea Popular, care, printre altele, permite stabilirea unui director implicit în care să
fie salvate fişierele. Pentru exemplificare, din raţiuni lesne de înţeles, în zona Default
database folder:, s-a declarat ca director curent D:\2010-2011\ISAP_ID (figura 5.3).

106
Instrumente software pentru Administraţia Publică

Figura 5.3 Declararea unui director implicit

5.2 CREAREA BAZELOR DE DATE

Aşa cum s-a precizat în capitolul 4 o bază de date înseamnă cel puţin două tabele
(relaţii) între care există legături.
Pentru exemplificare va fi creată o bază de date cu informaţii privind cărţile şi cititorii
unei biblioteci, care conţine tabelele: Carti, Cititori şi Imprumuturi.
Când se creează o BD nouă se parcurg următorii paşi:
 din fereastra Getting Started with Microsoft Office Access, zona New Blank
Database, se selectează Blank Database (figura 5.2);
 se indică locaţia în care se va salva (în cazul nostru locaţia va fi folderul implicit,
declarat anterior) şi numele atribuit bazei de date (Biblioteca). Implicit, sistemul atribuie un
nume de tipul Database1, Database2 etc. şi extensia .accdb (figura 5.4);

Figura 5.4 Crearea bazei de date Biblioteca


 se selectează butonul Create şi ca efect apare o fereastră (figura 5.5) în care se
proiectează componentele BD (tabele, interogări, formuri, rapoarte).

107
Sisteme de gestiune a bazelor de date - Acces

Figura 5.5 Fereastra meniului Datasheet de creare a obiectelor bazei de date Biblioteca
Deschiderea unui baze de date se realizează în acelaşi mod ca deschiderea
oricărui fişier: meniul FILE → comanda Open şi apoi se localizează fişierul care va avea
extensia .accdb.

Figura 5.5a Deschiderea bazelor de date create anterior

5.3 CREAREA ŞI EXPLOATAREA TABELELOR

Reamintim că, respectând regulile modelului relaţional, la proiectarea unei baze de


date, trebuie avute în vedere următoarele:
 într-o bază de date tabelele pot avea statutul de părinte şi /sau copil;
 fiecare tabelă trebuie să aibă declarată o cheie primară prin care să fie identificat
fără ambiguitate orice articol /înregistrare /tuplu;
 între tabele se stabilesc relaţii (una-la-una, una-la-mai-multe);
 legătura dintre tabele se bazează pe cheia primară.

108
Instrumente software pentru Administraţia Publică

Cea mai folosită modalitate de creare a structurii tabelelor o reprezintă fereastra de


proiectare Design View. (figura 5.6). În această fereastră pot fi stabilite: numele câmpurilor,
tipul datelor şi proprietăţile acestora, cheia primară etc. Selectarea acestei opţiuni determină
activarea ferestrei Table în care se vor introduce numele şi tipul datelor (atributelor), precum
şi o serie de alte proprietăţi (figura 5.7):

Figura 5.6 Activarea opţiunii Design View

Figura 5.7 Fereastra Design de definire a structurii tabelei Carti

5.3.1 Tipuri de date


Tipurile de date, posibil de introdus în tabelele unei BD Access, se prezintă în tabelul
5.1.
Tabel 5.1 Tipuri şi subtipuri de date
Date Tip dată Descriere
Alfanumerice Text Stochează date tip text maxim 255 caractere
Memo Stochează peste 65000 caractere
Numerice Number Dispune de mai multe subtipuri, selecţie din proprietăţi (Field

109
Sisteme de gestiune a bazelor de date - Acces

Size)
Auto Completat în mod automat (folosit pentru generarea unei chei
Number unice pentru înregistrări)
Currency Format fix cu 4 zecimale (folosit pt. eliminarea erorilor de
rotunjire)
Logice Yes/No Câmp logic folosit pentru a stoca valorile yes sau no
Calendaristice Date/Time Format fix, are subtipuri ,selecţie din proprietăţi (Data/Time
Format)
Obiecte OLE object Include elemente grafice ce pot fi create cu OLE server
Hiperlegături Hiperlink Informaţie folosită ca adresă a unei pagini Web
Informaţii Lookup Creează câmpuri ce permit alegerea de valori din cadrul altor
legate Wizard tabele sau dintr-o listă de valori

Dintre proprietăţi, pentru câmpurile numerice, cele mai importante sunt:


- Formatul de afişare a datelor numerice poate fi fixat selectând din zona Field
Properties, opţiunea Field Size (figura 5.8).

Figura 5.8 Formatul de afişare a datelor

-Numărul de zecimale - Decimal Place se poate încadra între 0 şi15 sau Auto când sunt
determinate automat.
-Formatul de introducere - Input Mask conduce la fixarea unui anumit format de introducere
pentru toate datele incluse în câmp (numere de telefon, date calendaristice).
-Eticheta - Caption permite specificarea unui nume care poate fi utilizat în formule sau
pentru afişare.

110
Instrumente software pentru Administraţia Publică

-Valoare iniţială – Default Value permite la introducerea de date, umplerea automată a unui
câmp cu valoarea specificată.
-Regula de validare – Validation Rule introduce o informaţie (expresie, funcţie, constantă
etc.) care permite validarea exactităţii datelor introduse.
-Textul de validare – Validation Text reprezintă mesajul care va apare în cazul când valoarea
introdusă nu respectă regula de validare.
-Cerut (necesar) – Required stabileşte prin opţiunile Yes /No obligativitatea încărcării sau nu
cu date a unui câmp (valoarea implicită este No).
-Indexat – Indexed precizează indecşii care admit valori duplicate (duplicates OK) sau valori
unice (No duplicates). Ştergerea unui index se realizează selectând No.
În tabelul 5.2 sunt prezentate proprietăţile minimale ale atributelor tabelelor
componente ale bazei de date Biblioteca, alcătuită din trei tabele Carti, Cititori şi
Imprumuturi.
Tabelul 5.2 Proprietăţile minimale ale atributelor din tabelele bazei de date Biblioteca.
Carti
Nume câmp Tip câmp Caracteristici Observaţii
Cota Text 10 Cheie primara
Autor Text 50
Titlu Text 50
An_aparitie Number Long integer
Editura Text 50
Numar_ex Number Long integer
Pret_unitar Number Long integer
Cititori
Nume câmp Tip câmp Caracteristici Observaţii
Nr_permis Number Long Integer Cheie primara
Nume_prenume Text 35
CNP Text 50 Cheie alternativa
Adresa Text 50
Localitate Text 30
Ocupatie Text 25
Imprumuturi
Nume câmp Tip câmp Caracteristici Observaţii
Cota Text 10 Cheie primara
Nr_permis Number Long Integer Cheie primara
Data_imprumut Date/Time Short Date
Data_rest Date/Time Short Date

111
Sisteme de gestiune a bazelor de date - Acces

Stabilirea cheii primare

Figura 5.9 Stabilirea cheii primare


Exemplificăm în continuare procedura de creare a tabelei Carti. Aşa cum s-a mai
precizat, fiecare tabelă componentă a unei BD trebuie să aibă declarată o cheie primară.
Aceasta poate fi naturală, când este stabilită de utilizator prin precizarea unui atribut sau grup
de atribute din structura tabelei şi selectarea opţiunii Primary Key (din meniu contextual) sau
a pictogramei Primary Key (din linia de instrumente a meniului Design) (figura 5.9).
Dacă proiectantul bazei de date nu precizează cheia primară, se stabileşte o cheie
artificială prin folosirea unui câmp de tip AutoNumber, Access introducând automat o
valoare consecutivă la inserarea unei înregistrări (1 pentru prima înregistrare, 2 pentru a doua
înregistrare ş.a.m.d.). În astfel de cazuri cheia primară este „botezată” ID.
Access creează indecşi pentru fiecare tip de cheie primară acesta fiind motivul pentru
care la aceste atribute proprietatea Indexed este setată pe Yes (No Duplicates). Dacă cheia
primară este compusă, pentru fiecare atribut component se alege simbolul Cheii primare (din
linia de instrumente sau din meniul rapid).
Declararea cheii alternative se realizează din fereastra Design View, în zona Field
Properties, setând proprietatea Indexed cu opţiunea Yes (No Duplicates).

5.3.2 Modificarea structurii tabelelor


După definirea structuri unui tabel se poate constata că au fost omise unele elemente
absolut necesare. Introducerea sau eliminarea lor, în cazul când nu sunt necesare, se poate
realiza selectând din fereastra Database numele tabelului de modificat şi opţiunea Design
View (din meniul rapid).

112
Instrumente software pentru Administraţia Publică

Figura 5.10 Activarea opţiunii Design View

Ca efect se deschide fereastra cu structura tabelei asupra căreia putem interveni


operând modificările dorite. Se poate modifica (rearanja) şi poziţia câmpurilor (coloanelor)
apăsând pe butonul mouse-lui în partea de sus a coloanei (nume câmp) şi trăgând în poziţia
dorită, unde se eliberează butonul mouse-lui.

5.3.3 Relaţii între tabele


Relaţii între tabele se stabilesc prin conexiunea dintre anumite câmpuri existente în
tabele care împart valori comune. Relaţiile pot fi:
- relaţii permanente cerute de modelul relaţional şi stabilite după definirea tabelelor. Ele se
realizează de obicei prin corespondenţa cheie primară → cheie străină şi sunt memorate în
BD;
-relaţii temporare stabilite cu ocazia definirii unor cereri de interogare (nu se memorează în
BD).
Relaţiile stabilite între tabele pot fi de tipul: una la una (one to one), una la mai multe
(one to many) sau mai multe la una (many to one).
Pentru a stabili relaţiile dintre tabele se procedează astfel:
1. Din meniul Database Tools se selectează opţiunea Relationships (figura 5.11). Pe ecran va
apare fereastra Show Table care cuprinde tabelele BD. Cu ajutorul butonului Add se adaugă
tabelele între care se vor stabili legături / relaţii permanente (figura 5.12).
2. Pentru stabilirea relaţiei dintre două tabele este de ajuns să se realizeze operaţia drag &
drop de tragere a unui câmp dintr-o relaţie în alta (de la câmpul desemnat cheie primară din
tabela părinte spre câmpul cheie străină din altă relaţie) De exemplu, se trage câmpul Cota
din tabela /relaţia Carti spre câmpul Cota din tabela /relaţia Imprumuturi).

113
Sisteme de gestiune a bazelor de date - Acces

Figura 5.11 Opţiunea Relationships din meniul Database Tools

Figura 5.12 Fereastra Relationships pentru baza de date Biblioteca

Figura 5.13 Fereastra Edit Relationship (Carti - Imprumuturi)

Access deschide fereastra Edit Relationship (figura 5.13) în care trebuie activată
proprietatea Enforce Referenţial Integrity (forţează integritate referenţială). Între tabelele

114
Instrumente software pentru Administraţia Publică

Carti şi Imprumuturi se stabileşte o relaţie una la mai multe (One-To-Many). Câmpul Cota,
cheie primară în tabela Carti, se va lega cu acelaşi câmp din tabela Imprumuturi. Relaţia este
de tip una la mai multe deoarece pot fi mai mulţi cititori care să împrumute aceeaşi carte.
Access restricţionează adăugarea, modificarea şi /sau ştergerea în tabela părinte şi
copil astfel:
 nu se permite modificarea valorii cheii primare din tabela părinte dacă există
în tabela copil măcar o înregistrare cu care este în legătură;
 nu poate fi introdusă nici o valoare a unei chei străine dacă respectiva valoare
nu există deja ca şi cheie primară în tabela părinte.
Dacă se alege opţiunea Cascade Update Related Fields, orice modificare a unei chei
primare în tabela părinte va atrage modificarea în cascadă a tuturor cheilor străine în
înregistrările copil, iar bifând opţiunea Cascade Delete Related Records la ştergerea unei
înregistrări din tabela părinte se vor elimina automat toate înregistrările copil.

Figura 5.14 Fereastra Relationships pentru baza de date Biblioteca

În figura 5.14 sunt afişate legăturile permanente dintre tabelele bazei de date
Biblioteca.

5.3.4 Introducerea datelor în tabele


Datele pot fi introduse în tabele după deschiderea acestora în modul Open. Cea mai
simplă modalitate constă în selectarea tabelei prin dublu clic de mouse din fereastra
Database. O altă modalitate o reprezintă opţiunea Open din meniul rapid (figura 5.15).
Pentru a introduce o nouă înregistrare se foloseşte rândul marcat cu asterisc (*), numit
indicator pentru noua înregistrare (figura 5.16). Pentru modificarea unei date se selectează

115
Sisteme de gestiune a bazelor de date - Acces

celula în care se găseşte data de modificat şi se face modificarea. Salvarea se realizează


automat la închiderea ferestrei sau accesând opţiunea Save Record din meniul Record. Dacă a
fost introdusă o înregistrare greşită ştergerea ei în totalitate se realizează plasând cursorul pe
înregistrare şi, apoi, selectând din meniul Edit opţiunea Delete Record. Pentru a şterge în
întregime o coloană se foloseşte opţiunea Delete Column din meniul Edit.

Figura 5.15 Opţiunea Open pentru deschiderea tabelei Carti

Figura 5.16 Fereastra Table pentru tabela Carti

5.3.5 Sortarea datelor


Adesea, înregistrările din tabele trebuie rearanjate după anumite criterii pentru a
răspunde cerinţelor utilizatorului. Rearanjarea acestora se poate face prin operaţia de sortare
(Sort), fie crescător (Ascending), fie descrescător (Descending). De exemplu, pentru sortarea
tabelei Carti în ordinea alfabetică a autorilor se parcurg următorii paşi:
 se deschide tabela pentru vizualizarea datelor (Open, Carti);

116
Instrumente software pentru Administraţia Publică

 se poziţionează cursorul pe câmpul (coloana) după care se doreşte sortarea


(Autor);
 se activează butonul săgeată şi se alege opţiunea Sort A to Z(figura 5.17);
 se activează butonul de comandă OK.
Rezultatul sortării este prezentat în figura 5.18.

Figura 5.17 Sortarea tabelei Carti după câmpul Autor (alfabetic)

Figura 5.18 Tabela Carti sortată după câmpul Autor (crescător)

117
Sisteme de gestiune a bazelor de date - Acces

5.3.6 Filtrarea simplă a datelor


Pentru a avea acces rapid la unele date din tabelele mari se procedează la selectarea
datelor pe baza unor criterii stabilite de utilizator. Operaţiunea poartă numele de filtrare şi se
realizează folosind din meniul Home, opţiunile secţiunii Sort & Filter sau folosind opţiunile
butonului săgeată din antetul tabelei (figura 5.19). Opţiunile sunt în funcţie de tipul datelor
supuse filtrării (texte sau numere).

Figura 5.19 Modalităţi de activare a opţiunilor de filtrare

Pentru exemplificare se va obţine lista cărţilor apărute între anii 2000 şi 2003. Fiind
un câmp de tip numeric se alege opţiunea Between şi se construieşte condiţia în fereastra
Between Numbers (figura 5.20). Rezultatul este în figura 5.21.

Figura 5.20 Stabilirea condiţiei de filtrare (Anul apariţiei între 2000 şi 2003)

Figura 5.21 Rezultatul filtrării

118
Instrumente software pentru Administraţia Publică

Pentru anularea unui filtru şi reafişarea tuturor înregistrărilor se activează opţiunea


Clear filter from ... (figura 5.22)

Figura 5.22 Anularea unui filtru

5.3.7 Filtrarea avansată a datelor


Access permite filtrarea avansată prin activarea opţiunii Advanced Filter, din meniul
Home, zona Sort & Filter. Opţiunea deschide fereastra Filter structurată pe 2 zone. Zona
superioara afişează tabela sau tabelele din care vor fi extrase datele filtrate, iar în zona
inferioară se construieşte condiţia /condiţiile de filtrare. De exemplu, daca se doreşte lista
cărţilor apărute până în anul 2000, la editura Junimea, filtrul avansat va fi ca cel din figura
5.23.

Figura 5.23 Opţiunea de filtrarea avansată


Pentru aplicarea filtrului se activează opţiunea Apply Filter (figura 5.24). Rezultatul
este afişat în figura 5.25.

119
Sisteme de gestiune a bazelor de date - Acces

Figura 5.24 Opţiunea de aplicarea a unui filtru

Figura 5.25 Rezultatul filtrului avansat

5.4 CREAREA ŞI UTILIZAREA FORMULARELOR

Formularele (Forms) reprezintă interfaţa principală între utilizator şi o aplicaţie


Access şi constituie obiecte ale BD ce permit introducerea şi afişarea datelor într-o manieră
atractivă. În general, un formular este compus din trei părţi: antetul, zona de detaliu şi
subsolul. În zona de detaliu sunt prezentate datele, în antet şi subsol apar informaţii statice
care nu se modifică la editarea datelor.
Crearea unui formular
Există mai multe modalităţi de creare a formularelor. Opţiunile sunt organizate în
secţiunea Form, din meniul Create (figura 5.26).

Figura 5.26 Opţiunile de creare a formularelor

120
Instrumente software pentru Administraţia Publică

Figura 5.27 Fereastră Form Wizard


Pentru un utilizator începător cea mai comodă modalitate de obţinere a unui formular
o reprezintă opţiunea Form Wizard care oferă asistenţă pe parcursul paşilor ce trebuie
parcurşi (figura 5.27). Form Wizard creează automat un formular, permiţând utilizatorului
stabilirea datelor şi poziţia acestora în formular.
În ultima fereastră Form Wizard (figura 5.28) se introduce numele formularului
(implicit numele tabelei avute ca bază - Carţi) şi se alege modul de afişare al acestuia. Dacă a
fost selectată opţiunea Open the form to view or enter information (deschide formularul
pentru vizualizare sau introducere date) pe ecran apare formularul (Carţi) care permite
introducerea unor date noi dar şi modificarea sau vizualizarea celor introduse anterior
Operaţiunea de creare a formularului se încheie prin acţionarea butonului Finish. Rezultatul
final este prezentat în figura 5.29.

Figura 5.28.Ultima fereastră Form Wizard Figura 5.29 Fereastra formular pentru tabela
Carti

121
Sisteme de gestiune a bazelor de date - Acces

5.5 INTEROGAREA BAZELOR DE DATE

Interogările reprezintă modalităţi de extragere şi manipulare (introducere, modificare


sau ştergere) a datelor unei BD. Rezultatele interogărilor pot fi salvate ca obiecte ale BD.
În funcţie de efectul lor, interogările Access pot fi de tip:
 selecţie (Select Query),
 adăugare /inserare (Append Query),
 modificare (Update Query),
 ştergere (Delete Query),
 SQL.
Interogările se pot defini în modul de lucru asistat (prin instrumente de tip Wizard)
sau Design View (care foloseşte un limbaj bidimensional de tip grafic).
Interogarea bazei de date poate fi: simplă sau complexă.
Cea simplă conduce la vizualizarea în totalitate a conţinutului tabelei sau numai
parţial, cu ajutorul unor formulare sau rapoarte.
Interogarea complexă se realizează prin cereri explicite de interogare comportând în
general mai multe tabele ale căror date sunt filtrate prin intermediul unor criterii.
Apelarea instrumentelor de interogare se realizează din meniul Create, secţiunea
Other (figura 5.30).

Figura 5.30 Opţiuni de creare a interogărilor


Realizarea unei interogări simple (lista cărţilor din bibliotecă, cu calculul numărului
de exemplare pentru fiecare titlu) se poate face apelând Query Wizard după care se parcurg
etapele:
 din fereastra New Query (figura 5.31) se alege opţiunea Simple Query Wizard şi se
acţionează butonul OK. Ca efect apare fereastra Simple Query Wizard (figura 5.32);

122
Instrumente software pentru Administraţia Publică

Figura 5.31 Fereastra New Query

Figura 5.32 Fereastra (1) Simple Query Wizard Figura 5.33 Fereastra (2) Simple Query Wizard

 din fereastra Simple Query Wizard în lista Tables /Queries se stabileşte tabela
pentru care se realizează filtrarea, iar din zona Available Fields sunt selectate şi mutate în
zona Selected Fields câmpurile care vor apărea în filtru (figura 5.33). Acţionarea butonului
Next are ca efect o nouă fereastră Simple Query Wizard; în această fereastră se păstrează
formatul de afişare detaliat sau se optează pentru o afişare în sumar a rezultatului.
Dacă se optează pentru Summary se deschide fereastra Summary Options, în care pot
fi aplicate operaţii statistice asupra câmpurilor numerice (figura 3.34).

123
Sisteme de gestiune a bazelor de date - Acces

Figura 5.34 Calculul numărului de exemplare din fiecare titlu de carte

În ultima fereastră Simple Query Wizard (figura 5.35) se stabileşte modalitatea de


deschidere ulterioară şi se acţionează butonul Finish pentru a obţine rezultatul interogării
(figura 5.36).

Figura 5.35 Fereastra (3) Simple Query Wizard

Se poate construi o interogare simplă plecând de la o interogare existentă, procedeul


este identic, doar că suportul nu va fi o tabelă ci o interogare.
Se pot realiza interogări simple şi pe mai multe tabele. Pentru aceasta se procedează
în mod asemănător interogărilor dintr-o singură tabelă. În prima fereastra Simple Query
Wizard câmpurile se vor selecta pe rând din tabele diferite (schimbând tabela în lista
Tables/Queries). Succesiv, din zona Available Fields, din fiecare tabelă, vor fi selectate şi
mutate în zona Selected Fields câmpurile care dorim să apară în filtru.

124
Instrumente software pentru Administraţia Publică

Figura 5.36 Rezultatul interogării simple

Rezultatul unui astfel de filtru în care s-au folosit trei tabele Carti, Cititori şi
Imprumuturi este prezentat în figura 5.37. Au fost preluate câmpurile Nume_prenume şi
Ocupatie din tabela Cititori, Autor şi Titlu din tabela Carti Data_imprumut din tabela
Imprumuturi.

Figura 5.37 Rezultatul interogării simple din mai multe tabele

Pentru a crea o cerere de interogare folosind modul Design view se parcurg paşii:
- din meniul Create, secţiunea Other se selectează butonul Design view ;
- în fereastra Query (structurată în două zone) este deschisă fereastra Show Table
care conţine lista tabelelor bazei de date Biblioteca (figura 5.38);

125
Sisteme de gestiune a bazelor de date - Acces

Figura 5.38 Ferestrele Query şi Show Table

- din fereastra Show Table se selectează prin dublu clic tabela /tabelele care vor
participa la interogare şi care vor apare în zona de sus a ferestrei Query;
- în zona de jos, numită grilă de proiectare (design grid) se va construi cererea din
punct de vedere structural şi funcţional;
- câmpurile din structura unei cereri pot fi preluate din tabele sau pot fi calculate;
- printr-o cerere de interogare câmpurile pot fi ordonate crescător sau descrescător
după unul sau mai multe criterii prin caseta Sort (Ascending /Descending) din
grilă. Dacă se specifică mai multe câmpuri de ordonare operaţiunea se execută
începând cu primul câmp din stânga;
- dacă se doreşte introducerea unor criterii de selecţie acestea vor fi plasate în grila
de interogare în caseta Criteria. Principalele criterii sunt introduse prin:
 utilizarea operatorilor de comparaţii: <,>,<=,>=,<>,= ;
 apartenenţa la un interval: BETWEEN valoare-inferioară AND valoare-
superioară ;
 apartenenţa la o dată indicată printr-o mască (şablon): LIKE „mască”; în mască
pot să apară carterele: „*” folosit pentru oricâte caractere şi caracterul ”?” care
înlocuieşte un singur caracter;
 apartenenţa la o listă de valori: IN(valoare1, valoare2,..valoaren);
 utilizarea operatorilor de negaţie: NOT valoare;
 selectarea înregistrărilor care conţin sau nu valori: NOT NULL, IS NOT NULL
sau NULL, IS NULL;
 selecţia după o dată relativă la data curentă: DATE().

126
Instrumente software pentru Administraţia Publică

Pentru exemplificarea realizării unei interogări s-a folosit baza de date Biblioteca cu
tabelele Carti, Cititori, Imprumuturi obţinându-se lista cititorilor care au restituit cărţile în
intervalul 10-03-2009 şi 30-06-2009 (figura 5.39).

Figura 5.39 Fereastra Select Query - cerere de interogare

Notă: Datele calendaristice în Access se încadrează de caracterul #.


O interogare se execută cu opţiunea Datasheet View, din meniul rapid sau cu Run din
meniul Design (figura 5,40).

Figura 5.40 Opţiunile de executare a interogării


Rezultatul interogării este redat în figura 5.41

127
Sisteme de gestiune a bazelor de date - Acces

Figura 5.41 Foaia rezultat aferentă cererii de interogare

5.6 CREAREA RAPOARTELOR

Vizualizarea datelor dintr-o bază de date se poate realiza prin intermediul foilor de
date, a formularelor şi a situaţiilor finale, numite generic rapoarte. Sursa rapoartelor o
constituie tabelele sau interogările.
Crearea rapoartelor în Access permite gruparea datelor şi prezentarea acestora într-un
anumit format şi o anumită structură, în funcţie de cerinţele utilizatorului pentru a-i servi la
informare sau pentru fundamentarea deciziilor. În rapoarte se pot obţine totaluri şi subtotaluri
(după anumite criterii), se pot include subformulare grafice şi obiecte de tip OLE.
Un raport este structurat în: antet şi subsol de raport (Report Header, Report Footer),
antet şi subsol de pagină (Page Header, Page Footer ), secţiunea Detail care cuprinde datele
pentru fiecare înregistrare precum şi antet şi subsol de grup. Controalele care apar în corpul
raportului pot fi: independente, dependente (preluate din tabele /interogări) şi calculate.
Crearea rapoartelor se poate realiza folosind opţiunile din secţiunea Report a meniului
Create (figura 5.42).

Figura 5.42 Opţiuni de creare a rapoartelor

Pentru tabela curentă se poate obţine un raport rapid folosind opţiunea Report. În
figura 5.43 este obţinut un raport rapid pentru tabela Carti.

128
Instrumente software pentru Administraţia Publică

Figura 5.43 Raport rapid pentru tabela Carti


Folosirea opţiunii Report Wizard asigură realizarea unui raport pe baza uneia sau mai
multor tabele sau interogări, permiţând utilizatorului să-şi selecteze câmpurile.
La selectarea opţiunii Report Wizard pe ecran apare fereastra Report Wizard (figura
5.44), de unde se poate selecta tabela din care se vor extrage câmpurile (zona Table/Queiesy),
zona câmpurilor tabelei selectate (Available Fields) şi zona câmpurilor selectate pentru raport
(Selected Fields). Trecerea de la un pas la altul se face prin acţionarea butonului Next.
Gruparea datelor se poate realiza selectând un câmp (de grupare) din fereastra Report
Wizard. În cazul exemplului a fost selectat câmpul Autor (figura 5.45).

Figura 5.44 Figura 5.45


Fereastra Report Wizard (1-selecţie câmpuri) Fereastra Report Wizard (2-grupare)

129
Sisteme de gestiune a bazelor de date - Acces

Fereastra Report Wizard asociată celei de a treia etape (figura 5.46) permite sortarea
datelor din raport, după cel mult patru câmpuri. A fost aleasă sortarea descrescătoare, după
câmpul Pret_unitar.
Următoarea fereastră permite selectarea opţiunilor de aranjare pentru raport (figura
5.47).

Figura 5.46 Fereastra Report Wizard Figura 5.47 Fereastra Report Wizard
(3-sortare/opţiuni de calcul predefinite) (4-opţiuni de aranjare a datelor)

Stilul raportului se alege din fereastra etapei a cincea (figura 5.48).


Ultima fereastră permite denumirea raportului şi a modului de afişare (figura 5.49).

Figura 5.48. Fereastra Report Wizard Figura 5.49 Fereastra Report Wizard
(5-selectarea stilului) (6-precizarea numelui şi a modului de afişare)

Rezultatul final este prezentat în figura 5.50.

130
Instrumente software pentru Administraţia Publică

Figura 5.50 Fereastra rezultat raport

Într-un raport pot fi folosite date din mai multe tabele. În astfel de situaţii este de
preferat ca în prealabil să se realizeze o interogare şi pe baza ei să se obţină raportul cu
grupările şi sortările dorite.

Teste grilă pentru verificarea cunoştinţelor din Unitatea de studiu 5


1. In ACCESS cheia primara poate fi:
a) [ ] naturala cand valoarea atributelor ce o compun sunt stabilite de utilizator
b) [ ] automata cand este fixata automat de sistem prin alegerea unor cimpuri din structura
tabelei
c) [ ] artificiala cand se foloseste un camp de tip AutoNumber

2. In ACCESS restrictia de integritate referentiala se instituie prin bifarea optiunii:


a) [ ] Cascade Delete Related Record
b) [ ] Enforce Referential Integrity
c) [ ] Cascade Update Related Fields

3. Cu referire la rapoartele ACCESS, care dintre urmatoarele afirmatii sunt adevarate?


a) [ ] In cadrul rapoartelor pot fi introduse noi campuri obtinute pe baza unor expresii
aritmetice
b) [ ] raportul contine obligatoriu toate datele din tabelul sursa
c) [ ] raportul poate fi prezentat si in "sumar" numai cu totaluri si subtotaluri
d) [ ] datele din raport pot fi grupate dupa un anumit camp fixat la realizarea raportului

131
Sisteme de gestiune a bazelor de date - Acces

4. In ACCESS proprietatea Default Value conduce la:


a) [ ] fixarea unui anumit format de introducere pentru toate datele incluse in camp
b) [ ] umplerea automata a unei camp cu valoarea specificata
c) [ ] stabilirea obligativitatii de introducere de date
d) [ ] fixarea unui nume pentru camp

5. In ACCESS, optiunea Cascade Update Related Fields:


a) [ ] nu permite modificarea cheii primare in tabela parinte daca exista macar o
inregistrare in tabela copil
b) [ ] orice modificare a cheii primare in tabela parinte atrage modificarea in tabela copil
a cheii straine corespunzatoare
c) [ ] stergerea unei inregistrari in tabela parinte atrage automat eliminarea inregistrarilor
corespunzatoare din tabela copil

6. Care din următoarele sunt adevărate despre operaţiunea de creare a rapoartelor în


Access?
a) [ ] permite gruparea datelor
b) [ ] prezentarea datelor într-un anumit format şi structură, conform cerinţelor
utilizatorului
b) [ ] servesc la informare utilizatorului sau pentru fundamentarea deciziilor
d) [ ] în rapoarte nu se pot obţine totaluri şi subtotaluri (după anumite criterii) şi nu se pot
include subformulare grafice sau obiecte de tip OLE.

Fiecare întrebare cu răspunsurile corecte are un punct.


Punctajul minim pentru promovarea testului este de 3 puncte.

132
Unitatea de studiu 6

LIMBAJUL DE INTEROGARE SQL

Obiectivele unităţii de studiu 6:

1. Noţiuni de bază privind SQL


2. Crearea şi executarea unei interogări SQL
3. Interogarea unei singure tabele
4. Interogarea mai multor tabele
5. Funcţii agregat

Obiectivele unităţii de studiu 6

 Expunerea, în termeni generali, a problematicii standardizării limbajelor de lucru cu bazele de


date. Punerea în evidenţă a importanţei SQL în lumea bazelor de date;
 Prezentarea principalelor tipuri de date ce pot fi gestionate prin SQL şi a restricţiilor ce pot fi
declarate;
 Expunerea graduală a principalelor clauze ale interogărilor.

Competenţe dobândite:

 Cunoaşterea caracteristicilor limbajelor de interogare;


 Cunoaşterea categoriilor de instrumente oferite de SQL pentru interogarea datelor;
 Familiarizarea cu principalele clauze şi funcţii ale frazei SELECT;
 Crearea deprinderilor pentru exploatarea facilităţilor SQL.

Timpul mediu necesar asimilării: 22 ore


Limbajul de interogare SQL

6.1 Noţiuni de bază privind SQL


Unul din obiectivele SGBD-urilor relaţionale îl reprezintă crearea unui limbaj simplu,
neprocedural care să poată fi utilizat de către neinformaticieni pentru interogarea şi
actualizarea tabelelor şi bazelor de date. SGBD-urile actuale dispun de un limbaj de
interogare a datelor, de tip SQL, sau cel puţin câteva instrucţiuni SQL, care permit
utilizatorilor să obţină rapid şi simplu informaţiile dorite.
SQL este un limbaj relaţional cu o triplă dimensiune :
• defineşte şi modifică schema unei baze de date relaţionale,
• interoghează şi modifică (neprocedural) o bază de date relaţională,
• asigură controlul, securitatea şi confidenţialitatea bazei.
Dintr-o altă perspectivă, SQL poate fi considerat atât un limbaj interactiv cât şi un
limbaj integrat (încapsulat-embedded) într-un limbaj de programare pentru dezvoltarea de
aplicaţii.
SQL permite descrierea, interogarea şi manipularea tabelelor şi datelor. Este destinat
atât pentru neinformaticieni pentru rezolvarea cererilor foarte simple, cât şi pentru
informaticieni pentru dezvoltarea sau utilizarea bazelor de date. Aceştia din urmă folosesc
SQL ca gestionar de date pentru dezvoltări în limbaje procedurale (C, COBOL etc.) şi pentru
îndeplinirea rolului de administrator de date.
Limbajul SQL permite, în principal:
• crearea schemei bazei de date (definirea structurii logice şi fizice a bazei de
date);
• adăugarea /ştergerea relaţiilor /tabelelor în baza de date;
• adăugarea /ştergerea de atribute în schema unei relaţii existente;
• optimizarea bazei de date prin indexare;
• stabilirea de restricţii de integritate a bazei de date.
O bază de date relaţională de tip SQL conţine: relaţii, vizualizări (relaţii vizuale
formate din anumite atribute şi tupluri selectate din una sau mai multe relaţii), sinonime
(nume alternative asociate relaţiilor şi respectiv vizualizărilor), indecşi (folosiţi pentru
optimizarea accesului la date şi a interogărilor, păstrarea integrităţii bazei de date), cataloage
(pentru a descrie mulţimea relaţiilor din fiecare bază de date precum şi conţinutul lor).
SGBD-ul Access acceptă utilizarea limbajului de interogare SQL. Caracteristicile
generale ale acestui limbaj au fost prezentate în cadrul capitolului 5.
Dialectul Access conţine unele particularităţi în raport cu ANSI SQL, fiind conceput
mai mult pentru crearea interogărilor de selecţie.
În cadrul instrucţiunilor SQL-Access trebuie respectate strict reguli de sintaxă ca:
 o instrucţiune SELECT se încheie cu „ ; ”;

134
Instrumente software pentru Administraţia Publică

 parantezele drepte se folosesc pentru a încadra numele câmpurilor, când


acestea conţin spaţii sau simboluri neacceptate de SQL;
 pentru a evidenţia valori de tip dată /timp se foloseşte caracterul # care
încadrează data;
 inegalităţile din cadrul clauzelor se specifică folosind „<>”;
 valorile de tip şir de caractere se marchează prin ghilimele sau apostrof;
 pentru delimitarea parametrilor dintr-o listă se foloseşte virgula;
 dacă se utilizează câmpuri din mai multe tabele modalitatea de afişare este:
nume-tabelă.nume-câmp;
 simbolurile „?” şi „*” au aceleaşi funcţii ca şi în specificatoarele de fişiere.

6.2 Crearea şi executarea unei interogări SQL


Instrucţiunile de selecţie permit interogarea datelor conţinute în tabele sau din cadrul
interogărilor realizate în prealabil. Ele pot fi simple sau complexe şi au în conţinut fraza
SELECT prin care se regăsesc şi se afişează informaţiile dorite.
Pentru definirea unei interogări se foloseşte fraza SELECT cu următoarea structură
de bază:
SELECT [DISTINCT] [domeniu] listă câmpuri  * [AS nume ]
FROM nume-tabel1, nime-tabel2,...
[WHERE condiţie-de-selecţie]
[ORDER BY câmp-criteriu[ASC|DSC]]
[GROUP BY câmp-de grupare]
[HAVING criteriu de grupare]
Din această sintaxă sunt obligatorii numai clauzele SELECT şi FROM, celelalte
sunt opţionale şi permit „rafinarea” operaţiei de selecţie.
Domeniu indică zona asupra căreia se va aplica selecţia:
Listă câmpuri cuprinde câmpurile ce vor apare în interogare (câmpuri din tabele,
câmpuri obţinute din evaluarea expresiilor (calculate prin aplicarea funcţiilor standard); dacă
în locul listei de câmpuri apare simbolul *, în tabela rezultat vor fi incluse toate coloanele
(atributele /câmpurile) din toate tabelele /relaţiile specificate în clauza From. În tabela
rezultat nu este obligatoriu ca un atribut să prezinte nume identic cu cel din tabela din clauza
From. Schimbarea numelui se realizează prin opţiunea AS;
Clauza DISTINCT. Uneori rezultatul interogării „încalcă” regulile modelului
relaţional admiţând două sau mai multe linii/ tupluri identice. Pentru eliminarea acestora se
utilizează clauza Distinct.
Clauza FROM indică numele tabelei /tabelelor ce vor forma suportul interogării;

135
Limbajul de interogare SQL

Clauza WHERE indică criteriul - condiţia de interogare. Este o clauză opţională şi nu


operează cu funcţii totalizatoare. Când clauza WHERE este omisă, se consideră implicit
condiţia îndeplinită.
Clauza ORDER BY permite ordonarea rezultatului după unul sau mai multe câmpuri
crescător (ASC) sau descrescător (DSC). Clauza este opţională;
Clauza GROUP BY precizează câmpul de grupare a înregistrărilor;
Clauza HAVING indică criteriul aplicat grupului format prin clauza GROUP BY.
Pentru exemplificarea frazelor SELECT se va folosi baza de date Biblioteca (figura
6.1).

Figura 6.1 Baza de date Bibliotecă


Conţinutul celor 3 tabele este prezentat în figurile 6.2 – 6.4.

Figura 6.2 Tabela Carti

136
Instrumente software pentru Administraţia Publică

Figura 6.3 Tabela Cititori

Figura 6.4 Tabela Imprumuturi

În interogări, pe lângă operatorii aritmetici (+,-,*,/) şi de comparare (<,>,<=,>=,<>)


se folosesc şi operatori predicativi ai selecţiei (BETWEEN, LIKE, IN, IS NULL). Trebuie
făcută precizarea că valorile de comparat trebuie să aparţină unor tipuri de date compatibile.
Sintaxa condiţiilor care intervin în interogări poate conţine:
<expr_1> <operator relaţional> <expr_2>
<expr_1> [NOT] BETWEEN <expr_2> AND <expr_3>
<expr> [NOT] IN <listă expresii>
<nume_câmp> [NOT] LIKE <şir_caractere>
<nume_câmp> IS [NOT] NULL
Operatorul BETWEEN permite specificarea unui domeniu pentru o condiţie de
căutare. Limitele intervalului în care se realizează compararea sunt legate prin operatorul
logic AND.

137
Limbajul de interogare SQL

Operatorul LIKE se poate aplica datelor de tip şir de caractere, comparând un câmp
text cu un literal (constantă de tip text). Literalul se defineşte ca o mască în care se pot folosi
caracterele speciale % şi _. Semnul “%” determină înlocuirea unui şir de caractere de
lungime variabilă, în timp ce semnul “_” înlocuieşte (substituie) un singur caracter. Aceste
două caractere pot fi utilizate şi împreună.
Operatorul IN permite ca şi operatorul BETWEEN simplificarea condiţiei de căutare.
El testează dacă valoarea unui atribut specificat în lista de atribute din clauza WHERE se
potriveşte uneia din valorile listei specificate în predicatul IN.
Operatorul IS NULL oferă facilităţi de selectare a tuplurilor ale căror valori ale
atributelor au valoarea NULL. Facem precizarea că o valoare nulă este o valoare nedefinită şi
nu se poate confunda cu valoarea zero (pentru câmpurile numerice) sau cu valoarea “spaţiu”
(pentru câmpurile de tip şir de caractere).
O frază SELECT, pentru o interogare din mai multe tabele, trebuie să precizeze şi
legătura /legăturile dintre tabele. Aceste legături se precizează fie în clauza FROM prin
operatorul INNER JOIN, fie în clauza WHERE prin operatorul ON. Legătura permanentă este
reprezentată de egalitatea, la nivel de tuplu /înregistrare, dintre valoarea cheii primare din
tabela părinte şi valorile cheii străine din tabela /tabelele copil.
Folosind baza de date Biblioteca exemplificăm în continuare facilităţile de interogare
oferite de SQL Access.

6.3 Interogarea unei singure tabele


Editarea frazelor SELECT se realizează în fereastra SQL View după ce a fost activat
modul Design Query. Opţiunea SQL View poate fi selectată din meniul Design (figura 6.5),
sau meniul rapid al ferestrei Query (figura 6.6).

Figura 6.5 Opţiunea SQL View din meniul Design Figura 6.6 Opţiunea SQL View din
meniul rapid

1. Care sunt cărţile care au fost editate după anul 2000?

138
Instrumente software pentru Administraţia Publică

Fraza SELECT pentru această interogare este în figura 6.7, iar rezultatul interogării în
figura 6.8.

Figura 6.7 Fraza SELECT pentru interogarea 1

Figura 6.8 Rezultatul interogării 1

Din raţiuni de timp şi spaţiu în continuare acest paragraf va conţine:


a. enunţul interogării,
b. fraza SELECT,
c. rezultatul interogării.

a.2. Care sunt cărţile care au apărut la editura Polirom, după anul 2003?
b.2
SELECT Autor,Titlu,An_aparitie,Editura
FROM Carti
WHERE An_aparitie>=2003) AND Carti.Editura="Polirom";

139
Limbajul de interogare SQL

c.2

a.3. Să se obţină lista cititorilor studenţi care domiciliază în Iaşi.

b.3
SELECT Nume_prenume, Adresa, Localitate, Ocupatie
FROM Cititori
WHERE Cititori.Localitate="Iasi" AND Cititori.Ocupatie="Student";
c.3

a.4. Să se stabilească valoarea (pret unitar * nr exemplare) cărţilor din bibliotecă.

b.4
SELECT cota, Autor, Titlu, An_aparitie, Editura, Numar_ex, Pret_unitar,
[Numar_ex]*[Pret_unitar] AS Valoare
FROM Carti;
c.4

140
Instrumente software pentru Administraţia Publică

6.4 Interogarea mai multor tabele


În cazul interogării mai multor tabele este necesară precizarea legăturilor
permanente şi calificarea câmpurilor cu nume identice, aflate din tabele diferite.
Calificarea constă în prefixarea numelui de câmp cu numele tabelei din care face parte
(exemplu: carti.cota, imprumuturi.cota).

a.5. Să se obţină lista elevilor care au împrumutat cărţi (Nume, Localitate, Autor, Titlu,
Data împrumutului şi Data restituirii).

b.5
SELECT Cititori.Nume_prenume, Cititori.Localitate, Cititori.Ocupatie,
Carti.Autor, Carti.Titlu, Imprumuturi.Data_imprumut, Imprumuturi.Data_rest
FROM Cititori INNER JOIN (Carti INNER JOIN Imprumuturi ON Carti.cota
= Imprumuturi.Cota) ON Cititori.Nr_permis = Imprumuturi.Nr_permis
WHERE Cititori.Ocupatie="Elev";
c.5

a.6. Să se stabilească numărul cărţilor împrumutate de fiecare cititor.

b.6
SELECT Cititori.Nr_permis, Cititori.Nume_prenume, Count(Carti.Autor) AS
Nr_carti_imprumutate
FROM Cititori INNER JOIN (Carti INNER JOIN Imprumuturi ON Carti.cota
= Imprumuturi.Cota) ON Cititori.Nr_permis = Imprumuturi.Nr_permis
GROUP BY Cititori.Nr_permis, Cititori.Nume_prenume;

141
Limbajul de interogare SQL

c.6

a.7. Să se afişeze lista cititorilor care au împrumutat cărţi în luna martie 2009.

b.7
Pentru această interogare se foloseşte funcţia Month() care extrage, dintr-o dată
calendaristică, luna specificată prin numărul acesteia (1 pentru ianuarie, 2 pentru
februarie etc.).
SELECT Cititori.Nume_prenume, Cititori.Nr_permis, Carti.Autor,
Carti.Titlu, Imprumuturi.Data_imprumut
FROM Cititori INNER JOIN (Carti INNER JOIN Imprumuturi ON
Carti.cota = Imprumuturi.Cota) ON Cititori.Nr_permis =
Imprumuturi.Nr_permis
WHERE Month([data_imprumut])=3;
c7

a.8. Să se afişeze lista cititorilor care au avut de restituit cărţi între 18 şi 30 martie
2009.

În interogările în care sunt precizate date calendaristice, valorile acestora sunt


delimitate de semnul #.

142
Instrumente software pentru Administraţia Publică

b.8
SELECT Cititori.Nr_permis, Cititori.Nume_prenume, Carti.Autor, Carti.Titlu,
Imprumuturi.Data_imprumut, Imprumuturi.Data_rest
FROM Cititori INNER JOIN (Carti INNER JOIN Imprumuturi ON Carti.cota
= Imprumuturi.Cota) ON Cititori.Nr_permis = Imprumuturi.Nr_permis
WHERE Imprumuturi.Data_rest BETWEEN #3/18/2009# And #3/30/2009#;

c.8

6.3 Funcţii agregat

Pentru a îmbunătăţi capacitatea de manipulare a informaţiilor pot fi folosite o serie de


funcţii puse la dispoziţia utilizatorilor de către SQL. Cel mai adesea sunt folosite funcţiile de
agregare (totalizatoare sau de grup), funcţiile pentru dată calendaristică şi funcţiile
predefinite. Practica a demonstrat că fraza SELECT poate fi aplicată mai ales asupra:
atributelor dintr-o relaţie; rezultatului efectuării unor calcule asupra atributelor prin
utilizarea:
Funcţiile agregat folosite sunt COUNT, AVG, MAX, MIN, SUM.
Funcţia COUNT(*) returnează numărul de tupluri /înregistrări care satisfac cererea
de interogare.
Funcţia AVG(atribut) returnează valoarea medie a atributului care satisface cererea
de interogare.
Funcţia MAX(atribut) are rolul de a returna valoarea maximă a unui atribut care
satisface cererea de interogare.
Funcţia MIN(atribut) are rolul de a returna valoarea minimă a unui atribut care
satisface cererea de interogare.
Funcţiile de mai sus pot fi utilizate şi împreună, combinarea lor asigurând interogări
mai complexe, cerute de utilizator. Aceste funcţii pot fi aplicate şi asupra grupurilor de
tupluri obţinute prin clauza GROUP BY.

a.9. Să se stabilească valoarea (pret unitar * nr exemplare) cărţilor din bibliotecă.

143
Limbajul de interogare SQL

b.9
SELECT SUM([numar_ex]*[pret_unitar]) AS valoare_totala
FROM Carti;

c.9

a.10. Să se stabilească numărul total al cărţilor (exemplarelor) din bibliotecă.

b.10
SELECT SUM(Carti.Numar_ex) AS Numar_total_ex
FROM Cititori INNER JOIN (Carti INNER JOIN Imprumuturi ON Carti.cota
= Imprumuturi.Cota) ON Cititori.Nr_permis = Imprumuturi.Nr_permis;
c.10

a.11. Să se stabilească preţul mediu al unei cărţi din bibliotecă.

b.11
SELECT AVG(Carti.Pret_unitar) AS Pret_unitar_mediu
FROM Carti;

144
Instrumente software pentru Administraţia Publică

c.11

a.12. Care este cel mai mare preţ şi cel mai mic preţ al cărţilor din bibliotecă?
Rezultatul va grupa datele după editura în care au apărut cărţile.

b.12
SELECT Max(Carti.Pret_unitar) AS MaxOfPret_unitar, Min(Carti.Pret_unitar)
AS MinOfPret_unitar, Carti.Editura
FROM Carti
GROUP BY Carti.Editura;
c.12

a.13. Care este cel mai mare preţ şi cel mai mic preţ al cărţilor din bibliotecă, care au
apărut în editura Polirom, după anul 2000?

b-13
SELECT Max(Carti.Pret_unitar) AS MaxOfPret_unitar, Min(Carti.Pret_unitar)
AS MinOfPret_unitar, Avg(Carti.Pret_unitar) AS AvgOfPret_unitar, Carti.Editura
FROM Carti
GROUP BY Carti.Editura, Carti.Editura
HAVING Carti.Editura="Polirom" AND Carti.Editura>="2000";

c-13

145
Limbajul de interogare SQL

a.14. Care sunt autorii pentru care în bibliotecă există mai mult de 2 titluri?

b.14
SELECT Carti.Autor, COUNT([titlu]) As [Nr titluri pe autor]
FROM Carti
GROUP BY [autor]
HAVING COUNT([titlu])>=2;

c.14

a.15. Câte titluri a publicat fiecare editură?

b.15
SELECT Carti.Editura, COUNT([titlu]) AS [Titluri pe editura]
FROM Carti
GROUP By [editura];
c.15

a.16. Câţi cititori sunt în fiecare localitate?

b.16

SELECT localitate, COUNT([nr_permis]) AS [Nr cititori pe localiati]


FROM Cititori
GROUP BY [localitate]

146
Instrumente software pentru Administraţia Publică

c.16

a.17 Câţi cititori sunt studenţi?

b.17
SELECT Count([nr_permis]) AS [Nr studenti]
FROM Cititori
WHERE Cititori.Ocupatie="Student";

c.17

Interogări de adăugare - INSERT INTO

a.18. Să se adauge o nouă carte (Cota: 12157, Autor: Mansfield Ron, Titlu: Microsoft
Windows Vista, Anul apariţiei: 2008, Editura: Niculescu, Nr de exemplare: 5, Pret
unitar: 49) care este împrumutata la data de 2 mai 2009, de un nou cititor (Nr permis:
12130, Nume şi prenumele Vernescu Mihai, CNP: 2870623056318, Str. Macazului, nr.
9A, Localitatea: Iaşi, Ocupaţia: Student).

b.18
INSERT INTO Cititori (Nr_permis, Nume_prenume, CNP, Adresa, Localitate,
Ocupatie )
SELECT 12130 AS Expr1, "Vernescu Mihai" AS Expr2, 2870623056318 AS
Expr3, "Str. Macazului, nr. 9A" AS Expr4, "Iasi" AS Expr5, "Student" AS Expr6;

INSERT INTO Carti (cota, Autor, Titlu, An_aparitie, Editura, Numar_ex,


Pret_unitar )

147
Limbajul de interogare SQL

SELECT 12157 AS Expr1, "Mansfield Ron" AS Expr2, "Microsoft Windows


Vista" AS Expr3, 2008 AS Expr4, "Niculescu" AS Expr5, 5 AS Expr6, 49 AS
Expr7;

INSERT INTO Imprumuturi (Cota, Nr_permis, Data_imprumut, Data_rest )


SELECT 12157 AS Expr1, 12130 AS Expr2, #5/2/2009# AS Expr3, #5/17/2009#
AS Expr4;
c.18

Interogări de ştergere - DELETE

a.19. Să se şteargă din tabela Carti cartea care are cota 12154. Cum se modifică
restricţiile de integritate referenţială pentru a şterge automat şi înregistrările
corespunzătoare din tabela Imprumuturi?

b.19
DELETE Carti.cota
FROM Carti
WHERE Carti.cota="12154";

c.19

148
Instrumente software pentru Administraţia Publică

Pentru ştergerea automată a înregistrărilor corespunzătoare din tabela


Imprumuturi în fereastra Edit Relationsheep trebuie bifată opţiunea Cascade Delete
Related Records.

a.20. Să se şteargă din tabela Cititori toţi elevii din Iaşi.

b.20
DELETE Cititori.Localitate, Cititori.Ocupatie
FROM Cititori
WHERE Cititori.Localitate="iasi" AND Cititori.Ocupatie="elev";

c.20

Interogări de modificare (actualizare) - UPDATE

a.21. Să se actualizeze preţul unitar al tuturor cărţilor , prin majorare cu 10%.

b.21
UPDATE Carti SET Carti.Pret_unitar =[pret_unitar] + [pret_unitar]*0.10/1.10;

149
Limbajul de interogare SQL

c.21

a.22. Să se actualizeze preţul unitar al tuturor cărţilor de la editura Polirom, prin


majorare cu 15%.

b.22
UPDATE Carti SET Carti.Pret_unitar = [pret_unitar]+[pret_unitar]*0.15 / 1.15
where editura="Polirom";

c.22

După cum s-a observat în exemplele de mai sus, rezultatul unei fraze SELECT este o
tabelă în care vor fi grupate /regrupate liniile tabelei /tabelelor specificate prin FROM şi care
au aceleaşi valori pentru câmpul sau câmpurile specificate prin GROUP BY. Practic, se
generează câte un tuplu pentru fiecare grup de tupluri. Deoarece clauza GROUP BY
grupează tuplurile după valoarea unor atribute /câmpuri se introduc restricţii în ceea ce
priveşte lista de atribute ce apar în fraza SELECT. Atributele care pot apărea pot fi:
- atribute care alcătuiesc baza pentru grupare (cele specificate în clauza GROUP BY);
- funcţii agregat (AVG(), SUM(), MAX(), MIN(), COUNT() ) aplicate asupra atributelor.

150
Instrumente software pentru Administraţia Publică

Clauza HAVING este legată de clauza GROUP BY şi permite introducerea unor


restricţii aplicate asupra unui grup de tupluri. Clauza HAVING poate conţine una sau mai
multe condiţii legate prin operatorii logici AND şi /sau OR. Conţinând condiţii, clauza
HAVING mai este numită şi clauză WHERE pentru grupuri de tupluri.

Teste grilă pentru verificarea cunoştinţelor din Unitatea de studiu 6


1. SQL permite:
a) [ ] interogarea bazelor de date
b) [ ] definirea structurii tabelelor si a restrictiilor asupra datelor
c) [ ] analiza bazelor de date
d) [ ] actualizarea datelor tabelelor bazei de date

2. Ce se obtine prin urmatoarea fraza SELECT?


SELECT Numestudent, AVG(Nota) AS Media
FROM Student, Examen
WHERE Student.Matricol=Examen.Matricol AND Nota>=5
GROUP BY Matricol HAVING AVG(Nota)>7 AND COUNT(*)>=4;

a) [ ] media notelor la examene pentru studentii care au promovat cel putin 4 examene si
au media mai mare decat 7
b) [ ] media notelor la examene pentru studentii care au promovat cel putin 4 examene si
au note mai mari decat 7
c) [ ] situatia notelor la examene pentru studentii care au promovat toate examenele si au
media mai mare decat 7

3. Care dintre urmatoarele fraze SELECT au ca rezultat numarul de studenti din fiecare
judet?
a) [ ] SELECT Judet COUNT(*) AS Nrst FROM Student, Localit
WHERE Student.Codp=Localit.Codp;
b) [ ] SELECT Judet COUNT(*) AS Nrst FROM Student, Localit
WHERE Student.Codp=Localit.Codp GROUP GY Judet;
c) [ ] SELECT Judet COUNT(Matricol) AS Nrst FROM Student, Localit
WHERE Student.Codp=Localit.Codp GROUP GY Judet;

4. In care dintre urmatoarele interogari SQL rezultatul va fi o relatie cu o singura


coloana?
a) [ ] SELECT Nota1*0.2+Nota2*0.3 AS Notafin FROM Studenti;
b) [ ] SELECT Grupa, Seria FROM Studenti WHERE An=1;
c) [ ] SELECT COUNT(Matricol) AS Nr_Stud FROM Studenti;
d) [ ] SELECT AVG(Nota) FROM Studenti WHERE Sp="AP";

5. Ce se obtine prin urmatoarea fraza SELECT ?


SELECT Nume FROM Studenti WHERE Nume LIKE "Ion*"
a) [ ] numai studentii a caror nume este Ion
b) [ ] numai studentii a caror nume incepe cu I
c) [ ] numai studentii a caror nume incepe cu Ion
d) [ ] numai studentii a caror nume este Ion sau Ionescu

151
Limbajul de interogare SQL

6. Care din următoarele sunt adevărate despre clauza HAVING?


a) [ ] este legată de clauza GROUP BY și, în acest context, permite introducerea unor
restricţii aplicate asupra unui grup de tupluri
b) [ ] poate conţine una sau mai multe condiţii legate prin operatorii logici AND şi /sau
OR
c) [ ] mai este numită şi clauză WHERE pentru grupuri de tupluri.

Fiecare întrebare cu răspunsurile corecte are un punct.


Punctajul minim pentru promovarea testului este de 3 puncte.

152

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