Sunteți pe pagina 1din 25

Curs 6 – SGBD-ul MICROSOFT ACCESS.

Obiecte de tip interogare


Interogarea unei baze de date înseamnă regăsirea şi extragerea informaţiilor stocate în
aceasta. Pentru realizarea interogărilor SGBD Access pune la dispoziţia utilizatorilor obiectele de
tip cereri (Query). Rezultatul cererii se prezintă sub forma unei foi de răspuns dinamic care
poartă numele de DynaSet. O cerere poate avea drept sursă de date unul sau mai multe tabele
ale bazei de date sau chiar o altă cerere creată anterior.
Interogările reprezintă un instrument esenţial în lucrul cu orice sistem de gestiune a
bazelor de date. Ele sunt folosite pentru selectarea înregistrărilor, actualizarea tabelelor şi
adăugarea de noi înregistrări într-un tabel. Interogările se folosesc cel mai frecvent pentru
selectarea anumitor grupuri de înregistrări care îndeplinesc anumite condiţii. De asemenea ele
pot fi folosite pentru combinarea informaţiilor din diferite tabele .
Interogările se pot crea cu ajutorul rutinei Simple Query Wizard sau prin proiectare în
fereastra Query Design. (QBE)
O cerere Access poate fi utilizată pentru:
- regăsirea şi ordonarea datelor după anumite criterii;
- efectuarea de calcule;
- actualizarea bazei de date (prin cereri de tip acţiune);
- pregătirea datelor în vederea afişării lor în formulare sau rapoarte;
2.1. Tipuri de interogări
Access permite crearea a patru tipuri de interogări:
 Interogări de tip Select pentru extragerea datelor din unul sau mai multe tabele şi de a le
afişa în formă tabelară. Interogările de tip Select nu permit actualizarea datelor selectate,
ci doar vizualizarea lor. De obicei acest tip de interogare constituie o sursă de date
pentru un raport sau formular.
 Interogări de tip Crosstab pentru sintetizarea datelor din unul sau mai multe tabele ca
foaie de calcul (asemănător cu foile de calcul Excel).
 Interogări de tip Action pentru crearea unor noi tabele, sau pentru modificarea datelor
dintr-un tabel existent. Există următoarele categorii de interogări de acţiune:
 Interogări de tip Make Table care permit crearea de noi tabele prin extragerea
informaţiilor din tabelele existente în baza de date;
 Interogări de tip Update care permit actualizarea (modificarea) datelor din tabelele
existente fără a crea tabele noi sau înregistrări noi;
 Interogări de tip Append care permit adăugarea de noi înregistrări într-o tabelă
existentă
 Interogări de tip Delete care permit ştergerea unor înregistrări dintr-o tabelă
existentă funcţie de criteriile introduse de utilizator.
 Interogările de tip Parameter care folosesc aceeaşi interogare de mai multe ori cu
parametrii diferiţi.
Dintre acestea cererile de selecţie sunt cele mai utilizate ele, asigurând utilizatorilor
posibilitatea consultării bazei de date..
2.2. Operaţii privind un obiect de tip interogare
Operaţiile privind obiectele de tip cerere se referă la crearea, utilizarea (activarea
interogării şi afişarea datelor) şi respectiv modificarea acestora.
Pentru exemplificarea cererilor de interogare din acest curs vom considerare o bază de
date pentru gestionarea produselor (stocurilor) dintr-un magazin, avand schema de mai jos:

a. Crearea unui obiect de tip interogare


Crearea unei cereri de selecţie se poate realiza în mod grafic (QBE-mod implicit) sau în mod
SQL (prin construirea unui bloc de cerere folosind limbajul declarativ Structured Query
Language).
Vom prezenta ambele moduri de construire a interogărilor bazei de date
Fiind un obiect Access, inceperea creării interogării se realizează în fereastra Database
prin activarea fişei Query (specificând astfel tipul de obiect Access pe care dorim să îl creăm) şi
apoi apăsarea butonului New, sau selectând din meniul Insert opţiunea Query.
Access oferă mai multe modalităţi de creare a cererilor. Aceste modalităţi sunt enunţate în
caseta de dialog New Query, afişată ca urmare a iniţierii operaţiei de creare a cererii:
- modul grafic de proiectare, Design View (proiectarea interogărilor utilizând
interfaţa grafică este cunoscută sub numele Query By Example);
- utilizarea asistentului pentru cereri simple, Simple Query Wizard;
- utilizarea asistentului pentru cereri încrucişate, Crossîab Query Wizard;
- utilizarea asistentului pentru căutarea înregistrărilor duplicat, Find Duplicates Query
Wizard;
- utilizarea asistentului pentru căutarea înregistrărilor care nu au corespondent în două
tabele, Find Unmatched Query Wizard.
Pentru crearea unei cereri de selecţie se alege opţiunea Design View din caseta New
Query sau a opţiunii Create query in design View , aşa cum se observă în figura următoare:

