Invatare Atomica

Exploatarea bazei de date

Interogari cu criterii, interogari cu totalizare, interogare peste doua tabele si raport tiparibil

Progres lectie:
0%
🎯

Obiectivul lectiei

O baza de date plina cu date, dar din care nu scoti raspunsuri rapide, nu ajuta cu nimic mai mult decat un teanc de hartii. In lectiile trecute ai construit tabelele si le-ai umplut cu date reale. Acum inveti sa le pui intrebari: ce piese trebuie comandate azi, ce interventii a avut o masina anume, cat a costat atelierul intr-o perioada, si cum scoti toate astea pe o foaie tiparita, gata de pus in dosarul clientului sau de aratat sefului.

Dupa aceasta lectie vei putea:

  • Sa explici diferenta dintre un filtru temporar si o interogare (query) salvata, reutilizabila
  • Sa construiesti o interogare cu un singur criteriu, care compara doua campuri intre ele (piese sub stocul minim propriu al fiecarei piese)
  • Sa combini doua criterii cu AND, inclusiv un interval de date, pentru a gasi interventiile unui autovehicul intr-o perioada
  • Sa construiesti o interogare cu totalizare (Sum, Group By) pentru costuri pe perioada si sa recunosti greseala tipica de grupare
  • Sa construiesti o interogare peste doua tabele legate printr-un camp comun
  • Sa creezi un raport tiparibil cu Report Wizard, grupat, cu subtotaluri, pornind de la o interogare

Incearca singur!

Provocare — inainte sa citesti:

Seful atelierului intra pe usa si te intreaba trei lucruri, unul dupa altul: "Ce piese trebuie sa comand azi?", "Ce interventii am facut luna asta la masina lu' Popescu, NT-07-ABC?" si "Cat ne-a costat atelierul in ultimele trei luni, pe fiecare masina?". Ai tabelele Piese si Interventii deja completate din lectiile trecute. Scrie mai jos, pentru fiecare intrebare, ce ai face acum, fara sa fi citit lectia: ai rasfoi tabelul cu ochii, ai numara pe hartie, sau exista o unealta mai buna? Ce crezi ca iti lipseste ca sa raspunzi in 10 secunde, nu in 10 minute?

💡 Ai nevoie de un indiciu?

Un tabel cu 200 de piese sau 500 de interventii nu se citeste cu ochii in 10 secunde. Dar aceleasi date, puse intr-o intrebare bine formulata catre baza de date — o interogare — dau raspunsul instant, oricat de mare ar fi tabelul. Diferenta nu e in date, e in unealta cu care le intrebi.

Subiectul lectiei de azi arata exact cum se pun aceste intrebari si cum se scoate raspunsul pe hartie.

1

Ce e o interogare (query) si cum difera de un filtru

O interogare (in engleza query) este o intrebare pusa bazei de date, salvata ca obiect propriu, cu un nume, langa tabele si formulare. Spre deosebire de un filtru — care ascunde temporar niste randuri, cat timp ai tabelul deschis, si dispare cand inchizi fereastra — o interogare ramane in baza de date, poate fi redeschisa oricand cu acelasi rezultat actualizat, poate fi folosita ca sursa de date pentru un formular sau un raport, si poate combina date din mai multe tabele deodata (lucru pe care un filtru simplu nu il poate face).
Exemplu din atelier:

Filtrul e ca atunci cand rasfoiesti rapid un caiet de comenzi si pui degetul pe randurile de la clientul X — util pe moment, dar a doua zi trebuie sa cauti iar de la inceput. Interogarea e ca un formular tiparit cu titlul "Comenzile clientului X", pe care il pui intr-un dosar si il scoti oricand identic, actualizat automat cu ultimele date.

Unde se construieste o interogare in Access:

Tab-ul Create de pe panglica, apoi butonul Query Design. Se deschide o fereastra in care alegi tabelul (sau tabelele) sursa, apoi jos apare o grila (grila de proiectare) cu o coloana pentru fiecare camp ales si un rand Criteria, in care scrii conditia. Interogarea se ruleaza cu butonul Run (semnul exclamarii rosu) si se salveaza cu Ctrl+S, cu un nume clar, de exemplu Q_Piese_Sub_Stoc_Minim.

