Documente Academic
Documente Profesional
Documente Cultură
Interogarea Bazelor de Date
Interogarea Bazelor de Date
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ă.
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;
PROIECT_ANGAJAT
2
Figura 1. Proiectarea tabelei PROIECT_ANGAJAT.
Tabela cu date este cea din Figura 2.
3
Figura 3. Fereastra Database cu opţiunea Queries selectată.
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,
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.
7
Figura 9. Instrucţiunea SELECT corespunzătoare formularului proiectat anterior.
SELECT *
FROM nume_tabela
WHERE conditie
ORDER BY nume_coloana_1 [ASC | DESC] [, nume_coloana_2 [ASC | DESC] …];
8
1.3 Crearea unui formular de interogare în modul Design View
Fie din nou tabela PROIECT_ANGAJAT repetată mai jos
PROIECT_ANGAJAT
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.
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.
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,
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.
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.
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.
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.
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.
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.
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
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.
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.
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
23
Tabelul 4. Mesaje pentru introducerea parametrilor.
Rezultatul interogării este tabela din Figura 33.
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.
25
Figura 36. Caseta de mesaj pentru introducerea parametrului.
Rezultatul interogării este tabela din Figura 37.
SELECT coloane
FROM nume_tabela_1
UNION
SELECT coloane
FROM nume_tabela_2;
SITUATIE_FINANCIARA
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,
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
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
Vom exemplifica utilizarea acestor funcţii la tabela VANZARI, proiectată în Figura 40.
Tabela cu date este cea din Figura 41.
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,
29
Figura 43. Fereastra aplicaţiei Expression Builder.
4. selectăm argumentul “expr” al funcţiei Sum cu un clic, ca în Figura 44,
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,
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.
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;
33
Figura 53. Tabela CHELTUIELI.
Vrem să afişăm cheltuielile sumarizate, pe categorii şi pe trimestre ca în tabela de mai jos
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.
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
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.
41
Figura 64. Proiectarea interogării.
4. clic pe butonul Run, şi se obţine tabela din Figura 65.
42
Figura 66. Proiectarea interogării
Tabela rezultată din interogare este cea din Figura 67.
43
Figura 68. Meniul Format al unei interogări.
PROIECTE_ANGAJATI
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
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.
46