.
După alegerea modului de creare, se trece la selectarea tabelelor sursă din care se vor
extrage datele. Caseta Show Table, din figura de mai jos oferă posibilitatea precizării sursei de
date pentru construirea cererii.
Sursa de date pentru o cerere (Query) poate fi reprezentată de:
- una sau mai multe tabele;
- una sau mai multe interogări;
- tabele şi interogări.
Se vor selecta tabela/tabelele şi/sau cererile sursă şi se va acţiona butonul Add pentru a
realiza aducerea acestora în fereastra de proiectare a cererii. După a fost precizată sursa de date
se va închide fereastra Show Table prin acţionarea butonului Close. La nevoie se poate
redeschide fereastra folosind butonul Show Table din bara de instrumente sau opţiunea Show
Table din meniul Query.
După selectarea tabelelor fereastra principală Access va fi:

Sursa de
Date

Grila Query
Design

Fereastra Select Query (de mai sus ) este împărţită în două zone:
a. Zona superioară, în care se vizualizează tabelele/interogările sursă de date precum şi
relaţiile definite între acestea;
b. Grila Query Design structurată astfel:
• Linia Field: rezervată pentru definirea numelui atributului selectat;
• Linia Table: destinată precizării sursei de date;
• Linia Sort: permite precizarea sensului sortării pentru atributul din coloana respectivă;
• Linia Show: permite inhibarea afişării realizărilor câmpului respectiv;
• Linia Criteria: oferă posibilitatea precizării criteriilor de selecţie prin introducerea
expresiilor Access corespunzătoare;
• Liniile Or: permit precizarea mai multor criterii de selecţie în cazul expresiilor Access
utilizând operatorul OR.

Odată specificată sursa de date, definirea interogării de selecţie presupune parcurgerea


următorilor paşi:
1. Selectarea tipului de interogare se poate face din meniul principal, opţiunea Query:

sau de la butonul Query type de pe bara de butoane:

Obs. Butonul permite punerea în execuţie a interogării.

2. Precizarea câmpurilor (atributelor) ale căror realizări urmează să le returneze cererea. Numele
acestor atribute se vor preciza în grila Query Design în rândul Field utilizând una din
următoarele modalităţi:
• Selectarea atributului din cadrul listei Field Name ce poate fi deschisă prin acţionarea
cu mouse-ul a butonului List Box ;
• Executarea unui dublu clic de mouse asupra atributului dorit din tabela/interogarea
aflată în panoul superior;
• Metoda drag-and-drop care presupune selectarea cu mouse-ul a atributului dorit din
panoul superior şi tractarea acestuia în linia Field.
Dacă este necesar să fie aduse în panoul inferior toate atributele aparţinând unei tabele se va
proceda în unul din următoarele moduri:
• Selectarea tuturor atributelor din tabela sursă (aflată în panoul superior) printr-un
dublu clic de mouse pe numele tabelei şi glisarea atributelor în grila Design (panoul
inferior);
• Utilizarea asteriscului aparţinând tabelei sursă: trageţi cu mouse-ul asteriscul în prima
coloană Field. Chiar dacă în grila de proiectare este completată doar prima coloană Field
la execuţie interogarea va returna realizările tuturor atributelor;

Caseta Query Properties


• Utilizarea proprietăţii Output All Fields: Se va deschide caseta Query Properties

utilizând butonul Properties din bara de instrumente sau executând dublu click într-o zonă
liberă a panoului superior, în linia Output All Fields se va preciza Yes (figura de mai sus ) .
Precizarea valorii Yes pentru proprietatea Output All Fields nu va determina aducerea în
grila de proiectare a câmpurilor din tabela sursă, dar, în momentul executării cererii, DynaSet-u\
va cuprinde realizările tuturor atributelor.
În mod implicit în DynaSet, antetul coloanelor este reprezentat de numele atributului, cu
excepţia cazului în care la crearea tabelei aţi precizat o altă etichetă prin intermediul proprietăţii
Caption. Dacă doriţi afişarea în DynaSet a unei noi etichete pentru un atribut plasaţi mouse-ul în
linia Field înaintea numelui atributului, tastaţi eticheta dorită urmată de caracterul ":".

3. Se precizează criteriul de selecţie.


În mod implicit se returnează realizările tuturor tuplurilor pentru atributele specificate.
Prin introducerea unei expresii Access valide în rândul Criteria (eventual şi rândul OR). Acest
criteriu permite selectarea doar a anumitor înregistrări care îndeplinesc anumite condiţii
Introducerea expresiei Access se face prin tastare sau se construieşte prin intermediul
generatorului de expresii (Expression Builder) a cărui fereastră se deschide selectând opţiunea
Build a meniului contextual pe care îl activaţi printr-un clic dreapta de mouse în rândul Field.
Criteriile de selectare se pot construi cu ajutorul constructorului de expresii care poate fi
activat fie prin intermediul butonului “Build” de pe bara de butoane:

fie din meniul local activat cu butonul dreapta al mouseului

:
Se va pune în execuţie astfel Expression Builder:
4. Se precizează, dacă este necesar, câmpul/câmpurile după care se doreşte o eventuală
sortare şi sensul acesteia în linia Sort.

Proiectarea unei interogări de selecţie


