Sunteți pe pagina 1din 46

Interogarea bazelor de date

1 Interogarea bazelor de date..........................................................................................2


1.1 Selectarea coloanelor unei tabele.........................................................................2
1.2 Selectare liniilor unei tabele ce satisfac anumite criterii.....................................8
1.3 Crearea unui formular de interogare în modul Design View...............................9
1.4 Meniurile unei interogări...................................................................................14
1.4.1 Meniurile unei interogări in modul Design View......................................15
1.4.2 Meniurile unei interogări în modul Datasheet View..................................16
1.5 Sortarea şi filtrarea liniilor tabelei rezultat........................................................17
1.6 Condiţii compuse...............................................................................................18
1.7 Crearea de interogări cu parametri....................................................................23
1.8 Reuniunea tabelelor...........................................................................................26
1.9 Utilizarea funcţiilor de agregare SQL în interogări...........................................27
1.10 Reprezentarea datelor agregate..........................................................................33
1.11 Formatarea tabelei rezultat................................................................................43
1.12 Probleme propuse..............................................................................................44
1.13 Intrebări de control............................................................................................46

1
1 Interogarea bazelor de date
O interogare a bazei de date (Query) este o cerere către baza de date de a obţine date ce
satisfac anumite criterii. Operaţia de interogare produce o tabelă cu datele cerute, care se
va numi în continuare tabelă rezultat. Instrucţiunea SQL cu care se interoghează baza de
date este SELECT. In Access se crează un formular grafic corespunzător instrucţiunii
SELECT cu o aplicaţie vrăjitor. O interogare este un obiect al bazei de date. Obiectele de
acest tip se vor numi Select Query. Un asemenea obiect poate fi examinat în două vederi:
 Design View, care este fereastra de proiectare,
 Datsheet View care afişază tabela rezultat.
Rezultatul unei interogări este o tabelă cu date.
Menţionăm că există şi alte tipuri de interogări cu care se modifică tabelele bazei de date.
Aceste tipuri de interogări vor fi prezentate într-o lucrare ulterioară.

1.1 Selectarea coloanelor unei tabele


Cea mai simplă interogare a unei baze de date este selectarea unor coloane dintr-o tabelă.
Acestă interogare corespunde instrucţiunii SELECT următoare

SELECT nume_coloana_1, nume_coloana_2, …, nume_coloana_k


FROM nume_tabela;

unde nume_coloana_i este numele unei coloane din tabelă. Când selectăm coloane din
mai multe tabele, forma generală a numelor coloanelor unei tabele este
nume_tabela.nume_coloana
deoarece numele coloanelor din diverse tabele pot coincide. Atributul nume_coloana al
obiectului nume_tabela este accesat cu operatorul punct.
Dacă vrem să selectăm toate coloanele tabelei, instrucţiunea SELECT are forma

SELECT *
FROM nume_tabela;

In exemplele următoare vom utiliza tabela PROIECT_ANGAJAT de mai jos. Tabela


conţine angajaţii ce lucrează la diverse proiecte ale unei intreprinderi, cu salariul orar,
SAL_ORA şi numărul de ore prestate la proiect, ORE. Cheia primară a tabelei este
formată din câmpurile ID_PRJ şi ID_ANG. Câmpurile NUME_ANGAJAT şi DPT_ANG
sunt de tip text, celelalte de tip numeric.

PROIECT_ANGAJAT

ID_PRJ ID_ANG NUME_ANGAJAT DPT_ANG SAL_ORA ORE

Proiectarea tabelei este cea din Figura 1.

2
Figura 1. Proiectarea tabelei PROIECT_ANGAJAT.
Tabela cu date este cea din Figura 2.

Figura 2. Tabela cu date PROIECT_ANGAJAT.


In intreprindere există trei departamente, Informatica, Support, Documentare. Numele lor
se va introduce cu o casetă combinată (Combo Box).
Vom exemplifica crearea unui formular corespunzător unei instrucţiuni SELECT pentru
selectarea câmpurilor ID_ANG, NUME_ANGAJAT, DPT_ANG şi SAL_ORA.
Formularul corespunzător instrucţiuni SELECT de mai sus se crează astfel:
1. se afişază fereastra Database din Figura 3, în care se selectează în partea stângă
opţiunea Queries,
2. clic pe opţiunea Create query by using wizard din partea dreaptă şi se afişază caseta
aplicaţiei Simple QueryWizard din Figura 4; se poate selecta aceeaşi opţiune dintr-o
casetă afişată cu clic pe meniul Insert  Query, sau cu clic pe butonul New al barei
de instrumente a ferestrei Database,

3
Figura 3. Fereastra Database cu opţiunea Queries selectată.

Figura 4. Pasul I. Selectarea coloanelor ce vor fi afişate.


3. la pasul I se selectează coloanele ce vor apărea în interogare. Caseta cu listă Tables /
Queries conţine toate tabelele bazei de date; se selectează tabela dorită din lista
Tables / Queries şi în lista Available Field se afişază coloanele tabelei, ca în Figura

4
5. Se mută în lista Selected Fields coloanele ce vor apărea în formular; mutarea se
face cu butoanele şi . Butonul mută câmpul selectat, butonul
mută toate câmpurile. Butoane şi transferă câmpurile în sens invers.
Rezultatul pasului I este arătat în Figura 5,

Figura 5. Pasul I. Coloanele selectate ce vor fi afişate.


4. clic pe butonul Next care afişază caseta din Figura 6,

5
Figura 6. Pasul II. Alegerea tipului interogării.
5. la pasul II se alege tipul interogării Detail (shows every field of every record); cu
această opţiune se afişază fiecare câmp din fiecare linie a tabelei; clic pe butonul Next
ce afişază caseta din Figura 7,

6
Figura 7. Pasul III. Alegerea titlului interogării.
6. la pasul III se alege titlul interogării; se poate trece la execuţia cererii prin selectarea
opţiunii Open the query to view information, sau se poate modifica proiectarea ei
prin selectarea opţiunii Modify the query design. Pentru execuţia interogării clic pe
butonul Finish şi se afişază tabela rezultat din Figura 8.