2

Interogare cu un singur criteriu — piesele sub stocul minim

Cel mai simplu criteriu compara un camp cu o valoare fixa (de exemplu <10) sau cu un alt camp din acelasi rand, scriind numele acelui camp intre paranteze drepte: [NumeCamp]. A doua varianta e necesara cand pragul difera de la o inregistrare la alta — exact cazul stocului minim, care nu e acelasi la toate piesele.
Tabelul Piese folosit in exemplu:

P001 Placute frana fata BF220 — Stoc 6, Stoc_Minim 5, Pret_Unitar 98,00 lei
P002 Filtru ulei OE12 — Stoc 18, Stoc_Minim 10, Pret_Unitar 24,50 lei
P003 Curea distributie CT1015 — Stoc 3, Stoc_Minim 5, Pret_Unitar 165,00 lei
P004 Amortizor spate AM330 — Stoc 2, Stoc_Minim 4, Pret_Unitar 320,00 lei
P005 Baterie 60Ah — Stoc 7, Stoc_Minim 3, Pret_Unitar 210,00 lei

Pasii in Query Design:

1. Create → Query Design → adaugi tabelul Piese.
2. Dai dublu-clic pe campurile pe care vrei sa le vezi in rezultat, in ordine: Cod_Piesa, Denumire, Stoc, Stoc_Minim.
3. Pe coloana Stoc, in randul Criteria, scrii <[Stoc_Minim].
4. Apesi Run.

Exemplu numeric complet — rezultatul interogarii:

Verificand fiecare piesa: P001 (6<5? nu), P002 (18<10? nu), P003 (3<5? da), P004 (2<4? da), P005 (7<3? nu).
Raman doar doua randuri: Curea distributie CT1015 (Stoc 3, Stoc_Minim 5) si Amortizor spate AM330 (Stoc 2, Stoc_Minim 4) — astea doua trebuie comandate azi.

3

Doua criterii deodata — interventiile unui autovehicul, intr-o perioada

Cand pui doua conditii pe acelasi rand din grila (indiferent sub ce campuri sunt), interogarea le combina cu SI (AND) — o inregistrare apare in rezultat doar daca indeplineste ambele conditii deodata. Daca pui conditiile pe randuri diferite (al doilea rand se numeste "or"), ele se combina cu SAU — ajunge sa fie adevarata una singura.
Tabelul Interventii folosit in exemplu:

1 — NT-07-ABC — 05.01.2026 — Schimb placute frana — Cost_Total 145,00 lei — Cod_Piesa_Principala P001
2 — NT-07-ABC — 20.02.2026 — Revizie ulei si filtre — Cost_Total 210,00 lei — Cod_Piesa_Principala P002
3 — NT-11-XYZ — 12.01.2026 — Schimb baterie — Cost_Total 380,00 lei — Cod_Piesa_Principala P005
4 — NT-07-ABC — 15.03.2026 — Verificare senzor ABS — Cost_Total 95,00 lei — Cod_Piesa_Principala (fara piesa)
5 — NT-11-XYZ — 28.02.2026 — Schimb amortizoare — Cost_Total 640,00 lei — Cod_Piesa_Principala P004

Grila interogarii:

Camp Nr_Inmatriculare, Criteria: "NT-07-ABC" (text intre ghilimele).
Camp Data, pe acelasi rand de Criteria: Between #2026-01-01# And #2026-03-31# (datele in Access se scriu intre semnele # — vezi mai jos de ce acest format anume).

Atentie la formatul datei intre # #:

Access citeste literalii dintre # ca luna/zi/an (format american), NU zi/luna/an. Daca ai scrie #05/01/2026# gandindu-te la 5 ianuarie, Access il intelege ca 1 mai 2026 — fara niciun mesaj de eroare, doar un rezultat gresit si tacut. Solutia sigura: scrie data in format an-luna-zi, #2026-01-05#, pe care Access il recunoaste neambiguu indiferent de setarile regionale, sau foloseste functia DateSerial(2026,1,5). In restul acestei lectii, toate criteriile Between folosesc formatul sigur an-luna-zi.

Exemplu numeric complet — rezultatul interogarii:

