2. Cereri de interogare utilizând mai multe tabele
3. Cereri de interogare de tip "Analiza încrucisata"
4. Cereri de interogare de tip "actiune"
5. Cereri de interogare parametrate
Interogarea bazei de date se poate face în mai multe moduri:
q prin vizualizarea în totalitate a continutului tabelelor (foaia de date asociate tabelei);
q prin vizualizarea partiala sau totala a continutului tabelelor cu ajutorul unor formulare sau situatii finale;
q prin cereri explicite.
Primele doua moduri pot fi catalogate ca interogari simple, fara restrictii si pot fi formulate pentru o singura tabela. Interogarea prin cereri explicite este complexa, comportând în general mai multe tabele, ale caror date sunt filtrate prin intermediul unor criterii. Ultima modalitate este implementata în ACCESS prin componenta numita cerere de interogare (query), care poate fi de cinci feluri: selectie (select), analiza încrucisata (crosstab), actiune (action), SQL (Structured Query Language) si parametrata (parameter).
Rezultatul executiei unei asemenea cereri este plasat într-o foaie de raspuns, asemanator foii de date asociate unei tabele.
Avantajele oferite de modul de interogare a bazei de date prin cereri sunt:
selectia câmpurilor din tabele si a înregistrarilor acestora pe baza unor criterii impuse de necesitatile informationale;
ordonarea rezultatelor dupa anumite criterii;
introducerea unor câmpuri calculate pe baza unor formule, care folosesc drept operanzi alte câmpuri existente în tabele, precum si posibilitatea determinarii de totaluri pe anumite câmpuri;
utilizarea într-o cerere a mai multor tabele;
modularitatea cererilor în sensul ca foaia de raspuns (rezultatul) a unei cereri poate fi folosita ca intrare pentru o noua cerere;
crearea unor formulare si situatii finale (reports), care au la baza cereri de interogare (create anterior);
posibilitatea generarii de reprezentari grafice pe baza unor cereri de tip analiza încrucisata.
Crearea unei cereri de interogare se poate face în mai multe feluri:
proiectarea pas cu pas a cererii în modul Design view (fereastra de proiectare);
utilizând instrumentul wizard; 20420j910u
exprimarea cererii în limbajul SQL;
crearea unui filtru si salvarea acestuia ca cerere de interogare.
Pentru a crea o cerere de interogare pas cu pas în modul Design view:
În fereastra Database se realizeaza clic pe <Queries> si <New>;
În caseta de dialog New Query se executa clic pe Design view si apoi <OK>.
În caseta de dialog Show Table se executa clic pe tab-ul care da lista obiectelor bazei de date (tabele, cereri).
Dublu clic pe numele
fiecarui obiect pe care vrem sa-l folosim si apoi clic pe <Close>.
Fereastra de lucru este structurata în doua parti:
cea de sus care afiseaza structura tabelelor/cererilor selectate la punctul 4 si eventualele legaturi dintre ele;
cea de jos numita grila de proiectare (design grid), în care se va construi cererea din punct de vedere structural si functional; aceasta mai este cunoscuta si sub numele de grila QBE (Query By Exemples).
Cererea de interogare Materiale în fereastra de proiectare
Daca avem mai multe tabele si/sau cereri de interogare, trebuie sa ne asiguram ca între ele exista legaturile necesare pentru a raspunde cerintelor impuse de noua cerere de interogare.
Daca nu exista legaturile necesare între tabele, se stabilesc prin glisarea mouse-ului de pe câmpul de legatura din tabela principala spre câmpul de legatura din tabela secundara; câmpurile numerice de legatura Field Size trebuie sa fie: byte, integer sau long integer.
În functie de
sursa acestora, câmpurile din structura unei cereri sunt de doua feluri: preluate din tabele/cereri sau calculate. Trecerea câmpurilor preluate
din tabele/cereri în grila de proiectare se face prin deplasarea mouse-ului din
lista de câmpuri în celulele din linia Field.
Aceasta trecere poate fi partiala sau totala, în
functie de rezultatul final urmarit.
Trecerea tuturor câmpurilor dintr-o tabela/cerere în grila de proiectare
se poate face în 2 moduri:
dublu clic în bara de titlu a listei de câmpuri, clic în lista de câmpuri (oriunde) si apoi deplasarea în grila de proiectare;
prin deplasarea caracterului (care se gaseste în capatul listei) în grila de proiectare.
Ordonarea datelor într-o cerere se poate face crescator sau descrescator, dupa unul sau mai multe câmpuri. Pentru aceasta se realizeaza clic în celula de la intersectia coloanei câmpului cu caseta Sort si apoi se alege între Ascending sau Descending. În cazul în care se specifica mai multe câmpuri de ordonare (chei de sortare), operatia se executa începând cu primul câmp din stânga si continuând cu celelalte spre dreapta pâna la ultimul. Ordinea câmpurilor de sortare influenteaza rezultatul acestei operatii.
Criteriile de selectie se introduc în celula aflata la intersectia coloanei câmpului cu linia Criteria din grila de interogare. Acestea pot fi simple sau compuse (cu ajutorul operatorilor AND/OR) si pot utiliza o serie de cuvinte rezervate si expresii definite de utilizatori.
apartenenta la un interval de valori: BETWEEN valoare_inferioara AND valoare_superioara;
apartenenta la o lista de valori: IN ( valoare 1, valoare 2,..);
utilizarea operatorilor de comparatii: < > < > < >
utilizarea operatorilor de negatie: NOT valoare;
selectia înregistrarilor care contin sau nu valori: NOT NULL, IS NOT NULL sau NULL, IS NULL;
selectia dupa o data relativa la data curenta: DATE( ).
BETWEEN 50000 AND 90000 în câmpul Pret unitar semnifica materialele cu o valoare în intervalul
IN (223,224,225,500) în câmpul Cod material va selecta doar acele materiale ale caror coduri se afla în lista.
"buc" în câmpul Unitate de masura va selecta doar materiale exprimate în bucati.
Forms! Nume-formular Nume-câmp
Crearea unor câmpuri calculate:
se selecteaza coloana si se introduce comanda <View, Totals( )>, care va introduce în grila de proiectare linia TOTALS, daca nu exista;
se selecteaza Expresion;
în prima linie Field se introduce formula de calcul care are forma generala:
Nume-rezultat: Câmp1 Operator-aritmetic Câmp2
se creeaza o cerere care va contine numai câmpurile asupra carora vor actiona operatiile de calcul;
se introduce comanda <View, Totals>, ceea ce va duce la afisarea în grila de proiectare a unei noi linii TOTALS care va contine pentru toate câmpurile operatia Group by;
se înlocuieste operatia Group by din fiecare celula cu cea dorita (prin alegerea din lista);
se introduce comanda <Query, Run> pentru vizualizarea rezultatului.
Operatii de calcul predefinite în ACCESS
Operatia |
Functia |
Tipul de câmpuri |
SUM |
Suma valorilor unui câmp |
Numeric, Autonumber, Data si Logic |
AVG |
Media aritmetica |
Numeric, Autonumber, Data si Logic |
MIN |
Valoarea minima |
Numeric, Autonumber, Data,Logic si Texte |
MAX |
Valoarea maxima |
Numeric, Autonumber, Data, Logic si Texte |
COUNT |
Numarul de valori dintr-un câmp |
Toate tipurile |
STDEV |
Varianta valorilor unui câmp |
Numeric, Autonumber, Data si Logic |
FIRST |
Prima valoare din câmp |
Toate tipurile |
LAST |
Ultima valoare din câmp |
Toate tipurile |
Cererea de interogare Intrari
Activarea unei cereri se poate face în doua moduri:
q prin butonul Open din fereastra Database;
q printr-un formular sau o situatie finala care foloseste rezultatul cererii.
Ori de câte ori vom activa cererea respectiva prin butonul <Open>, vom obtine foaia de raspuns care rezulta în urma executiei acesteia si care va fi diferita în timp în functie de starea bazei de date din acel moment. Prin urmare foaia de raspuns are o existenta temporara pe perioada activarii cererii al carui rezultat este.
Foaia de raspuns aferenta cererii de interogare Intrari
În mod implicit câmpurile preluate din tabele/cereri vor avea acelasi nume ca si la sursa dar exista posibilitatea schimbarii acestora. În acest sens se realizeaza clic în fata primei litere din numele câmpului (din structura cererii din grila de interogare) si se introduce noul nume urmat de caracterul ":", care-l va delimita de numele vechi (deplasat în dreapta). În aceasta situatie, în urma activarii cererii, în foaia de raspuns va aparea numele nou. Daca în timp, în anumite situatii unele câmpuri din structura cererii nu intereseaza utilizatorul, acestea pot fi mascate prin clic la intersectia coloanei câmpului cu linia casetei Show.
2. Cereri de interogare utilizând mai multe tabele
Pentru formularea unor cereri de interogare bazate pe mai multe tabele, este necesar ca acestea sa fie legate prin intermediul unor câmpuri. Aceste relatii între tabele se pot stabili fie în momentul definirii structurii bazei de date (structura tabelelor), prin comanda <Tools, Relationships> sau în timpul formularii unei cereri de interogare prin aducerea tabelelor necesare în zona de lucru si stabilirea legaturilor necesare. Prima modalitate genereaza relatii permanente între tabele, care permit totodata definirea restrictiilor de integritate referentiala, cea de-a doua genereaza relatii temporare, valabile numai pentru cererea în cauza si care nu permit verificarea restrictiilor de integritate referentiala.
În ambele cazuri relatiile între tabele se stabilesc prin punerea în corespondenta a unui câmp dintr-o tabela sursa (principala) cu un alt câmp din tabela destinatie (secundara). Cele doua câmpuri trebuie sa fie de acelasi tip si dimensiune si pot fi chei primare sau externe.
Stabilirea unei relatii între doua tabele în timpul formularii unei cereri de interogare, se face prin operatia drag and drop de la câmpul de legatura din tabela sursa la câmpul de legatura din tabela destinatie. Rezultatul va fi o linie de legatura între cele doua câmpuri. stergerea unei relatii între doua tabele se face prin selectia liniei de legatura si utilizarea tastei de stergere.
O cerere de interogare a bazei de date pe mai multe tabele este expresia operatiei de compunere (join) din algebra relationala. Din punct de vedere al SGBD ACCESS, aceasta operatie este de trei feluri: echicompunere, compunere externa si compunere reflexiva.
Prin operatia de echicompunere se extrag toate înregistrarile din tabela sursa care au înregistrari echivalente în tabela destinatie (pentru care câmpurile de legatura sunt identice). De exemplu daca vrem sa aflam intrarile de materiale pentru fiecare material (cantitativ), este clar ca în cadrul tabelei Materiale se pot gasi mai multe materiale decât în tabela Linie factura (anumite materiale pot exista în cadrul bazei de date dar nu au fost achizitionate pâna în prezent). Prin urmare va fi utilizata operatia de echicompunere.
Prin operatia de compunere externa se extrag toate înregistrarile din tabela sursa si înregistrarile din tabela destinatie, care au valori egale în câmpurile de legatura. Pentru înregistrarile din tabela destinatie, care nu au corespondente în tabela sursa, se vor afisa câmpuri vide.
Fereastra Join Properties
Cele doua cereri se rezolva prin compunere externa. Relatia dintre doua tabele, din punct de vedere al operatiei de compunere externa, este privita în ambele sensuri:
q de la tabela sursa spre tabela destinatie (de la stânga la dreapta), ceea ce a condus la notiunea de compunere externa stânga (left outer join);
q de la tabela destinatie spre tabela sursa (de la dreapta la stânga), ceea ce a condus la notiunea de compunere externa dreapta (right outer join).
Prin aceste operatii s-a creat posibilitatea formularii unor cereri de interogare inverse, asa cum sunt cele doua exemplificate mai înainte. Pentru alegerea tipului de compunere în cadrul unei cereri de interogare:
q se realizeaza dublu clic pe linia de legatura între cele doua tabele, care va afisa fereastra Join Properties;
q se alege una din optiunile: 1 - echicompunere, 2 - compunere externa stânga sau 3 - compunere externa dreapta si apoi <OK>.
De exemplu dorim sa cream o cerere de interogare care sa ne prezinte totalul materialelor intrate (cantitativ) precum si totalul materialelor iesite.
În timp, poate fi achizitionat un material nou, care nu a intrat înca în consum. Astfel, în cadrul tabelei Linie bon de consum, nu exista nici o înregistrare privind acel material. Prin urmare relatia join pe care o vom defini între tabelele Material si Linie bon de consum va fi de tipul compunere externa stânga.
Asa cum se observa, cele trei tipuri de join se bazeaza pe conditia de egalitate între valorile câmpurilor de legatura. Pentru realizarea operatiei de join pe baza unei relatii de inegalitate (<, >, ) între câmpurile de legatura dintre tabele, se poate folosi limbajul SQL.
Cererea de interogare Stoc
Foaia de raspuns aferenta cererii de interogare Stoc
Compunerea reflexiva se bazeaza pe o relatie reflexiva, în care cele doua tabele sursa si destinatie sunt identice. Pentru asemenea operatie, în zona de lucru a cererii se selecteaza aceeasi tabela de doua ori si în mod automat numele celei de-a doua tabele va fi schimbat.
3. Cereri de interogare de tip "Analiza încrucisata"
Acest tip de cereri, permit generarea unor tabele complexe sub forma matriceala, în care numele liniilor (Li) si coloanelor (Cj) reprezinta criterii mixte de grupare, iar valorile din celulele tabelului (Vij) se obtin prin aplicarea unei functii predefinite (Sum, Min, Max, etc.) asupra unui câmp dintr-o tabela.
C1 |
C2 |
Cn |
||
L1 |
V11 |
V12 |
V1n |
|
L2 | ||||
Lm |
Vm1 |
Vmn |
Crearea unei cereri de interogare de acest tip, se face la fel ca o cerere care comporta calcule, cu deosebirea ca trebuie specificate câmpurile care furnizeaza liniile, coloanele si valorile din tabel.
În acest sens se procedeaza dupa cum urmeaza:
se lanseaza crearea unei noi cereri de interogare si se aduc în zona de lucru tabelele necesare;
se aduc din tabele în grila de proiectare câmpurile dorite si se stabilesc criteriile de selectie;
se alege <Query, Crosstab query>, care va aduce în grila de interogare liniile Total si Crosstab si va afisa Group by în celulele din linia Total;
se executa clic în celula Crosstab a câmpului care va da numele liniilor tabelului si se va selectiona Row Heading din lista derulanta;
clic în celula Crosstab a câmpului care va da numele coloanelor tabelului si se va selectiona Column Heading din lista derulanta;
clic în celula Crosstab a câmpului care va furniza valorile din tabel si se va selectiona Value din lista derulanta;
clic în celula Total a câmpului care va furniza valorile din tabel si se va selectiona operatia dorita (Sum, Count, Max, Min, etc.);
comanda <View, Datasheet View> pentru vizualizarea rezultatului.
Se pot specifica mai multe câmpuri pentru a furniza numele de linii ale tabelului si numai unul pentru a da numele coloanelor. Obligatoriu, câmpurile care furnizeaza numele liniilor si coloanelor trebuie sa aiba în linia Total criteriile Group by. La o cerere de interogare de acest tip pot participa una sau mai multe tabele.
Tabelele care rezulta în urma executiei acestor cereri, în mod standard, vor avea numele coloanelor plasate de la stânga la dreapta în ordine alfabetica. Exista posibilitatea schimbarii acestei ordini în functie de necesitatile si preferintele utilizatorului.
În acest scop:
se creeaza o cerere de interogare de tip Analiza încrucisata;
comanda <View, Properties> care va afisa fereastra Query Properties;
se selecteaza caseta Column Headings si se introduce numele coloanelor în ordinea dorita, sub forma unei liste în care separatorul este unul din caracterele "," sau ";" (depinde de modul de configurare al WINDOWS-ului);
clic pe OK si apoi comanda <View, Datasheet View> pentru vizualizarea raspunsului.
De exemplu, vrem sa obtinem numarul de facturi receptionate în anul 1999, pe furnizori si pe luni. Altfel spus, tabelul rezultat va avea ca nume de linii numele furnizorilor din câmpul Denumire furnizor din tabela Furnizor, numele coloanelor vor fi liniile anului extrase din câmpul Data factura din tabela Factura, iar valorile din tabel se vor obtine din câmpul Numar factura din tabela Factura prin operatia de numarare (Count).
În anumite situatii, modificarile din foaia de raspuns a unei cereri de interogare pot modifica tabela sursa, din care s-a constituit cererea. Pentru aceasta este necesar ca fiecare înregistrare din foaia de raspuns sa reprezinte o singura înregistrare din tabela sursa.
4. Cereri de interogare de tip "actiune"
Cererile de interogare de tip actiune se folosesc pentru:
crearea de noi tabele pe baza celor existente;[MS1]
stergerea de înregistrari din una sau mai multe tabele;
modificarea datelor dintr-un grup de înregistrari;
adaugarea unui grup de înregistrari la o tabela.
Crearea unei cereri de interogare de tip actiune se face în trei etape:
crearea unei cereri de interogare de tip selectie si verificarea rezultatului acesteia;
transpunerea cererii de interogare de tip selectie într-o cerere de tip actiune;
verificarea rezultatelor în tabele.
Crearea unor tabele noi
Pentru a transforma o cerere de interogare de tip selectie în una de tip actiune cu functia de creare a unei noi tabele se parcurg etapele:
se trece în modul de lucru Design view;
se alege <Query, Make table - query>, care va afisa o caseta de dialog;
în aceasta caseta de dialog se introduce numele tabelei, se stabileste daca aceasta va face parte dintr-o baza de date ACCESS sau de alt tip (cum ar fi Paradox) si daca va înlocui o tabela deja existenta (prin alegerea acesteia dintr-o lista);
se activeaza butoanele <OK> din caseta de dialog si apoi comanda <Query, Run>, ceea ce va afisa într-o caseta de dialog numarul de înregistrari din tabela creata;
pentru completarea cererii se activeaza butonul <OK> din ultima caseta de dialog, ceea ce va avea ca efect înregistrarea în baza de date a noii tabele.
Câmpurile unei tabele create prin intermediul unei asemenea cereri, vor mosteni numai tipurile si dimensiunile din tabelele sursa, fara cheia primara si celelalte proprietati ale acestora si ale tabelei. De aceea, se recomanda ca dupa executia cererii de creare sa se preia tabela în modul de lucru Design View si sa se stabileasca cheia primara, celelalte proprietati ale câmpurilor (criterii de validare, valorile prin lipsa, etc.) si eventual proprietatile tabelei.
În cazul în care cererea de tip selectie, care sta la baza unei cereri de tip actiune ce va crea o noua tabela, este de subtipul analiza încrucisata se parcurg urmatoarele etape:
se creeaza cererea de tip analiza încrucisata si se înregistreaza;
se creeaza o noua cerere de tip selectie bazata pe cererea anterioara (va prelua rezultatul acesteia);
se transforma cererea de tip selectie definita anterior, într-o cerere de creare a unei noi tabele.
stergerea unui grup de înregistrari care satisfac un anumit criteriu
Pentru a crea o cerere de tip selectie care sa stea la baza unei cereri de tip actiune în vederea stergerii unui grup de înregistrari:
q se lanseaza crearea unei noi cereri si se aduc tabelele necesare în zona de lucru;
q se deplaseaza urmatoarele câmpuri în grila de interogare:
câmpul * din tabelele din care vrem sa stergem înregistrari;
câmpurile pe care se vor stabili criterii de selectie.
q se specifica criteriile de selectie si se utilizeaza comanda <View, Datasheet View> pentru a vizualiza rezultatul.
Urmeaza etapa de transformare a cererii de tip selectie în cerere de tip actiune:
q se trece în modul Design View si se alege <Query, Delete query>, care va schimba numele cererii într-o cerere de stergere si va afisa în grila de proiectare linia Delete, iar în dreptul criteriilor de selectie Where;
q se poate completa cererea cu noi tabele si criterii de selectie prin deplasarea acestora din zona de lucru în grila de interogare (ca mai înainte);
q se activeaza butonul <OK> si apoi <Query, Run>, care va afisa într-o caseta de dialog numarul de înregistrari ce vor fi sterse;
q pentru completarea cererii se activeaza butonul <OK> din ultima caseta de dialog, ceea ce va avea ca efect stergerea înregistrarilor respective din baza de date.
Adaugarea de noi înregistrari dintr-o tabela sursa într-o tabela destinatie
Numarul de câmpuri din tabelele sursa si destinatie nu este obligatoriu sa fie acelasi. Asupra câmpurilor din tabela sursa se pot defini criterii de selectie.
Crearea unei cereri de interogare de tip selectie pentru a fi transformata într-o cerere de tip actiune pentru adaugarea unor înregistrari noi, se deruleaza în urmatorii pasi:
q se lanseaza crearea unei noi cereri si se aduc în zona de lucru tabela/tabelele sursa (care contin înregistrarile de adaugat);
q se introduc în grila de proiectare urmatoarele câmpuri:
toate câmpurile pentru adaugat si cele pentru definirea de criterii de selectie;
câmpul corespunzator cheii primare din tabela destinatie (cheia externa), în afara de situatia când aceasta este de tip Autonumber.
q se specifica criteriile de selectie;
q se utilizeaza comanda <View, Datasheet view> pentru vizualizarea rezultatului.
Pentru transformarea acesteia într-o cerere de adaugare:
q se trece în modul Design view;
q se alege <Query, Append query>, care afiseaza o caseta de dialog si va introduce în grila de proiectare linia Append;
q în caseta de dialog se introduce numele tabelei destinatie, se selecteaza baza de date din care face parte aceasta si se activeaza butonul <OK>;
q se alege <Query, Run> care va afisa o caseta de dialog în care se va specifica numarul înregistrarilor adaugate;
q pentru completarea cererii se activeaza butonul <OK> din ultima caseta de dialog.
5. Cereri de interogare parametrate
Daca într-o cerere de interogare este necesara modificarea frecventa a criteriilor de selectie, se recomanda transformarea acestora în cereri cu parametri. Astfel, la aparitia oricarei schimbari, cererea trebuie reproiectata modificându-i-se criteriile si apoi executata. Avantajul unei cereri parametrate, consta în faptul ca aceste criterii care se modifica primesc valori la momentul executiei cererii.
Crearea unei cereri parametrate se face dupa cum urmeaza:
q se lanseaza operatia de generare a unei cereri;
q se selecteaza tabelele în zona de lucru si se aduc câmpurile dorite în grila de proiectare;
q se introduce numele parametrilor urmati de caracterul ":" între paranteze drepte la intersectia liniei Criteria cu câmpurile care vor deveni parametri; numele parametrilor pot fi diferiti de cei ai câmpurilor;
q se alege <Query, Parameters>, care va afisa fereastra Query Parameters, în care se vor introduce numele parametrilor definiti în grila de proiectare si tipurile acestora;
q se activeaza butonul <OK> din ultima caseta de dialog si apoi <View, Datasheet view>, care va solicita utilizatorului valorile curente ale parametrilor înainte de afisarea rezultatelor.
De exemplu vom realiza o cerere de interogare care sa afiseze bonurile de consum dintr-o anumita luna.
Cererea de interogare Parametru
Page: 3
[MS1]
|