Figura 8. Rezultatul interogării unei tabele.


Aplicaţia Access generează o instrucţiune SELECT pe baza formularului proiectat.
Această instrucţiune se poate afişa cu clic pe opţiunea SQL View a unuia din meniurile
contextuale ale formularului sau a meniului View din Tabelul 1 şi Tabelul 3. Instrucţiunea
SQL pentru interogarea proiectată este arătată în Figura 9.

7
Figura 9. Instrucţiunea SELECT corespunzătoare formularului proiectat anterior.

1.2 Selectare liniilor unei tabele ce satisfac anumite criterii


Selectarea coloanelor liniilor unei tabele ce satisfac anumite criterii se face cu
instrucţiunea SELECT cu clauza WHERE care conţine criteriile de selecţie. Instrucţiunea
are forma

SELECT nume_coloana_1, nume_coloana_2, …, nume_coloana_k


FROM nume_tabela
WHERE conditie
ORDER BY nume_coloana_1 [ASC | DESC] [, nume_coloana_2 [ASC | DESC] …];

Condiţia din clauza WHERE este o expresie booleană ce are ca argumente


nume_coloana_1, nume_coloana_2, …, nume_coloana_k. O linie a tabelei este selectată
când condiţia din clauza WHERE are valoarea adevărat.
Dacă vrem să selectăm toate coloanele liniilor unei tabele ce îndeplinesc o condiţie,
înstrucţiunea SELECT are forma

SELECT *
FROM nume_tabela
WHERE conditie
ORDER BY nume_coloana_1 [ASC | DESC] [, nume_coloana_2 [ASC | DESC] …];

Access permite să creăm formulare grafice corespunzătoare acestei instrucţiuni.


Elementele acestor formulare sunt traduse de Access într-o instrucţiune SELECT care
este executată pentru a obţine tabela rezultat.
Reamintim că forma generală a nume_coloana este
nume_tabela.nume_coloana
Atributul nume_coloana al obiectului nume_tabela este accesat cu operatorul punct.
Această formă generală se utilizează atunci când selectăm coloane din mai multe tabele,
după cum se va vedea în capitolele următoare, deoarece anumite coloane din diverse
tabele pot avea aceleaşi nume şi doar forma generală a nume_coloana le poate distinge.
Access permite ca nume_tabela şi nume_coloana să conţină şi spaţii, în acest caz ele sunt
incluse între paranteze drepte, [ şi ] şi forma generală a nume_coloana este
[nume_tabela].[nume_coloana]
In cazul instrucţiunii SELECT, când se selectează date dintr-o singură tabelă, în numele
coloanei se poate omite numele tabelei.

8
1.3 Crearea unui formular de interogare în modul Design View
Fie din nou tabela PROIECT_ANGAJAT repetată mai jos

PROIECT_ANGAJAT

ID_PRJ ID_ANG NUME_ANGAJAT DPT_ANG SAL_ORA ORE

Vom exemplifica crearea unui formular corespunzând instrucţiunii

SELECT ID_ANG, NUME_ANGAJAT, DPT_ANG, SAL_ORA


FROM PROIECT_ANGAJAT
WHERE NUME_DEPARTAMENT = ‘Informatica’;

Crearea formularului corespunzător acestei instrucţiuni SELECT se face în următorii


paşi:
1. se afişază fereastra Database; în partea stângă, se selectează opţiunea Queries; în
partea dreaptă se afişază opţiunile existente, Create query by using wizard şi Create
query in Design view şi interogările (Queries) existente, vezi Figura 10,

Figura 10. Fereastra Database cu opţiunea Queries selectată.


2. clic pe opţiunea Create query in Design View care afişază caseta Show Table din
Figura 11 şi fereastra de proiectare a unei interogări din Figura 12. Cele două ferestre
se pot afişa şi în alte feluri
 cu clic pe butonul Design din bara de instrumente a casetei Database,
 un clic pe butonul New al barei de instrumente a casetei Database sau cu clic pe
meniul Insert  Query afişază caseta de dialog New Query din Figura 13; un

9
clic pe opţiunea Design View afişază caseta Show Table din Figura 11 şi fereastra
de proiectare din Figura 12,
 butonul Show Table, , şi comanda Query  Show Table afişază caseta Show
Table din Figura 11, cu tabelele bazei de date utilizate în interogare.

Figura 11. Caseta Show Table.

Figura 12. Fereastra de proiectare a unei interogări.

10
Figura 13. Caseta de dialog New Query.
3. secţiunea Tables a casetei Show Tables din Figura 11 afişază toate tabelele din baza
de date; se selectează tabela dorită, în cazul nostru tabela PROIECT_ANGAJAT; clic
pe butonul Add şi apoi pe butonul Close; în acest moment tabela se afişază în partea
de sus a formularului Select Query ca în Figura 14, sub forma unei casete tip listă cu
coloanele tabelei. Primul element din listă este *; el corespunde selectării tuturor
coloanelor tabelei. In partea de jos se introduc clauzele corespunzătoare instrucţiunii
SELECT: coloanele ce vor fi selectate în linia Field, numele tabelei din clauza FROM
în linia Table, condiţiile de selectare din clauza WHERE în liniile Criteria şi or şi
ordonarea liniilor selectate din clauza ORDER BY în linia Sort.

Figura 14. Formularul Select Query.


Pentru a introduce clauzele ce vor interveni în interogare se procedează astfel:

11
1. se completează celulele liniei Field cu numele coloanelor tabelei ce trebuie selectate
(clauza SELECT); pentru a completa o celulă a liniei Field cu numele unei coloane
din tabelă (un atribut), se poate proceda în două feluri:
 clic pe o celulă a liniei Field din Figura 14 (ea va fi o coloană din tabela rezultat),