Din cele 5 interventii, trec ambele conditii doar randurile 1, 2 si 4 — toate trei sunt pentru NT-07-ABC si toate trei au data intre 01.01.2026 si 31.03.2026. Randurile 3 si 5 ies din rezultat pentru ca sunt pe alta masina (NT-11-XYZ), desi data lor e in aceeasi perioada. Cele trei interventii insumeaza 145,00 + 210,00 + 95,00 = 450,00 lei pentru masina NT-07-ABC in acest trimestru.

4

Interogare cu totalizare — costurile pe perioada

O interogare de totalizare nu mai arata fiecare inregistrare in parte, ci le grupeaza dupa un camp si calculeaza o valoare pentru fiecare grup — suma (Sum), numarul de randuri (Count), media (Avg) etc. Se activeaza cu butonul Totals de pe panglica, in fereastra de proiectare a interogarii; apare un rand nou, Total, sub grila, unde alegi pentru fiecare camp fie Group By (camp dupa care se grupeaza), fie o functie de calcul, fie Where — pentru un camp folosit DOAR ca sa filtrezi (are Criteria completat), nu ca sa grupezi si nu ca sa-l vezi in rezultat. Where scoate automat acel camp din grupare si din afisare, dar pastreaza conditia activa.
Pasii in Query Design:

1. Adaugi tabelul Interventii, campurile Nr_Inmatriculare, Data, Cost_Total.
2. Sub Data, Criteria: Between #2026-01-01# And #2026-03-31#.
3. Apesi Totals. Pe coloana Nr_Inmatriculare, randul Total ramane Group By. Pe coloana Cost_Total, schimbi Total din Group By in Sum. Pe coloana Data — folosita DOAR pentru criteriu, nu vrei sa grupezi si nu vrei sa o vezi in rezultat — schimbi Total din Group By in Where.
4. Rulezi interogarea.

Exemplu numeric complet — rezultatul interogarii:

Pentru NT-07-ABC (interventiile 1, 2, 4 din atomul anterior): 145,00 + 210,00 + 95,00 = 450,00 lei.
Pentru NT-11-XYZ (interventiile 3 si 5): 380,00 + 640,00 = 1.020,00 lei.
Interogarea afiseaza exact aceste doua randuri, gata calculate — fara sa mai numeri nimic pe hartie.

Greseala tipica — un camp uitat pe Group By in loc de Where strica totalul:

Daca lasi campul Data pe Group By in loc de Where, interogarea nu mai grupeaza doar dupa masina — grupeaza dupa combinatia Nr_Inmatriculare + Data. In loc de doua randuri (450,00 lei pentru NT-07-ABC, 1.020,00 lei pentru NT-11-XYZ), obtii cinci randuri separate, cate unul pentru fiecare interventie in parte (NT-07-ABC: 05.01=145,00; 20.02=210,00; 15.03=95,00; NT-11-XYZ: 12.01=380,00; 28.02=640,00) — niciunul nu arata totalul real cerut. Cum recunosti problema: daca rezultatul are mai multe randuri decat masini distincte te astepti, verifica in grila daca a mai ramas vreun camp pe Group By care ar trebui sa fie pe Where in loc — orice camp folosit doar la Criteria, nu la afisare.

5

Interogare peste doua tabele — legatura printr-un camp comun

Pana acum am lucrat cu un singur tabel. Multe intrebari reale au nevoie de date din doua tabele deodata: tabelul Interventii stie ce piesa s-a folosit doar prin cod (Cod_Piesa_Principala), dar denumirea si pretul acelei piese stau in tabelul Piese. O interogare peste doua tabele le aduce impreuna, folosind un camp comun — aici, codul piesei apare si in Interventii (ca Cod_Piesa_Principala), si in Piese (ca Cod_Piesa).
Pasii in Query Design:

1. Create → Query Design → adaugi ambele tabele: Interventii si Piese.
2. Access desenaza automat o linie intre Cod_Piesa_Principala (din Interventii) si Cod_Piesa (din Piese) daca exista deja o relatie definita intre tabele; daca nu, tragi tu o linie cu mouse-ul de la un camp la celalalt.
3. Aduci in grila campurile dorite din oricare tabel: din Interventii — Data, Nr_Inmatriculare; din Piese — Denumire, Pret_Unitar.
4. Rulezi interogarea — fiecare rand din rezultat combina automat datele din ambele tabele.