În figura de mai sus se prezintă modul în care s-a definit interogarea de selecţie prin care
se realizează afişarea stocului pentru produsul faina. Sursa de date a cererii este reprezentată de
trei tabele ale bazei de date: Furnizori, Produse şi respectiv Stocuri.
In privinţa cererilor de selecţie care au ca sursă mai multe tabele trebuie precizat că, în
mod implicit, Access utilizează operaţia de echicompunere, fapt ce conduce la selectarea
înregistrărilor ce au corespondent în ambele tabele (interogări de tip Inner Join).
De exemplu, dacă se realizează o cerere asupra tabelelor Produse şi Stocuri, fără a se
specifica vreun criteriu, în lista rezultatelor nu vor figura decât produsele pentru care există ceva
în stoc. Dacă se doreşte realizarea unei interogări de tip Outer Join (folosind operaţia de
compunere externă) se va efectua dublu click asupra liniei de legătură dintre tabele şi, în caseta
Join Properties (ca în figura de mai jos ) se poate preciza selectarea tuturor înregistrărilor din
una dintre tabele, indiferent dacă au sau nu corespondent în cealaltă tabelă.
Pentru realizarea operaţiei de compunere pe baza unei relaţii de inegalitate (<, >, o)
a câmpurilor de legătură dintre tabele se poate folosi limbajul SQL. O cerere ce are ca sursă
două tabele între care nu există nici o relaţie va avea ca rezultat produsul cartezian al
înregistrărilor din cele două tabele.

Caseta Join Properties


5. Executarea interogării de acţiune se poate realiza în unul din următoarele moduri:

• Utilizând butonul Query View (primul în bara de instrumente);

• Utilizând butonul Run din bara de instrumente;


• Utilizând opţiunea Datasheet din meniul View;
• Utilizând opţiunea Run din meniul Query.
In Figura de mai jos este redat rezultatul executării cererii anterior proiectate.

Rezultatul unei interogari de selectie


Revenirea în modul Design se realizează prin activarea butonului Design View bara de
instrumente sau selectând din meniul View opţiunea Design View.
Salvarea interogării proiectate se poate realiza prin opţiunea Save din meniul File sau
închizând fereastra Select Query, în ambele situaţii utilizatorul fiind invitat să tasteze numele
interogării create (în mod implicit este atribuit numele Query n, unde n indică numărul cererii).

6. Modificarea unei cereri