şi se afişază o listă cu coloanele tabelei ca în Figura 15; clic pe coloana dorită,
(elementul din listă); dacă am selectat mai multe tabele, lista conţine coloanele
tuturor tabelelor selectate, sub forma nume_tabela.nume_coloana; primul element
din lista coloanelor unei tabele are forma nume_tabela*, în cazul nostru
PROIECT_ANGAJAT*; dacă vrem să selectăm toate coloanele tabelei respective,
clic pe acest element;
 un alt mod de a completa o celulă a liniei Field cu o coloană a tabelei este de a
selecta coloana dorită din caseta cu numele tabelei afişată deasupra formularului,
în cazul nostru PROIECT_ANGAJAT; se trage coloana selectată cu butonul stâng
al mousului apăsat deasupra unei celule a liniei Field,

Figura 15. Completarea câmpurilor, tabelei, criteriilor şi ordonării datelor.


2. linia Table din formular se completează automat cu numele tabelei,
3. pentru a introduce modul de sortare al liniilor (clauza ORDER BY), clic pe celula
corespunzătoare a liniei Sort; se afişază lista din Figura 16, din care se alege opţiunea
dorită,

12
Figura 16. Alegerea modului de sortare a liniilor tabelei rezultat.
4. în linia Show se marchează coloanele ce vor fi vizibile, ca în Figura 17,
5. în linia Criteria se introduc condiţiile de selectare pentru fiecare coloană din clauza
WHERE; pentru fiecare coloană putem avea o condiţie compusă, formată din două
condiţii legate prin operatorul or; în acest caz prima condiţie se introduce pe linia
Criteria, a doua pe linia or; după cum se va vedea mai jos, condiţiile se pot introduce
direct sau se pot crea cu aplicaţia Expression Builder,
6. se completează toate coloanele dorite şi se obţine formularul din Figura 17.

Figura 17. Formularul completat a unei interogări.


Pentru a salva formularul creat se utilizează opţiunile Save şi Save As ale meniului File
sau clic pe butonul de închidere a ferestrei formularului.
Pentru a şterge o coloană din interogare se selectează coloana şi clic pe meniul Edit 
Delete sau se apasă tasta Delete.
Butonul Run, , al barei de instrumente sau comanda Query  Run produc execuţia
cererii.
Pentru exemplul de mai sus tabela rezultat este cea din Figura 18.

13
Figura 18. Tabela rezultat a cererii din Figura 17.
In partea de jos a tabelei rezultat există un cursor pentru navigare printre liniile selectate.
Instrucţiunea SELECT generată de Access din formularul proiectat se poate afişa cu clic
pe opţiunea SQL View a unuia din meniurile contextuale ale formularului sau a meniului
View din Tabelul 1 şi Tabelul 3 sau cu clic pe opţiunea SQL View din lista View, vezi
Figura 20.

Figura 19. Instrucţiunea SELECT generată din formular.

1.4 Meniurile unei interogări


Orice formular de interogare poate fi afişat în două moduri (în două vederi):
 modul Proiectare (Design View),
 modul Formular (Datasheet View) în care se poate examina tabela rezultat.
Fiecărei vederi îi corespund meniuri, bare de instrumente şi meniuri contextuale diferite.
Comutarea între cele două vederi se poate face în multe moduri. Un clic pe butonul View
din stânga barei de meniu afişază lista View din Figura 20 cu opţiunile de comutare a
vederilor.

Figura 20. Lista View cu opţiunile de comutare a vederilor.

14
1.4.1 Meniurile unei interogări in modul Design View
Meniul View şi meniul contextual al formularului în vederea Design sunt arătate în
Tabelul 1. Opţiunile lor permit comutarea între cele două vederi, Design şi Datasheet.
Alte opţiuni ale acestor meniuri vor fi prezentate ulterior.

a)meniul View b) meniul contextual al formularului


Tabelul 1. Meniurile formularului în modul Design View.
Bara de meniuri şi barele de instrumente în vederea Design sunt arătate în Figura 21.

Figura 21. Barele de meniuri şi de instrumente Design View.


Meniul Query are opţiuni pentru crearea formularului de proiectare dorit. Butonul Query
Type, , al barei de meniu în vederea Design, afişază lista Query Type cu aceste
opţiuni, vezi Figura 22.

15
a) meniul Query b) lista Query Type
Figura 22. Meniul Query şi lista Query Type cu opţiunile de creare a unui formular de interogare.
Semnificaţia acestor opţiuni este cea din Tabelul 2.

Opţiune Instrucţiunea SQL


SELECT
SELECT
CREATE TABLE
UPDATE
INSERT
DELETE
Tabelul 2. Opţiunile de creare a unui formular de interogare.
Exerciţiu. Se va deschide prima interogare, proiectată cu aplicaţia vrăjitor, în modul
Design şi se va compara formularul generat de vrăjitor cu cel proiectat pentru a doua
interogare.
Se vor compara apoi cele două instrucţiuni SELECT generate de Access în cazul celor
două interogări.

1.4.2 Meniurile unei interogări în modul Datasheet View


Barele de meniuri şi de instrumente ale vederii Datasheet sunt arătate în Figura 23.

Figura 23. Barele de meniuri şi de instrumente Datasheet View.


Meniul View şi meniul contextual al formularului în vederea Datasheet sunt arătate în
Tabelul 3. Opţiunile Design View, Datasheet View şi SQL View ale acestor meniuri

16
permit trecerea în modul Proiectare (Design), Formular (Datasheet), respectiv afişază
instrucţiunea SQL generată de Access pe baza formularului de proiectare. Alte opţiuni
permit sortarea datelor tabelei rezultat.

a) meniul View b) meniul contextual al formularului


Tabelul 3. Meniurile formularului în modul Datasheet View.
Pentru a afişa tabela rezultat se procedează în unul din următoarele moduri
 se trece în modul Datasheet View cu clic pe opţiunea Datasheet View din unul din
meniurile afişate în Tabelul 1, vezi şi Figura 20,
 se trece în vederea Design şi clic pe butonul Run, al barei de instrumente sau pe
meniul Query  Run.

1.5 Sortarea şi filtrarea liniilor tabelei rezultat