Exemplu numeric complet — rezultatul interogarii (interventiile 1, 2 si 5):

05.01.2026, NT-07-ABC, piesa folosita: Placute frana fata BF220, pret unitar 98,00 lei.
20.02.2026, NT-07-ABC, piesa folosita: Filtru ulei OE12, pret unitar 24,50 lei.
28.02.2026, NT-11-XYZ, piesa folosita: Amortizor spate AM330, pret unitar 320,00 lei.
Interogarea aduce denumirea si pretul direct din Piese, fara sa fi fost nevoie sa le scrii vreodata in Interventii — daca schimbi pretul unei piese in tabelul Piese, interogarea arata automat noul pret la urmatoarea rulare.

6

Raportul tiparibil — Report Wizard

Un raport (report) este documentul formatat, gata de tiparit, construit pornind de la un tabel sau — mai des — de la o interogare deja pregatita. Cand vrei linii de detaliu grupate cu subtotal pe fiecare grup (exact cazul de mai jos), sursa trebuie sa fie o interogare de DETALIU — cea care arata fiecare interventie in parte, nu una deja totalizata cu Group By — pentru ca gruparea si subtotalul le calculeaza singur Report Wizard, nu interogarea sursa. Spre deosebire de fereastra unei interogari (utila doar pe ecran, cu coloane taiate la tiparire), un raport are titlu, antet, grupare pe campul ales, subtotal pentru fiecare grup si total general la final — exact formatul pe care il pui intr-un dosar de client sau il arati sefului.
Pasii pentru raportul "Costuri pe autovehicul, trimestrul I":

1. Construiesti o interogare de detaliu (stil atomul 3, dar pentru toate masinile) peste tabelul Interventii: campurile Nr_Inmatriculare, Data, Cost_Total, criteriul Between #2026-01-01# And #2026-03-31# sub Data — fara Totals, fara Group By, fiecare interventie ramane pe randul ei. O salvezi, de exemplu, Q_Interventii_Trimestru1.
2. Tab-ul CreateReport Wizard.
3. La pasul "Tables/Queries" alegi Q_Interventii_Trimestru1 ca sursa; muti toate campurile ei in coloana "Selected Fields" — acum raportul are acces la fiecare interventie in parte, nu doar la un total gata facut.
4. La pasul de grupare, alegi Nr_Inmatriculare ca nivel de grupare (fiecare masina isi are blocul ei, cu toate interventiile listate dedesubt).
5. La pasul de sortare/totaluri apesi Summary Options (butonul apare doar cand exista un nivel de grupare si campuri numerice de detaliu — aici Cost_Total) si bifezi subtotalul (Sum) pe campul Cost_Total.
6. Alegi un layout (de exemplu "Stepped") si orientarea paginii (Portrait sau Landscape, daca ai multe coloane), apoi Finish.

Ce arata raportul finit:

Un titlu sus, "Costuri pe autovehicul, trimestrul I". Sub el, un bloc pentru NT-07-ABC cu cele trei interventii si subtotalul 450,00 lei; alt bloc pentru NT-11-XYZ cu cele doua interventii si subtotalul 1.020,00 lei; la finalul paginii, totalul general: 1.470,00 lei. Raportul se deschide in Print Preview, se poate tipari direct sau exporta ca PDF din tab-ul External Data.

Nota practica:

Nu tipari niciodata direct fereastra unei interogari — coloanele ies taiate, fara titlu, fara subtotaluri, si arata neingrijit in fata clientului. Interogarea e unealta de lucru, in spate; raportul e documentul de aratat.

7

Recapitulare si conexiuni

O baza de date bine construita si bine incarcata (din lectiile trecute) devine utila abia acum, cand o intrebi si primesti raspunsuri exacte, instant, oricat de mari ar fi tabelele — si le poti pune pe hartie intr-un document ingrijit.
Drumul parcurs in aceasta lectie:

Interogare cu un criteriu — piese sub stocul lor minim propriu, cu <[Stoc_Minim]
  ↓
Interogare cu doua criterii (AND) — un autovehicul, intr-o perioada, cu Between # # And # #
  ↓