Pentru a modifica o cerere, aceasta trebuie deschisă în modul Design. Modificările se pot
realiza inserând noi coloane sau ştergând coloane deja definite. Inserarea unei noi coloane se
efectuează selectând coloana înaintea căreia dorim să introducem noua coloană şi alegând
opţiunea Colum n din meniul Insert.
Ştergerea unei coloane din grila de proiectare se realizează selectând coloana şi acţionând
tasta Delete sau butonul Cut din bara de instrumente sau executând opţiunea Delete Column din
meniul Edit.
Modificarea unei cereri poate presupune şi extinderea sursei de date (utilizând fereastra
Show Table). De asemenea modificarea cererii poate implica şi precizarea unor formate de
afişare asociate unor coloane pentru ca datele returnate să fie uşor de parcurs (pentru precizarea
unui anumit format de afişare se va plasa cursorul mouse-ului în coloana dorită şi se va executa
clic dreapta, selectându-se din meniul contextual opţiunea Properties.
Va fi afişată caseta Field Properties (figura alăturată) în care se va putea specifica numărul
de zecimale dorit sau un format de afişare pentru câmpul respectiv.

Pe lângă modurile de vizualizare Design şi Datasheet Access permite utilizatorilor vizualizarea


şi modificarea codului SQL al interogărilor. Pentru aceasta se va apela din meniul View opţiunea
SQL View. Fraza SQL ce stă la baza cererii exemplificate anterior este prezentată mai jos:

Modificarea interogărilor în modul SQL View


Câmpuri calculate în interogări de selecţie
Interogările de selecţie pot cuprinde şi câmpuri calculate. Aceste câmpuri returnează, la
executarea interogării, valoarea expresiilor Access asociate lor.

Exemplu de camp calculat intr-o interogare


Pentru a adăuga un câmp calculat într-o interogare se tastează numele acestuia într-o
nouă coloană din grila Query Design, se adaugă două puncte: şi apoi se completează expresia
dorită.

Expresii şi operatori pentru interogări

Elementele unei expresii Access sunt:


- Operatori',
- Constantele;
- Identificatorii;
- Funcţiile.
Operatorii utilizaţi în construirea expresiilor Access se pot clasifica astfel:
• Aritmetici: +,-,*,/, Mod (returnează restul împărţirii la un întreg), A (ridicare la putere).
• De atribuire şi comparare: =, <, >, <=, >=, < >.
Aceşti operatori returnează valorile logice True şi False., Excepţie reprezintă cazul în care unul
dintre operatori are valoarea Null şi deci, orice comparare va returna valoarea Null.
• Logici: And, Or, Not. Se pot utiliza pentru construirea expresiilor Access compuse.
• De concatenare a şirurilor de caractere: +, &.
 Operatori de identificare
Operatorii de identificare , ! şi . , sunt specific programului Access. Operatorul ! se mai
numeşte şi operatorul bang. Ei sunt folosiţi în următoarele situaţii:
 Combinarea denumirilor claselor de obiecte şi a denumirilor obiectelor pentru a
selecta un anumit obiect sau a proprietăţii unui obiect. Exemplu:
Forms!Note.TEXT2
 Deosebirea denumirilor obiectelor de denumirea proprietăţilor; exemplu:
Textbox1.Fontsize=10
 Identificarea anumitor câmpuri din tabele : studenti!marca
Caracterul ! este folosit pentru separarea referinţelor de obiecte. Sintaxa:
Clasa_obiect!Denumire_obiect.
Caracterul . separă obiectele şi proprietăţile sau metodele acestora, sintaxa fiind:
Clasa_Obiect!Obiect.Proprietate sau Clasa_Obiect!Obiect.Metoda
Alţi operatori
Operator Descriere Exemplu
Folosit cu valoarea logică Null pentru a stabili dacă o Is Null
Is
valoare este Null sau nu Is Not Null
Determină dacă un şir de caractere începe cu un Like “EXE*”
Like
anumit prefix Like “FILE????”
Determină dacă o valoare de tip şir apare într-o listă
In X In (“ABC”,”ggg”,”FILE”)
de valori
Determină dacă o valoare numerică sau o dată
Between calendaristică se găseşte într-un anumit interval de Between 1 and 6
valori

Expresiile Access utilizând operatorul Like permit specificarea unor criterii de selecţie prin
căutarea unui şir într-un text. în interiorul textului se pot folosi caracterele generice ? (poate
înlocui orice caracter în poziţia în care apare) şi * (orice în poziţia în care apare şi în
următoarele).
Astfel expresia Like "Tom*" selectează toate numele care conţin pe primele trei poziţii
caracterele "Tom", iar expresia Like u*escu" va permite selecţia numelor terminate în "eseu".
Operatorul In precizează mulţimea de valori admise pentru un atribut. Interogarea din Figura 4.
22 va selecta clienţii de tip SRL (a căror denumire se termină cu aceste trei caractere) ce au
comandat produsele "cablu telefonic" sau "banda izolanta".

Fig 4.24
Constantele utilizate în construirea expresiilor Access pot fi de natură:
• numerică (ex:1200,5,0) ;
• text (ex:"123", "TOMA ION", ”str. Viilor 15”);
• Dată calendaristică (ex: #12.31.01# ceea ce indică data de 31 decembrie 2001).
Identificatorii sunt nume de obiecte Access (tabele, atribute, formulare,etc) ca de exemplu

[Produse]! [cod produs].


Prin intermediul identificatorilor se pot prelua valori pentru definirea criteriilor de pe formulare
create anterior. Exemplul din Figura 4. 23 prezintă o interogare ce va afişa comenzile şi data
comenzilor pentru un produs a cărui nume a fost selectat într-o caseta' de tip LisîBox (numită
ListaProdu.se) pe un formular numit Selecţie.
Funcţiile care pot fi de natură:
• Dată calendaristică : Date() Month(), Year (), etc. Exemple:
Date() returnează data curentă;
Month(Date()} returnează numărul lunii calendaristice curente.
Year(Date(*)) returnează anul curent.
• De tip text: Len() - returnează lungimea unui şir, Trim() - elimină spaţiile de la începutul şi de
la sfârşitul unui şir, Left() - returnează primele n caractere de la începutl unui şir, etc.
• Matematice şi trigonometrice: ABS() - returnează valoarea absolută a unui număr, INT() -
returnează partea intreagă dintr-o valoare numerică, ROUND() -rotunjeşte o valoare cu un
anumit număr de zecimale,SUM() - calculează suma, AVG() - calculează media, etc.
• Financiare: PV() returnează valoarea actuală a unei anuităţi plătite în rate periodice egale,
SLN() returnează valoarea amortizarea unui mijloc fix după o anumită perioadă (amortizare
liniară) etc.
• Funcţii diverse: ISNUMERIC(), ISNULL(), etc.
Expresii pot fi utilizate într-o interogare de selecţie fie drept criterii de selecţie fie pentru a
calcula anumiţi indicatori. Expresia poate fi tastată în rândul Field al unei coloane (exemplul din
Figura 4. 20) sau poate fi construită cu ajutorul generatorului de expresii (a cărui fereastră se
activează efectuând clic dreapta în linia Field şi selectând din mediul contextual opţiunea Build).
Exemplul din Figura 4. 24 prezintă utilizarea generatorului de expresii pentru a calcula valoarea
fiecărui produs de pe o comandă.

Fereastra Expresion Builder cu un alt exemplu


Parametrizarea interogărilor
Interogările de selecţie prezentate până în acest moment returnează întotdeauna tuplurile
din tabelele sursă care corespund unei anumite cereri fixe: clienţii trebuie să aibă domiciliul în
Bucureşti sau Ploieşti iar data livrării să fie anterioare datei curente (vezi exemplul de interogare
de selecţie prezentat într-un paragraf anterior). De multe ori însă, ar fi utilă o interogare al cărei
criteriu de selecţie să poată fi precizat la nivel general şi particularizat de utilizator în funcţie de
necesităţile sale de informare (precizându-se concret ce realizări ale atributului sunt căutate)
chiar în momentul execuţiei cererii. O astfel de interogare se caracterizează prin faptul că în grila
Design, pe coloana dorită, în linia Criteria, se va preciza între paranteze drepte un mesaj ce
urmează a fi afişat la executarea cererii permiţând ca utilizatorul să introducă criteriul de selecţie
dorit. Parametrii pot fi utilizaţi nu doar în rândul de criterii, ci şi în formulele câmpurilor
calculate, dacă se doreşte introducerea unui termen variabil în expresii.
Practic în aceste interogări se doreşte ca expresia (criteriul) din interogare să fie variabil
de la o execuţie la alta se poate crea o interogare cu parametru. În acest caz criteriile sunt
introduse în caseta de dialog Enter Parameter Value. Se deschide interogarea în mod design
view, şi în câmpul criteria se introduce un text între paranteze drepte.

Acest text va fi afişat în caseta de dialog Enter Parameter Value în momentul în care se
pune în execuţie interogarea, iar utilizatorul poate introduce criteriul de selecţie în mod dinamic,
la execuţie.

Traducerea SQL va fi:


SELECT studenti.marca, studenti.nume, studenti.DataN, profile.cod_prof,
special.cod_spec
FROM ((profile INNER JOIN (ani INNER JOIN PLANE ON ani.an = PLANE.as) ON
profile.cod_prof = PLANE.cod_prof) INNER JOIN special ON (special.cod_spec =
PLANE.cod_spec) AND (profile.cod_prof = special.cod_prof)) INNER JOIN studenti ON
(ani.an = studenti.an_s) AND (special.cod_spec = studenti.cod_spec) AND (profile.cod_prof =
studenti.cod_prof)
WHERE (((studenti.DataN) Between #1/1/1970# And #1/1/1980#) AND
((profile.cod_prof)=[Introduceţi cod profil:]));
Interogări de sintetizare a datelor (gruparea datelor )
Pe lângă posibilitatea de a utiliza expresii pentru a adăuga câmpuri calculate în interogări,
Access permite utilizatorilor realizarea unor cereri prin intermediul cărora se pot aplica funcţii
unor înregistrări grupate după criterii prestabilite. Prin intermediul acestor query cu rol de
sintetizare a datelor se pot construi cu uşurinţă cereri care să returneze totalul, media, minimul
sau maximul unor grupuri de tupluri.
Pentru a realiza o cerere de sintetizare a datelor se va elabora interogarea de selecţie
aducându-se în grila Query Design câmpurile necesare şi adăugându-se eventualele câmpuri
calculate, după care se va apăsa butonul Totals din bara de instrumente. Ca rezultat al acestei
operaţii, în grila Query Design, va fi disponibil un nou rând intitulat Total, în mod implicit,
gruparea datelor după valorile câmpului toate coloanele vor avea selectată în linia total opţiunea
Group By care conduce la respectiv. Se va păstra opţiunea Group By în dreptul câmpurilor de
grupare, urmând ca pentru celelalte câmpuri să fie selectată din lista de selecţie funcţia dorită.
Lista conţine nouă funcţii de tip agregat ce sunt prezentate în tabelul următor:
Funcţia Returneaza Tipul de câmpuri pentru care se poate aplica
AVG Media aritmetică Number, Date, Currency, AutoNumber
COUNT Numărul total de valori Toate tipurile
FIRST Prima valoare Toate tipurile
LAST Ultima valoare Toate tipurile
MAX Valoarea maximă Text, Number, Date, Currency, AutoNumber
MIN Valoarea minimă Text, Number, Date, Currency, AutoNumber
STDEV Deviaţia standar a Number, Date, Currency, AutoNumber
valorilor
SUM Suma valorilor Number, Date, Currency, AutoNumber
VAR Varianta valorilor Number, Date, Currency, AutoNumber

Pe lângă aceste funcţii mai sunt disponibile opţiunile WHERE şi EXPRESSION.


- Opţiunea Where se va utiliza dacă un câmp trebuie utilizat pentru a preciza anumite criterii
de selecţie, dar nu se doreşte efectuarea grupării după câmpul respectiv.
- Opţiunea Expression se va utiliza pentru câmpurile calculate ce returnează un singur rezultat
la nivelul grupului.

Interogări de tip Crosstab


Interogările Crosstab sunt interogări sintetice cu ajutorul cărora se poate determina cu
exactitate modul în care sunt afişate pe ecran datele sintetice. Interogările Crosstab afişează
datele sintetice în forma tradiţională a foilor de calcul tabelar asemănătoare cu tabelele pivot din
Excel.
Practic, este posibilă elaborarea unor tabele în care gruparea şi ordonarea datelor se
realizează atât pe linii cât şi pe coloane la intersecţia cărora se pot efectua calcule complexe.
Etapele ce trebuie urmate pentru realizarea unei astfel de cereri de interogare sunt
următoarele :
1. Elaborarea unei interogări de selecţie în modul Design View. Se vor alege tabelele ce conţine
datele şi se vor selecta câmpurile dorite pentru afişare şi eventualele câmpuri pentru care se vor
impune restricţii.
2. Din meniul Query se va selecta opţiunea CrossTab Query ce va avea ca efect imediat afişarea
liniilor Total şi Crosstab în grila interogării.
3. Se va specifica modul de agregare a datelor, respectiv funcţiile totalizatoare în linia Total.
4. In linia CrossTab se va opta pentru Row Heading în cazul câmpurile ce vor fi afişate pe liniile
tabelului, Column Heading pentru câmpul ce va fi afişat pe verticală, şi Value pentru valorile ce
vor fi afişate la intersecţia liniilor cu coloanele. Este permisă existenţa mai multor câmpuri
ordonate pe orizontală (Row Heading), dar a unui singur câmp Column Heading şi a unui singur
câmp Value
Exemplu: O interogare care va avea ca rezultat un tabel sintetic cu rezultatele la examene
ale unei specializări ar putea avea următoarea structură:

Pentru a crea o interogare se selectează câmpurile dorite din unul sau mai multe tabele,
apoi se specifică unul dintre câmpuri ca fiind de tipul „Column Heading”, unul sau mai multe
câmpuri, de tipul „Row Heading” şi unul de tip „value”.
Câmpul de tip „value” va apare la intersecţia unei linii cu o coloană; pentru acest câmp se
specifică o funcţie agregat ca de exemplu Sum, Count, etc din linia Total. Celelalte câmpuri, care
apar în tabelul sintetic vor avea clauza „Where” în linia Total şi vor fi folosite la specificarea
unor criterii din interogare.

Interogări tip acţiune


Pe lângă interogările pentru selecţia datelor şi cele de tip CrossTab care au fost
exemplificate în paragrafele anterioare, S.G.B.D. Access pune la dispoziţia utilizatorilor o
categorie distinctă de interogări care permit manipularea şi actualizarea înregistrărilor.
Extrem de utile în exploatarea bazei de date acestea pot avea ca rezultat:
* Crearea de noi tabele (Make Table Query)
* Actualizarea datelor (Update Query)
* Adăugarea de noi înregistrări (Append Query)
* Ştergerea înregistrărilor (Delete Query)
Modul de elaborare a unei interogări tip acţiune este similar celui prezentat în cazul
interogărilor de selecţie, presupunând ca etapă suplimentară specificarea explicită prin
intermediul meniului Query a tipului de cerere dorit.
Modificările asupra bazei de date sunt efectuate doar în momentul execuţiei interogării
care se poate realiza prin apăsarea butonului din bara de instrumente Query Design
sau prin deschiderea interogării în fereastra Database .
Este recomandată proiectarea în prealabil a cererii ca o simplă interogare de selecţie şi
verificarea rezultatelor ce vor fi afectate deoarece nu există posibilitatea revenirii în cazul
ştergerii sau modificării eronate a înregistrărilor .
Interogări de tip Make Table
La crearea acestor tipuri de interogări, după includerea tabelelor sursă şi alegerea tipului
de interogare „Make table”, Access va solicita utilizatorului numele tabelului de date care se va
crea:

Noul tabel va prelua din tabelele existente toate câmpurile selectate în linia Field din
tabelele existente, eventual cu specificarea unui criteriu.
Traducerea SQL va fi:
SELECT studenti.marca, profile.cod_prof, special.cod_spec, ani.an, PLANE.cod_disc
INTO [note]
FROM ani INNER JOIN (((profile INNER JOIN PLANE ON profile.cod_prof =
PLANE.cod_prof) INNER JOIN special ON (special.cod_spec = PLANE.cod_spec) AND
(profile.cod_prof = special.cod_prof)) INNER JOIN studenti ON (special.cod_spec =
studenti.cod_spec) AND (profile.cod_prof = studenti.cod_prof)) ON (ani.an = studenti.an_s)
AND (ani.an = PLANE.as);

Interogări de tip Update


Aceste tipuri de interogări permit actalizarea datelor dintr-un tabel sau mai multe tabele.
După alegerea tipului de interogare “Update Query” şi specificarea câmpurilor care se vor
actualiza, în linia Update To se va introduce expresia care va actualiza câmpul respectiv,
eventual cu specificarea unui criteriu, ca în exemplul următor:
În limbaj SQL:
UPDATE [note] SET [note].nota_fin = Int(0.6*[note]![nota_ex]+0.4*[note]![nota_lab]+0.5)
WHERE ((([note]![nota_ex])>=5) AND (([note]![nota_lab])>=5));
Trebuie menţionat că în cadrul interogărilor Update nu sunt admise modificări asupra
câmpurilor cheie primară sau modificări ce ar putea conduce la nerespectarea restricţiilor de
integritate. O situaţie ce ar putea genera erori survine atunci când, în cazul câmpurilor de tip text,
valoarea rezultată depăşeşte lungimea câmpului din tabelă, în acest caz valoarea va fi trunchiată
din partea dreaptă.

Interogări de tip Delete


Interogările de tip delete permit ştergerea înregistrărilor dintr-o tabelă de date, eventual
cu specificarea unui criteriu. Se vor selecta tabelele sursă pentru interogare, apoi se va selecta
tabela din care se fac ştergerile astfel: se poziţionează mouse-ul pe caracterul * de la tabelul din
care se vor face ştergerile, apoi se trage acest caracter până în prima coloană; restul câmpurilor
care se vor introduce vor fi utilizate doar la specificarea unui criteriu de ştergere. Se observă că
pe linia Delete a apărut clauza From în dreptul tabelului din care se fac ştergerile, iar în dreptul
celorlalte câmpuri a apărut clauza Where, care specifică o condiţie.
În limbaj SQL:
DELETE studenti.*, ani.an
FROM ani INNER JOIN ((profile INNER JOIN special ON profile.cod_prof =
special.cod_prof) INNER JOIN studenti ON (special.cod_spec = studenti.cod_spec) AND
(profile.cod_prof = studenti.cod_prof)) ON ani.an = studenti.an_s WHERE (((ani.an)="5"));

INTEROGĂRI PENTRU ADĂUGAREA DE ÎNREGISTRĂRI


Interogările pentru adăugare oferă utilizatorilor posibilitatea inserării de noi înregistrări în
tabelele pornind de la înregistrările existente.
Pentru a realiza o interogare de tip Append este necesară parcurgerea următoarelor etape:
1. Elaborarea unei interogări de selecţie în modul Design View. Se va alege tabela ce conţine
datele şi vor fi luate în calcul doar câmpurile ce conţin valorile ce vor fi adăugate, iar, în cazul în
care se doreşte aplicarea unor criterii de selecţie a acestora, se vor adăuga câmpurile de
restricţionat.
2. Se vor tasta eventualele condiţii în linia de criterii a interogării.
3. Din meniul Query se va selecta opţiunea Append Query ce va conduce la afişarea casetei
Append în care se va selecta numele tabelei în care dorim adăugarea.
4. Transformarea interogării de selecţie într-o interogare de adăugare are ca efect imediat
apariţia rândului Append To în fereastra de proiectare a interogării, în acest rând se va specifica
pentru fiecare câmp din tabela ce conţine datele denumirea câmpului corspondent din tabela
unde vor fi adăugate.

4. Folosirea SQL în Access


Limbajul SQL este limbajul comun pentru gestiunea bazelor de date client-server.
Principalul său avantaj este faptul că este un limbaj standardizat, putându-se folosi un set comun
de instrucţiuni în toate sistemele de gestiune a bazelor de date compatibile SQL.
SQL este un limbaj de aplicaţie pentru bazele de date relaţionale, nu un limbaj de
programare.
Sintaxa SQL
Comenzile SQL se impart în şase categorii:
1. Data Query Language (DQL) cuprinde comenzi care returnează date din tabele şi
determină modul în care sunt prezentate rezultatele. Comanda SELECT este
principala comandă din această categorie.
2. Data Manipulation Language (DML) conţine comenzile INSERT şi DELETE
care permit adăugare sau ştergere de rânduri întregi precum şi comanda
UPDATE care modifică datele din coloanele specificate de rânduri.
3. Transaction Processing Language (TPL) cuprinde comanzile: BEGIN
TRANS[ACTION], COMMIT TRANS[ACTION|WORK] şi ROLLBACK
TRANS[ACTION|WORK], care grupează mai multe operaţii DML. Dacă
operaţia DML a unei tranzacţii nu reuşeşte, operaţiile DML precedente sunt
anulate (derulate înapoi) .
4. Data Definition Language (DDL) include instrucţiunea CREATE TABLE care
defineşte structura tabelelor. Comenzile DDL se pot folosi pentru modificarea
tabelelor precum şi pentru crearea şi ştergerea indexurilor. Pentru crearea
indexurilor se foloseşte comanda CREATE INDEX.
5. Cursor Control Language (CCL) permite selectarea pentru procesare a unui
singur rând din setul de rezultate al interogării..
6. Data Control Language (DCL) efectuează funcţii administrative cum ar fi
acordarea şi ridicarea privilegiilor de folosire a bazei de date (GRANT şi
REVOKE).

Cuvintele cheie se clasifică în:


 Comenzi (ex. SELECT)
 Calificative (ex. WHERE)
 Clauze (ex. ORDER BY)
 Operatori (Operatorii cunoscuţi sau JOIN)
 Funcţii pentru sintetizarea grupurilor (ex. MIN())
 Alte cuvinte cheie

4.1. Scrierea interogărilor de selectare cu SQL

Se foloseşte o instrucţiune SELECT care returnează un tabel de interogare (denumit set


de rezultate). Sintaxa:

SELECT [ALL|DISTINCT|DISTINCTROW] [TOP n [PERCENT]] lista_selectie


FROM lista_tabele
[WHERE conditie]
[ORDER BY criteriu [ASC|DESC]]
unde:
lista_selectie determină câmpurile care se vor include în rezultatul interogării (sunt cele
din linia Fields în mod Design, validate cu caseta de validare show).
Calificativele opţionale ALL, DISTINCT şi DISTINCTROW specifică dacă sunt permise
rânduri cu acelaşi conţinut sau nu.
Modificatorul opţional TOP n [PERCENT] limitează rezultatele interogării la primele n
rânduri sau la n procente din totalul rezultatelor interogării.
FROM TABLE lista_tabele specifică sursa de tabele a interogării.
WHERE condiţie filtrează rezultatele interogării
ORDER BY criteriu specifică ordinea de sortare a unui obiect din sursa de date a
interogării.
Exemplu:
SELECT nume, marca FROM studenţi WHERE dataN LIKE “*/*/1980”
ORDER BY nume;

În SQL toate instrucţiunile se încheie cu caracterul “;”.

Folosirea semnelor de punctuaţie şi a simbolurilor din SQL


 Virgula se foloseşte pentru separarea membrilor unei liste
 Parantezele drepte se folosesc atunci când denumirea unui obiect include
caractere albe
 Dacă sunt mai multe tabele sursă se foloseşte caracterul punct ca delimitator
(ex. Studenti.marca)
 Ghilimelele “ se folosesc pentru valori de tip text
 Caracterele % şi * permit substituirea cu un singur caracter sau cu mai multe.
 Caracterul # se foloseşte în operatorul LIKE pentru reprezentarea unei
singure cifre, sau pentru delimitarea valorilor de tip Date/Time din expresii

4.2. Crearea unei interogări cu instrucţiuni SQL în Access.

1. Se deschide baza de date dorită (de ex. Studenţi), apoi o interogare în Design View
2. Se închide Show Table fără a selecta un tabel.
3. Se deschide SQL View.
4. Se scrie instrucţiunea (SELECT de ex.)

4.3. Folosirea funcţiilor agregate din SQL.


Aceste funcţii se folosesc pentru a calcula totalul, media sau alte date statistice pentru
grupurile de înregistrări cu o valoare de atribut comună (se va adăuga clauza GROUP BY). Se
poate limita şi mai mult rezultatul clauzei GROUP BY folosind calificativul opţional HAVING.
Sintaxa:
SELECT [ALL|DISTINCT|DISTINCTROW]
Functie_agregat(camp) AS nume_alias
[, lista]
FROM nume_tabele
[WHERE condiţie]
GROUP BY criteriu_grupare
[HAVING criteriu_agregat]
[ORDER BY criteriu_sortare]

unde câmpul folosit ca parametru într-o funcţie agregat trebuie să fie numeric.
Ex:
SELECT Avg(nota_fin) AS media, cod_disc FROM [note]
WHERE cod_spec="CE" AND an="1" GROUP BY cod_disc
ORDER BY Avg(nota_fin) DESC;
Se obţine ca rezultat media pe discipline a unei specializări (CE).

4.4.Crearea uniunilor cu SQL.

Se utilizează structura JOIN ON care specifică tabelul care trebuie unit şi relaţia dintre
câmpuri.
Sintaxa:
SELECT [ALL|DISTINCT|DISTINCTROW]
From nume_tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura
ON criteriu_legatura
[ nume_tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura
ON criteriu_legatura ]
[WHERE conditie]
[ORDER BY criteriu]
SELECT DENUMIREG, NUME, PRENUME
FROM GRUPE INNER JOIN STUDENTI
ON GRUPE.CODGRUPA=STUDENTI.CODG

unde: nume_tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura specific[ denumirea


tabelului cuplat cu celelalte tabele. Fiecare tabel care participă într-o uniune trebuie introdus
înaintea clauzei JOIN. INNER defineşte o uniune internă, LEFT, RIGHT definesc uniuni
externe.
ON criteriu_legatura defineşte cele două câmpuri care trebuie unite şi relaţia dintre ele.

Exemplu: Testaţi efectul instrucţiunii:

SELECT nume, studenti.marca, nota_fin, cod_disc


FROM studenti INNER JOIN [note] ON studenti.marca=note.marca
WHERE (studenti.cod_spec="CE") and (note.cod_disc=1407)
ORDER BY studenti.nume;

4.5. Creare interogări de acţiune cu SQL

4.5.1. Interogări Update


Sintaxa:

UPDATE tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura


ON criteriu_legatura
[ nume_tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura
ON criteriu_legatura ]
SET camp=expresie [, camp=expresie]
[WHERE conditie]
UPDATE ANGAJATI SET SALARIU = 1.25*SALARIU WHERE
TIP_ANG=”TESA”;
4.5.2. Interogări Make table

SELECT lista_câmpuri
INTO tabel_nou
FROM tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura
ON criteriu_legatura
[ nume_tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura
ON criteriu_legatura ]
[WHERE conditie]

4.5.3. Interogări de tip Append

INSERT INTO table_destinaţie


SELECT [ALL|DISTINCT|DISTINCTROW]
From nume_tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura
ON criteriu_legatura
[ nume_tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura
ON criteriu_legatura ]
[WHERE conditie_adaugare]
[ORDER BY criteriu]
INSERT INTO tabel (Lista_campuri) VALUES (listavalori)
Insert Into rezultate (Matricol, CodCurs, NotaEx, NotaLab) values
(2,4,8,9);
4.5.4. Interogări de tip Delete

DELETE FROM tabel


[WHERE conditie_stergere]

Interogări de tip Crosstab


TRANSFORM functie_agregat(camp) [AS alias]
SELECT [ALL|DISTINCT|DISTINCTROW]
From nume_tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura
ON criteriu_legatura
[ nume_tabel {INNER|LEFT|RIGHT} JOIN tabel_legatura
ON criteriu_legatura ]
PIVOT câmp

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