Este posibilă sortarea şi filtrarea liniilor tabelei rezultat aşa cum s-a arătat într-o lucrare
anterioară. Pentru aceasta tabela se afişază în modul Datasheet View.
Sortarea liniilor tabelei rezultat se face astfel:
1. se selectează o coloană după care se va face sortarea,
2. sortarea liniilor după elementele coloanei selectate crescător / descrescător se
realizează cu butoanele Sort Ascending, , şi Sort Descending, , ale barei de
instrumente sau opţiunile Sort Ascending şi Sort Descending ale meniului Records
 Sort.
Liniile tabelei se pot filtra, pentru a afişa doar acele linii ce satisfac un criteriu.
Filtrarea prin selectarea valorilor se face astfel:
1. se găseşte într-o coloană o instanţă a valorii ce trebuie să apară în rezultatul filtrării,
2. se selectează toată celula sau se plasează cursorul la începutul celulei,
3. clic pe butonul al barei de instrumente.
Pentru a indepărta filtrul creat clic pe butonul al barei de instrumente.

17
Pentru a selecta linii ce încep cu acelaşi caracter, se selectează acest prim caracter într-o
celulă şi se procedează ca mai sus.
Pentru a selecta liniile ce conţin un şir de caractere, se selectează acest subşir într-o celulă
şi se procedează ca mai sus.
Ca exemplu, pentru a sorta câmpul ID_ANG al tabelei rezultat a interogării precedente în
ordine descrescătoare se selectează o celulă cu clic şi clic pe butonul . Rezultatul este
cel din Figura 24.

Figura 24. Tabela rezultat a cererii din Figura 17 cu câmpul ID_ANG sortat în ordine descrecătoare.

1.6 Condiţii compuse


In următorul exemplu vom selecta angajaţii de la departamentele Suport şi Documentare
din tabela PROIECT_ANGAJAT cu instrucţiunea SELECT de mai jos.

SELECT ID_ANG, NUME_ANGAJAT, DPT_ANG, SAL_ORA


FROM PROIECT_ANGAJAT
WHERE DPT_ANG = ‘Documentare’ OR DPT_ANG = ‘Suport’;

Condiţia din clauza WHERE se completează în celulele DPT_ANG din liniile Criteria
şi or. Formularul corespunzătoare acestei interogări este cel din Figura 25.

18
Figura 25. Forma pentru selectarea angajaţilor departamentelor Documentare şi Suport.
Instrucţiunea SELECT generată de Access din formularul creat mai sus este cea din
Figura 26

Figura 26. Instrucţiunea SELECT corespunzătoare formei din Figura 25.


Tabela rezultat este cea din Figura 27.

Figura 27. Tabela rezultat pentru forma din Figura 25.


Clauza WHERE a instrucţiunii SELECT conţine o condiţie care este o expresie booleană.

19
Expresiile booleene sunt constituite din expresii relaţionale separate de operatorii
booleeni AND, OR şi NOT. In cazul cel mai simplu, o expresie booleană este constituită
dintr-o singură expresie relaţională.
Expresiile relaţionale sunt constituite din expresii aritmetice separate de operatorii
relaţionali <, <=, >, >= , = şi <> şi operatorul Between … And … care testează dacă o
valoare este cuprinsă într-un interval.
In unele cazuri avem nevoie să comparăm un şir de caractere cu elementele unei coloane
care sunt şiruri de caractere, ca în interogarea din Figura 25. Sirurile de caractere sunt
scrise între ghilimele. O operaţie ce se poate efectua asupra şirurilor este concatenarea.
Operatorul de concatenare este &. Pentru a testa dacă un şir de caractere corespunde unui
şablon se utilizează operatorul LIKE, vezi o lucrare anterioară.
Expresiile aritmetice au ca termeni numere, atributul numeric respectiv (coloana
numerică din tabelă) şi operatorii aritmetici +, -, * şi / pentru numere reale şi +, -, \ şi
Mod pentru numere întregi. Priorităţile operatorilor sunt cele cunoscute. Termenii
expresiilor aritmetice pot fi grupaţi în paranteze rotunde.
Exemplu. Să testăm dacă atributul SAL_ORA al tabelei PROIECT_ANGAJAT din
exemplele anterioare este cuprins între valorile 40 şi 60. Condiţia se poate scrie în mai
multe feluri:
>= 40 AND <= 60
>=30+10 AND <= 60
>=(30+10) AND <= 60
BETWEEN 40 AND 60
NOT < 40 AND NOT > 60
In a doua expresie am folosit expresia 30+10 în loc de 40 pentru a sublinia că în
expresiile relaţionale putem utiliza expresii aritmetice oricât de complicate. In expresia a
treia am utilizat paranteze rotunde. Ultima condiţie este arătată în Figura 28.
Expresia booleană ce reprezintă condiţia din clauza WHERE se poate scrie direct în
câmpurile Criteria şi or sau se poate crea cu aplicaţia Expression Builder, ca într-o
lucrare anterioară. Implicit, în fereastra de proiectare din Figura 28 există o singură linie
or. Se pot adăuga mai multe linii or cu un clic pe linia or existentă şi apoi clic pe meniul
Insert  Rows. Liniile or se pot şterge cu un clic pe linie şi apoi clic pe meniul Edit 
Delete Rows.

20
Figura 28. Exemplu de condiţie compusă.
Uneori este dificil de a scrie condiţia, deoarece spaţiul din celulă este prea mic. Se poate
afişa o fereastră în care să se introducă expresia cu clic pe celulă, apoi se apasă tastele
Shift + F2 şi se afişază fereastra din Figura 29.

Figura 29. Afişarea unei ferestre pentru introducerea unei expresii.


Pentru a lansa aplicaţia Expression Builder se procedează astfel:
1. se afişază meniul contextual al coloanei formularului din Figura 30, cu un clic cu
butonul drept pe coloana pentru care vrem să creăm condiţia;
2. clic pe opţiunea Build ce afişază caseta Expression Builder din Figura 31, vezi şi o
lucrare anterioară, cu care se crează expresia dorită.