Interogare cu totalizare — Totals, Group By + Sum + Where, costuri pe perioada
  ↓
Interogare peste doua tabele — Interventii + Piese, legate prin codul piesei
  ↓
Raport tiparibil — Report Wizard, grupat, cu subtotaluri, exportat ca PDF

Conexiune cu urmatoarea lectie:

Lectia urmatoare este evaluarea intregii competente C2 — Baze de Date. Vei relua, pe un caz complet nou, toti pasii invatati: tipuri de date, structura tabelelor, operatii, incarcare si exploatare, ca sa arati ca poti construi si folosi singur o baza de date de la zero pana la raportul final.

De retinut pentru activitatile practice:

Criteriu pe un singur camp: valoare fixa sau alt camp intre paranteze drepte, [NumeCamp].
Doua conditii pe acelasi rand = AND; pe randuri diferite = OR.
Totals + Group By + Sum + Where = totalizare pe grupe (Where scoate din grupare campul folosit doar la filtrare).
Doua tabele intr-o interogare = leaga-le printr-un camp comun.
Report Wizard, nu Print Screen, pentru documentul final.

Exercitii practice

Exercitiul 1 (Nivel minim) — Piese sub stocul minim

Tabelul Piese are urmatoarele randuri: P010 Bec far H7 — Stoc 12, Stoc_Minim 8; P011 Lichid frana DOT4 — Stoc 4, Stoc_Minim 6; P012 Filtru aer FA88 — Stoc 15, Stoc_Minim 12; P013 Curea alternator — Stoc 2, Stoc_Minim 3. Scrie: (a) expresia exacta pe care ai pune-o in randul Criteria, sub campul Stoc, ca sa gasesti piesele sub propriul lor prag; (b) care piese, din cele patru, apar in rezultat.

Vezi rezolvarea

(a) In randul Criteria, sub campul Stoc, scrii exact ca la atomul 2 din lectie: <[Stoc_Minim]. Asa compari, pentru fiecare piesa in parte, propriul ei Stoc cu propriul ei Stoc_Minim, nu cu un numar fix acelasi pentru toate piesele.

(b) Verific fiecare piesa:

  1. P010 - Stoc 12, Stoc_Minim 8: 12 nu e sub 8, nu apare
  2. P011 - Stoc 4, Stoc_Minim 6: 4 este sub 6, apare
  3. P012 - Stoc 15, Stoc_Minim 12: 15 nu e sub 12, nu apare
  4. P013 - Stoc 2, Stoc_Minim 3: 2 este sub 3, apare

Raspuns: apar doar P011 Lichid frana DOT4 si P013 Curea alternator.

Exercitiul 2 (Nivel standard) — Interventiile unei masini, intr-o perioada

Tabelul Interventii mai are, pe langa cele 5 randuri din lectie, si urmatoarele trei: 6 — NT-11-XYZ — 10.04.2026 — Schimb placute frana — 160,00 lei; 7 — NT-07-ABC — 02.02.2026 — Vulcanizare — 60,00 lei; 8 — NT-11-XYZ — 05.02.2026 — Verificare directie — 80,00 lei. Scrie: (a) ce doua conditii pui in grila si pe ce pozitie (acelasi rand sau randuri diferite) ca sa vezi doar interventiile lui NT-11-XYZ din trimestrul I 2026 (01.01–31.03.2026); (b) care interventii, din toate cele 8, apar in rezultat, cu suma lor totala.

Vezi rezolvarea

(a) Ambele conditii se scriu pe acelasi rand din grila, ca sa se combine cu SI (AND), la fel ca la atomul 3 din lectie: sub campul Nr_Inmatriculare, Criteria "NT-11-XYZ", iar pe acelasi rand, sub campul Data, Criteria Between #2026-01-01# And #2026-03-31#.

(b) Din cele 8 interventii, raman doar cele ale lui NT-11-XYZ din trimestrul I: nr. 3 (12.01.2026, 380,00 lei), nr. 5 (28.02.2026, 640,00 lei) si nr. 8 (05.02.2026, 80,00 lei). Interventia nr. 6 (10.04.2026) e tot a lui NT-11-XYZ, dar e in aprilie, deci iese din intervalul trimestrului I. Total: 380,00 + 640,00 + 80,00 = 1.100,00 lei.