21
Figura 30. Meniu contextual al unei coloane a formularului.
O altă posibilitate de a lansa aplicaţia Expression Builder este cu clic pe butonul Build,
, al barei de instrumente, vezi Figura 21.
In partea din stânga jos a casetei Expression Builder sunt afişate pe lângă funcţii,
constante, operatori şi tabelele, formularele şi alte obiecte din baza de date, ale căror
elemente se pot utiliza în expresii.

Figura 31. Caseta Expression Builder.


Opţiunea Table Names din meniul din Figura 30 afişază sau ascunde linia Table din
formular ce afişază numele tabelelor.

22
1.7 Crearea de interogări cu parametri
După cum s-a văzut mai sus, linia Criteria este utilizată pentru introducerea de condiţii
pentru selectarea liniilor tabelelor. Este posibil de a introduce parametri în criteriul de
selectare a liniilor, de exemplu elementele unei coloane să fie cuprinse între două valori.
Putem crea interogări ce afişază casete de dialog pentru introducerea parametrilor
interogării. Acest lucru se face prin introducerea condiţiei în câmpul Criteria, iar
parametri sunt înlocuiţi cu mesaje scrise între paranteze drepte, [ şi ]. La efectuarea
interogării, Access afişază casete de dialog cu mesajele ce au fost introduse între
parantezele drepte.
Vom exemplifica acest lucru prin crearea unei interogări a tabelei PROIECT_ANGAJAT
în care vrem să selectăm angajaţii cu salarii orare între două limite, care să fie parametrii
interogării, pe care îi vom introduce în casete de dialog afişate de Access. Definiţia
tabelei PROIECT_ANGAJAT este repetată mai jos.

PROIECT_ANGAJAT

ID_PRJ ID_ANG NUME_ANGAJAT DPT_ANG SAL_ORA ORE

1. creăm un formular de interogare cu aplicaţia Create Query by using Wizard, în care


selectăm câmpurile ID_ANG, NUME_ANGAJAT, DPT_ANG şi SAL_ORA,
2. deschidem fromularul creat în vederea Query Design, ca în Figura 32,
3. în câmpul Criteria al coloanei COST_ORA introducem condiţia
Between [cost minim ora] And [cost maxim ora], ca în Figura 32.

Figura 32. Exemplu de condiţie cu parametri.


La executarea interogării se afişază casetele de dialog din Tabelul 4

23
Tabelul 4. Mesaje pentru introducerea parametrilor.
Rezultatul interogării este tabela din Figura 33.

Figura 33. Rezultatul interogării cu parametri.


Putem controla ordinea în care sunt afişaţi parametrii în felul următor:
1. se afişază caseta Query Parameters din Figura 34 cu clic pe meniul Query 
Parameters,
2. în această caseta se introduce câte un mesaj pe rând, în ordinea în care dorim să fie
afişate; textul trebuie să fie exact cel din fereastra de proiectare. In coloana din
dreapta se introduce tipul parametrului, din caseta de dialog afişată cu clic pe celula
respectivă.

Figura 34. Caseta Query Parameters.

24
Ca un alt exemplu, vom selecta toţi angajaţii din tabela PROIECT_ANGAJAT al căror
nume conţine un anumit şir de caractere. Procedura este următoarea:
1. creăm un formular de interogare cu aplicaţia Create Query by using Wizard, în care
selectăm câmpul NUME_ANGAJAT,
2. deschidem fromularul creat în vederea Query Design şi introducem condiţia ca în
Figura 35.
Condiţia pentru testarea unui şir de caractere are forma
LIKE expresie regulată
După cum s-a arătat într-o lucrare anterioară, în cazul nostru expresia regulată are forma
“*sir*”. Acest şablon se construieşte ca “*” & sir & “*”, unde sir este şirul de caractere
ce va fi introdus într-o casetă de dialog. Pentru acesta condiţia va fi scrisă
LIKE “*” & [Litere in nume] & “*”
vezi Figura 35. Reamintim că operatorul & concatenează şiruri de caractere.

Figura 35. Exemplu de condiţie cu parametri.


La execuţie se va afişa o casetă de dialog cu mesajul Litere in nume, în care vom
introduce şirul de caractere dorit.
Presupunem că vrem să selectăm angajaţii ale căror nume conţin şirul “esc”. La execuţia
interogării se afişază caseta de dialog din Figura 36.

25
Figura 36. Caseta de mesaj pentru introducerea parametrului.
Rezultatul interogării este tabela din Figura 37.

Figura 37. Rezultatul interogării cu parametri.

1.8 Reuniunea tabelelor


Una dintre operaţiile ce se pot aplica asupra tabelelor rezultat este reuniunea acestor
tabele. Pentru reuniune, liniile tabelelor trebuie să aibe aceleaşi coloane. Reuniunea
tabelelor se face cu instrucţiunea SQL UNION cu forma

SELECT coloane
FROM nume_tabela_1
UNION
SELECT coloane
FROM nume_tabela_2;

Pentru exemplificare, vom considera tabela SITUATIE_FINANCIARA de mai jos, ce


conţine datele financiare pe anii trecuţi ale unei intreprinderi

SITUATIE_FINANCIARA

AN VENITURI CHELTUIELI PROFIT_BRUT IMPOZIT PROFIT_NET

şi tabela DATE_CONTABILE cu datele financiare pe anul curent

DATE_CONTABILE

26
AN VENITURI CHELTUIELI PROFIT_BRUT IMPOZIT PROFIT_NET

Vom crea o tabelă ce reuneşte liniile celor două tabele în felul următor:
1. se afişază fereastra Database; în partea stângă, se selectează opţiunea Queries; în
partea dreaptă se afişază opţiunile existente, Create query by using wizard şi Create
query in Design view şi interogările (Queries) existente,
2. clic pe opţiunea Create query in Design View care afişază caseta Show Table; clic pe
butonul Close,
3. clic pe meniul Query  SQL Specific, şi în submeniul afişat, clic pe opţiunea
Union, vezi Figura 38,

Figura 38. Meniul Query. Opţiunea Union.


4. se afişază caseta de text din Figura 39, în care se introduce instrucţiunea UNION din
Figura 39,

Figura 39. Instrucţiunea UNION.

5. clic pe butonul Run, , al barei de instrumente şi se obţine tabela rezultat.

1.9 Utilizarea funcţiilor de agregare SQL în interogări


Instrucţiunea SELECT poate utiliza câteva funcţii standard SQL pentru a face suma
valorilor unei coloane, calculul valorii medii, minime sau maxime a unei coloane, etc.
Aceste funcţii sunt cele din Tabelul 5.

27
Funcţia Semnificaţia
AVG Valoarea medie
MIN Valoarea minimă
MAX Valoarea maximă
SUM Suma valorilor din coloană
VAR Dispersia
STD Abaterea medie pătratică
Tabelul 5. Funcţii SQL pentru agregarea datelor în instrucţiunea SELECT.
Cea mai simplă interogare a unei baze de date cu utilizarea acestor funcţii este aplicarea
lor asupra unor coloane dintr-o tabelă. Acestă interogare corespunde instrucţiunii
SELECT următoare

SELECT funcţie(nume_coloana_1), funcţie(nume_coloana_2), …,


funcţie(nume_coloana_k)
FROM nume_tabela;

In acest caz nu s-a precizat numele coloanelor din tabela rezultat a interogării, şi aplicaţia
atribuie acestor coloane nişte nume standard. Instrucţiunea SELECT are şi o formă în
care putem atribui coloanelor tabelei rezultat ce nume dorim. Această formă este

SELECT funcţie(nume_coloana_1) AS nume_1, funcţie(nume_coloana_2) AS nume_2,


…, funcţie(nume_coloana_k) AS nume_k
FROM nume_tabela;

Vom exemplifica utilizarea acestor funcţii la tabela VANZARI, proiectată în Figura 40.
Tabela cu date este cea din Figura 41.

Figura 40. Proiectarea tabelei VANZARI.

28
Figura 41. Tabela VANZARI.
Vom calcula suma vânzărilor pe fiecare an. Procedura este următoarea:
1. se afişază fereastra de proiectare a interogării din Figura 42, după cum s-a arătat mai
înainte,

Figura 42. Fereastra de proiectarea interogării.


2. se selectează prima celulă din linia Fields cu un clic,
3. clic pe butonul Build, , al barei de instrumente, care lansează aplicaţia
Expression Builder din Figura 43; se selectează în fereastra stângă opţiunea
Functions  Built-In Functions, în fereastra din mijloc se selectează SQL
Aggregate, iar în fereastra din dreapta funcţia Sum; clic pe butonul Paste şi în
fereastra superioară apare expresia Sum(“expr”) pentru care trebuie să completăm
argumentul expr,

29
Figura 43. Fereastra aplicaţiei Expression Builder.
4. selectăm argumentul “expr” al funcţiei Sum cu un clic, ca în Figura 44,

Figura 44. Selectarea argumentului unei expresii.


5. selectăm apoi tabela VANZARI în fereastra din stânga cu clic pe opţiunea Tables 
VANZARI; în acest moment în fereastra din mijloc apar câmpurile tabelei; clic pe
câmpul VANZARI_2001 şi se generează expresia din fereastra superioară din Figura
45; numele coloanei este introdus ca [nume_tabela].[nume_coloana], adică
[VANZARI]![VANZARI_2001],

30
Figura 45. Expresia pentru însumarea unei coloane.
6. se repetă paşii de mai sus şi pentru celelalte coloane; linia Field este cea din Figura
46,

Figura 46. Fereastra de proiectare.


Expresia din prima celulă a liniei Field este cea din Figura 47. Numele coloanei atribuit
de aplicaţia Expression Builder este Expr1.

31
Figura 47. Expresia primei coloane a interogării.

7. clic pe butonul Run , , al barei de instrumente şi tabela rezultat este cea din Figura
48.

Figura 48. Tabela rezulatat a interogării.


După cum se observă, coloanele tabelei rezultat au numele Expr1, …, Expr4, atribuite de
aplicaţia Expression Builder. Acest caz corespunde primei forme a instrucţiunii SELECT
prezentate în acest paragraf

SELECT funcţie(nume_coloana_1), funcţie(nume_coloana_2), …,


funcţie(nume_coloana_k)
FROM nume_tabela;

Modificăm Expr1 în celula liniei Field în AN 2001, ca în Figura 49 şi la fel numele


celorlalte coloane pentru a fi mai semnificative. Tabela rezultat este cea din Figura 50.

Figura 49. Modificarea numelui coloanei tabelei rezultat.

Figura 50. Tabela rezultat a interogării.


Acest caz corespunde celei dea doua forme a instrucţiunii SELECT

32
SELECT funcţie(nume_coloana_1) AS nume_1, funcţie(nume_coloana_2) AS nume_2,
…, funcţie(nume_coloana_k) AS nume_k
FROM nume_tabela;

In final, instrucţiunea SELECT este cea din Figura 51.

Figura 51. Instrucţiunea SELECT a interogării.

1.10 Reprezentarea datelor agregate


Este posibil să afişăm rezultatul unei interogări sub forma unei matrice, ce are ca
elemente valorile agregate ale unui câmp, grupate funcţie de alte câmpuri. Interogarea de
acest tip se numeşte Crosstab Query.
Fie tabela CHELTUIELI cu cheltuielile unei intreprinderi pe categorii şi trimestre a cărei
proiectare este cea din Figura 52 iar datele din tabelă sunt cele din Figura 53.

Figura 52. Proiectarea tabelei CHELTUIELI.


Introducerea datelor din câmpul CATEGORIE se va face cu o caseta combinată (Combo
Box).

33
Figura 53. Tabela CHELTUIELI.
Vrem să afişăm cheltuielile sumarizate, pe categorii şi pe trimestre ca în tabela de mai jos