Exercitiul 3 (Nivel performanta) — De la interogare la raport

Atelierul vrea un document lunar pentru fiecare autovehicul, cu toate interventiile lunii si totalul de plata, tiparit si trimis clientului. Pornind de la tabelele Interventii si Piese din lectie: (a) descrie interogarea de totalizare pe care ai construi-o (ce campuri, ce criteriu de data pentru "luna curenta", ce camp pe Sum, ce camp pe Group By) si explica de ce Nr_Inmatriculare trebuie sa ramana pe Group By, nu pe Sum; (b) descrie pe scurt cum ai construi, separat, o interogare peste doua tabele care sa arate si denumirea pieselor folosite la fiecare interventie, nu doar codul; (c) explica in Report Wizard ce alegi la pasul de grupare si ce optiune activezi ca sa apara subtotalul pe fiecare masina, la finalul fiecarui bloc.

Vezi rezolvarea

(a) Interogare de totalizare pe tabelul Interventii, ca la atomul 4: campurile Nr_Inmatriculare, Data, Cost_Total. Apesi Totals; pe Nr_Inmatriculare pui Group By (ramane camp de grupare, nu se insumeaza - un numar de inmatriculare nu are sens adunat), pe Cost_Total pui Sum, iar pe Data pui Where cu Criteria Between prima si ultima zi a lunii curente (Where filtreaza fara sa apara in rezultat sau in grupare).

(b) Ca la atomul 5: adaugi si tabelul Piese, legatura intre Cod_Piesa_Principala (Interventii) si Cod_Piesa (Piese), aduci in grila si campul Denumire din Piese.

(c) In Report Wizard, la pasul de grupare alegi campul Nr_Inmatriculare; la Summary Options bifezi Sum pe campul de cost, ca sa apara subtotalul pe fiecare masina.

Atentie: calculul automat al "lunii curente" (o expresie cu functia Date()) nu apare explicit in lectie - e o extindere peste ce s-a predat.

Ce ai invatat astazi

  • Interogarea (query) e un obiect salvat, reutilizabil; filtrul e temporar, legat de fereastra deschisa
  • Criteriu pe un singur camp: valoare fixa (<10) sau alt camp din acelasi rand, intre paranteze drepte (<[Stoc_Minim])
  • Doua conditii pe acelasi rand de criterii = AND; pe randuri diferite (rand "or") = OR
  • Date calendaristice in Access: intre semnele # — Between #2026-01-01# And #2026-03-31# (format an-luna-zi, ca sa eviti ambiguitatea luna/zi vs zi/luna)
  • Totals + Group By + Sum + Where = interogare de totalizare pe grupe; Where scoate un camp folosit doar la filtrare din grupare/afisare, fara sa-i piarda criteriul
  • Doua tabele intr-o interogare se leaga printr-un camp comun (aici, codul piesei)
  • Report Wizard construieste documentul tiparibil final, cu grupare si subtotaluri — nu tiparesti direct interogarea

Vrei mai mult?

Provocare: Pe cele 5 piese din lectie (P001-P005), construieste o interogare cu OR: piese la care Stoc < [Stoc_Minim] SAU Pret_Unitar > 300 lei. Scrie primul criteriu pe randul "Criteria" si al doilea pe randul "or" de sub el, apoi ruleaza interogarea si vezi exact ce randuri apar.

  • Intrebare: Doua criterii pe acelasi rand din grila se combina cu AND. Ca sa obtii OR intre doua campuri diferite, trebuie sa completezi randul "or" repetand si celelalte criterii de pe primul rand. Ce se intampla cu rezultatul daca uiti sa repeti un criteriu pe randul "or"?

Deschidere: Aceeasi logica AND/OR sta in spatele filtrelor dintr-un magazin online ("pret intre X si Y SI categoria Z") sau in interogarile contabile care cauta facturi restante — o singura conditie scrisa pe randul gresit schimba complet rezultatul afisat clientului sau contabilului.

Urmatoarea lectie

Continua cu Evaluarea competentei C2 — Baze de Date — un caz complet nou, in care aplici de la zero tot ce ai invatat: tipuri de date, structura tabelelor, operatii, incarcare si exploatare.

Continua →