TRIMESTRU Materiale Piese Utilaje


I x x x
II x x x
III x x x
IV x x x

Categoriile de cheltuieli vor fi afişate pe coloane, trimestrele pe linii şi suma cheltuielilor


pe tipuri de cheltuieli şi pe trimestre în celulele tabelei.
Vom crea această interogare cu aplicaţie vrăjitor.
1. se afişază fereastra Database; în partea stângă, se selectează opţiunea Queries,
2. clic pe butonul New al barei de instrumente care afişază caseta New Query din Figura
54; se selectează opţiunea Crosstab Query Wizard, care lansează aplicaţia vrăjitor,

34
Figura 54. Caseta New Query.
3. la pasul I al aplicaţiei vrăjitor se afişază tabelele şi interogările din baza de date şi se
aleg cele din care se va crea interogarea dorită; în cazul nostru selectăm tabela
CHELTUIELI, vezi Figura 55; clic pe butonul Next,

Figura 55. Pasul I. Se aleg tabelele şi interogările din care se vor selecta câmpurile interogării.
4. la pasul II al se afişază câmpurile disponibile şi se aleg maxim trei ale căror valori vor
constitui antetele liniilor. In cazul nostru alegem câmpul TRIMESTRU, vezi Figura
56; clic pe butonul Next,

35
Figura 56. Pasul II. Se aleg câmpurile ale căror valori vor constitui antetele liniilor.
5. la pasul III se afişază câmpurile disponibile şi se aleg cele ale căror valori vor
constitui antetele coloanelor. In cazul nostru alegem câmpul CATEGORIE, vezi
Figura 57; clic pe butonul Next,

36
Figura 57. Pasul III. Se aleg câmpurile ale căror valori vor constitui antetele coloanelor.
6. la pasul IV se afişază câmpurile disponibile şi se aleg cele ale căror valori vor fi
afişate la intersecţia liniilor şi coloanelor. Asupra valorilor acestor câmpuri se va
aplica o funcţie de sumarizare din cele afişate în lista Function. In cazul nostru se
alege câmpul VALOARE şi funcţia de sumarizare Sum, vezi Figura 58. Este posibil
de a sumariza în plus rezultatele fiecărei linii într-un câmp separat. Pentru aceasta se
va marca butonul Yes, include row sums; clic pe butonul Next,

37
Figura 58. Pasul IV. Se aleg câmpurile ale căror valori vor fi afişate la intersecţia liniilor şi coloanelor.
7. la pasul V se alege numele interogării create, vezi Figura 59. Clic pe butonul Finish şi
se afişază tabela rezultat din Figura 60.
Menţionăm că tabela rezultat conţine şi un câmp Total Of VALOARE ce sumarizează
valorile liniilor. Acest câmp apare deoarece la pasul IV am marcat butonul Yes, include
row sums.

38
Figura 59. Pasul V. Se alege numele interogării create.

Figura 60. Interogarea tabelei CHELTUIELI.


Aplicaţia vrăjitor generează formularul de interogare din Figura 61.

39
Figura 61. Formularul de interogare generat de aplicaţia vrăjitor.
Vom crea acum o interogare tip Crosstab a aceleiaşi tabele CHELTUIELI în care
categoriile de cheltuieli vor fi afişate pe linii, trimestrele pe coloane şi suma cheltuielilor
pe tipuri de cheltuieli şi pe trimestre în celulele tabelei, ca mai jos.

CATEGORIE I II III IV
Materiale x x x x
Piese x x x x
Utililaje x x x x

In consecinţă, valorile câmpului CATEGORIE vor fi antetele liniilor, valorile câmpului


TRIMESTRU vor fi antetele coloanelor, iar valorile câmpului VALOARE vor fi
sumarizate în coloanele matricei.
Ca exerciţiu vom crea o interogare de tip Crosstab proiectând un formular în felul
următor:
1. se crează o interogare în care se selectează tabela CHELTUIELI,
2. clic pe meniul Query  Crosstab Query vezi Figura 38; se afişază fereastra de
proiectare Crosstab Query din Figura 62,

40
Figura 62. Fereastra de proiectare Crosstab Query.
In fiecare celulă a liniei Field se poate afişa caseta cu câmpurile tabelei, din care se alege
câmpul dorit, ce va fi afişat pe linii, pe coloane sau sumarizat în celulele tabelei.
In fiecare celulă a liniei Crosstab se poate afişa caseta Crosstab din Figura 63b, în care se
alege tipul câmpurilor. Câmpurile ale căror valori vor fi antetele liniilor vor avea tipul
Row Heading, cele ale căror valori vor fi antetele coloanelor vor avea tipul Column
Heading. Câmpurile ce vor fi sumarizate vor avea tipul Value.
In fiecare celulă a liniei Total se poate afişa caseta Total din Figura 63a, în care se alege
funcţia câmpului, de grupare a datelor, de sumarizare, etc. Pentru câmpurile de tip Row
Heading şi Column Heading se va alege Group By. Pentru câmpurile sumarizate se va
alege funcţia de agregare dorită, Sum Avg, etc.

a) caseta Total b) caseta Crosstab


Figura 63. Casetele Total şi Crosstab.
3. vom afişa câmpul CATEGORIE pe linii, câmpul TRIMESTRU pe coloane şi în
celulele tabelei suma câmpurilor VALOARE; proiectarea interogării este cea din
Figura 64,

41
Figura 64. Proiectarea interogării.
4. clic pe butonul Run, şi se obţine tabela din Figura 65.

Figura 65. Tabela rezultat a interogării.


In al doilea exemplu, afişăm câmpul TRIMESTRU pe linie şi câmpul CATEGORIE pe
coloane. Proiectarea interogării este arătată în Figura 66. Se va compara acest formular cu
cel generat mai înainte de aplicaţia vrăjitor.

42
Figura 66. Proiectarea interogării
Tabela rezultată din interogare este cea din Figura 67.

Figura 67. Tabela rezultat a interogării.


Se va compara această tabelă cu cea generată mai înainte cu aplicaţia vrăjitor.

1.11 Formatarea tabelei rezultat


Tabela rezultat a interogării se formatează în acelaşi fel cu tabelele bazei de date. Pentru
formatare se utilizează opţiunile meniului Format din Figura 68. Opţiunile meniului
Format afişază aceleaşi casete de dialog ca şi în cazul tabelor bazei de date.

43
Figura 68. Meniul Format al unei interogări.

1.12 Probleme propuse


In tabelele de mai jos, atributele ce constituie cheia primară a tabelei sunt subliniate.
1. Fie tabela PROIECTE_ANGAJATI de mai jos. Coloanele ID_PRJ, ID_ANG,
SAL_ORA şi ORE sunt de tip numeric, celelalte de tip text.

PROIECTE_ANGAJATI

ID_PRJ ID_ANG NUME_ANG DPT_ANG SAL_ORA ORE


100 1290 Popescu Informatica 60 10
100 1293 Ionescu Support 40 8
100 1045 Georgescu Documentare 25 12
200 1192 Vasilescu Informatica 60 20
200 1351 Filipescu Support 40 15
300 1348 Popa Informatica 60 20
300 1284 Nicolae Support 40 14
300 1067 Marinescu Documentare 25 12
400 1095 Gheorghe Informatica 60 15

Se va proiecta tabela PROIECTE_ANGAJATI. Se vor defini condiţiile ORE >= 0,


SAL_ORA>=20, ID_PRJ, 100 <= ID_PRJ <= 999, 1000 <= ID_ANG <= 9999. Se vor
defini măşti pentru introducerea câmpurilor ID_PRJ şi ID_ANG. Numele
departamentelor se vor introduce cu o casetă combinată (Combo Box).
Se vor defini formulare de interogare pentru următoarele cereri:
 să se selecteze toţi angajaţii intreprinderii,
 să se selecteze toţi cu angajaţii cu salariul orar mai mic sau egal cu 35 lei,
 să se selecteze toţi cu angajaţii cu salariul orar mai mare sau egal de 38 lei,
 să se selecteze toţi angajaţii din departamentul Informatica ce au lucrat cel puţin 15
ore,
 să se selecteze toţi angajaţii ce au lucrat un număr de ore cuprinse între două limite ce
vor fi parametri,
 să se selecteze toţi angajaţii al căror nume începe cu o literă ce va fi parametru.

44
La fiecare punct se va scrie instrucţiunea SELECT corespunzătoare cererii. Se vor crea
formulare de afişare a tabelelor rezultat. Codiţiile din clauza WHERE se vor crea direct şi
cu aplicaţia Expression Builder.

2. Fie tabela ANGAJATI de mai jos. Coloanele ID şi SALARIU sunt de tip numeric,
celelalte coloane sunt de tip text.

ANGAJATI

ID NUME PRENUME FACULTATE SALARIU


100 Popescu Ioan Matematica 1100
200 Ionescu Vasile Electrotehnica 1700
136 Vasilescu George Calculatoare 1490
260 Georgescu Nicolae Istorie 820
420 Nicolae Dan Calculatoare 1600
302 Gheorghe Dan Mecanica 1420
325 Vasile Nicolae Fizica 1360
400 Popa George Chimie 1650

Se va proiecta tabela ANGAJATI. Se vor defini condiţiile de validare ID >= 100,


SALARIU >= 600.
Se vor crea formulare de interogare pentru următoarele cereri:
 să se selecteze toţi angajaţii intreprinderii,
 să se selecteze facultăţile absolvite,
 să se selecteze angajaţii cu salarii mai mari ca 1500,
 să se selecteze angajaţii cu salarii mai mici sau egale cu 1500,
 să se selecteze angajaţii ce au absolvit facultăţile Electrotehnica, Mecanica,
Calculatoare,
 să se selecteze angajaţii ce au absolvit alte facultăţi decât Electrotehnica, Mecanica şi
Calculatoare.

3. Fie tabela SITUATIE_FINANCIARA de mai jos cu datele contabile ale unei


interprinderi. Toate coloanele sunt de tip numeric.

SITUATIE_FINANCIARA

AN VENITURI CHELTUIELI
2001 420 370
2002 470 410
2003 550 500
2004 620 548
2005 705 590
2006 690 620

Fie tabela DATE_CONTABILE de mai jos cu datele contabile ale aceeaşi intreprinderi
pe următorii trei ani.

45
DATE_CONTABILE

AN VENITURI CHELTUIELI
2007 712 670
2008 722 690
2009 695 690

Să se creeze o interogare care să calculeze reuniunea celor două tabele. Se vor proiecta
cele două tabele şi se vor defini condiţiile de validare VENITURI > 0, CHELTUIELI > 0.

4. Fie tabela FACTURA_TELEFONICA de mai jos.

NUME PRENUME NUMAR_TELEFON VALOARE LUNA

Câmpurile NUME, PRENUME şi NUMAR_TELEFON sunt de tip text. Câmpurile


VALOARE şi LUNA sunt numerice. Se va proiecta tabela FACTURA_TELEFONICA.
Se vor defini regulile de validare VALOARE > 0, LUNA cuprinsă între 1 şi 12, câmpurile
NUME şi PRENUME nenule. In câmpul NUMAR_TELEFON numerele încep cu
prefixul 0251. Se vor introduce reguli de validare şi mesaje de eroare pentru fiecare
câmp. Se va crea o mască pentru numerele de telefon de forma
(0000) 000-000
 să se selecteze toate facturile telefonice cuprinse între două luni ce vor fi parametri.

1.13 Intrebări de control


1. Care este forma instrucţiunii SELECT pentru selectarea unor coloane dintr-o tabelă?
2. Care este forma instrucţiunii SELECT pentru selectarea unor linii dintr-o tabelă ce
satisfac anumite criterii?
3. Cum se crează o interogare cu parametri?
4. Cum se face sortarea liniilor tabelei rezultat?
5. Care este forma instrucţiunii UNION şi la ce se utilizează?

46

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