Invatare Atomica

Interogari si filtre

Cum pui intrebari bazei de date si primesti exact randurile de care ai nevoie

Progres lectie:
0%
🎯

De ce conteaza aceasta lectie

Un tabel cu cateva mii de randuri nu-ti spune nimic la prima vedere. Ai nevoie sa vezi doar materialele sub o anumita cantitate, doar comenzile unui client, doar produsele intr-un anumit interval de pret, sau toate astea la un loc, sortate dupa data. In Access, raspunsul la orice intrebare de genul asta se numeste interogare (query). Fara interogari esti condamnat sa cauti manual, rand cu rand, intr-un tabel imens — cu interogari, baza de date raspunde in cateva secunde.

Dupa aceasta lectie vei putea:

  • Sa construiesti o interogare de selectie simpla in Query Design View, alegand tabelul si coloanele
  • Sa pui un criteriu pe o coloana de text, pe o coloana numerica si pe o coloana de tip data calendaristica
  • Sa combini doua sau mai multe criterii cu SI (aceeasi linie Criteria) si cu SAU (linii Criteria/Or separate)
  • Sa sortezi rezultatele crescator sau descrescator dupa una sau mai multe coloane
  • Sa aplici un filtru rapid direct pe un tabel sau formular deschis, fara sa construiesti o interogare
  • Sa construiesti o interogare peste doua tabele legate printr-o cheie, ca sa vezi date combinate din amandoua

Incearca singur!

Provocare — inainte sa citesti:

Lucrezi la magazia unui atelier de tamplarie. Ai un tabel Materiale cu 400 de randuri: denumire, categorie (Lemn, Feronerie, Adeziv, Vopsea), cantitate in stoc, pret unitar, data ultimei receptii. Seful vrea o lista cu toate materialele din categoria "Lemn" care au stoc sub 10 bucati, sortate dupa cele mai vechi receptii primele. Scrie mai jos, in cuvintele tale, ce pasi ai face ca sa obtii lista asta daca ai avea DOAR foaia tiparita a tabelului, fara niciun program.

💡 Ai nevoie de un indiciu?

Probabil ai raspuns ceva de genul: "as citi fiecare rand, as bifa-l daca e Lemn SI stocul e sub 10, apoi as rearanja randurile bifate dupa data". Exact asta face o interogare in Access — doar ca automat, in doua secunde, pe orice numar de randuri, fara sa gresesti si fara sa oboseasca.

Subiectul lectiei de azi iti arata cum ceri asta calculatorului, in loc sa o faci cu creionul.

1

Ce este o interogare de selectie

O interogare (query) este o cerere pusa bazei de date: "arata-mi randurile care indeplinesc conditia X, doar cu coloanele Y, in ordinea Z". Cel mai folosit tip este interogarea de selectie (Select Query) — ea nu schimba nimic in tabel, doar afiseaza rezultatul intr-o fereastra separata, ca o "fereastra" taiata din tabelul original. De fiecare data cand deschizi din nou interogarea, ea reciteste tabelul si iti arata rezultatul actualizat — daca ai adaugat sau sters materiale intre timp, rezultatul se schimba automat.
Diferenta fata de tabel:

Tabelul Materiale tine TOATE cele 400 de randuri, cu TOATE coloanele. O interogare precum "Materiale sub stoc minim" arata doar cateva randuri (cele cu stoc mic) si poate doar cateva coloane (denumire, cantitate, categorie) — restul informatiei ramane ascunsa, dar nu sters.

Cum deschizi fereastra de proiectare a unei interogari noi:

In Access, din panglica Create (Creare) alegi Query Design (Proiectare interogare). In versiunile 2007-2019 se deschide fereastra "Show Table" (Afisare tabel), din care alegi tabelul (sau tabelele) cu care lucrezi si apesi Add (Adauga), apoi Close (Inchide). In Access pentru Microsoft 365 si Access 2021, aceeasi actiune deschide un panou lateral numit Add Tables (Adaugare tabele), in partea dreapta a ecranului: dai clic pe tabelul dorit si apesi Add Selected Tables (nu mai exista buton Close — inchizi panoul cu X). Tabelul apare ca o casuta cu lista de coloane in partea de sus a ferestrei; in partea de jos este grila de proiectare (design grid), unde alegi coloanele si pui criteriile.

2

Grila de proiectare: ce coloane alegi si in ce ordine

Grila de proiectare (design grid) are cateva randuri fixe: Field (Camp — numele coloanei), Table (Tabel — din ce tabel vine coloana), Sort (Sortare), Show (Afisare — bifata sau nu) si Criteria (Criterii). Adaugi o coloana in grila fie dand dublu-clic pe numele ei in casuta tabelului de sus, fie trasand-o (drag) in prima celula libera de pe randul Field.
O coloana poate sta in grila DOAR ca sa filtrezi, fara sa apara in rezultat:

Poti adauga o coloana in grila exclusiv ca sa scrii un criteriu pe ea, si apoi sa DEBIFEZI casuta Show de pe randul ei — coloana filtreaza randurile, dar nu apare in lista finala. Exemplu: ti se cere "afiseaza doar Denumire si Cantitate, pentru materialele din categoria Vopsea". Adaugi in grila trei coloane — Denumire, Cantitate si Categorie — pui criteriul "Vopsea" sub Categorie, apoi debifezi Show doar la Categorie. Rezultatul arata exact doua coloane (Denumire, Cantitate), dar filtrarea dupa Categorie tot s-a aplicat.

Exemplu concret — pasii pentru o interogare simpla:

Vrei sa vezi doar denumirea, categoria si cantitatea din tabelul Materiale:
1. Create → Query Design → adaugi tabelul Materiale → Close.
2. Dublu-clic pe Denumire in casuta tabelului — apare in prima coloana a grilei.
3. Dublu-clic pe Categorie — apare in a doua coloana.
4. Dublu-clic pe Cantitate — apare in a treia coloana.
5. Apesi butonul Run (semnul de exclamare rosu din panglica Design) — Access ruleaza interogarea si afiseaza rezultatul intr-o fila cu tabel (Datasheet View).
6. Salvezi interogarea cu Ctrl+S si ii dai un nume, de exemplu Lista_Materiale_Simpla.

Ordinea coloanelor in grila = ordinea coloanelor in rezultat

Daca vrei ca Cantitate sa apara inainte de Categorie in rezultat, muti coloana in grila (selectezi capul de coloana din grila si o tragi la stanga). Ordinea din tabelul original nu conteaza — conteaza doar ordinea din grila interogarii.

3

Criterii simple: pe text si pe numere

Un criteriu este conditia scrisa pe randul Criteria, sub coloana pe care vrei sa filtrezi. Access ii schimba automat forma dupa ce apesi Enter, ca sa vezi ca a inteles conditia corect. Sintaxa difera in functie de tipul de date al coloanei.
Criterii pe text (coloana de tip Short Text):

Coloana Categorie, criteriu pentru "Lemn":
Scrii: Lemn sau "Lemn" — Access adauga automat ghilimelele: "Lemn".
Pentru "orice categorie in afara de Lemn": Not "Lemn".
Pentru "denumiri care contin cuvantul suruburi", indiferent ce mai e in nume: Like "*suruburi*" — semnul * inlocuieste orice sir de caractere, inainte si dupa cuvantul cautat.

Criterii pe numere (coloana de tip Number):

Coloana Cantitate:
Stoc sub 10: <10
Stoc intre 5 si 20 (inclusiv): >=5 And <=20 sau Between 5 And 20
Stoc exact 0 (rupt de stoc): 0
Stoc diferit de 0: <>0

Exemplu numeric complet, dus pana la rezultat:

Tabelul Materiale are randurile: Sipca brad (Lemn, 8 buc), Placaj 18mm (Lemn, 25 buc), Balama (Feronerie, 6 buc), Sipca stejar (Lemn, 3 buc). Interogare cu criteriul Categorie = "Lemn" SI Cantitate < 10: rezultatul contine exact doua randuri — Sipca brad (8 buc) si Sipca stejar (3 buc). Placaj 18mm e Lemn dar are 25 buc (nu trece criteriul cantitate); Balama are stoc mic dar nu e Lemn.

4

Criterii pe date calendaristice

Coloanele de tip Date/Time folosesc semnul # (diez) in loc de ghilimele, pentru ca Access sa recunoasca sirul ca fiind o data si nu un text obisnuit. Nu trebuie neaparat sa tastezi tu diezii — poti scrie doar 01.03.2026, iar Access ii adauga singur dupa ce apesi Enter, daca a recunoscut valoarea ca data. Formatul afisat depinde de setarile regionale ale calculatorului, dar diezii trebuie sa apara in criteriul final (tastati de tine sau adaugati automat).
Exemple de criterii pe coloana DataReceptie:

Receptii dupa 1 martie 2026: >#01.03.2026#
Receptii intr-un interval, tot martie 2026: Between #01.03.2026# And #31.03.2026#
Receptii facute exact azi — Access are o functie care returneaza data curenta a calculatorului: Date(). Criteriu pentru "azi": =Date().
Materiale receptionate in ultimele 30 de zile: >=Date()-30 — scazi 30 de zile din data curenta.

Greseala tipica si cum o recunosti:

Cand tastezi o data sub o coloana Date/Time si apesi Enter, Access recunoaste valoarea si adauga singur diezii — la fel cum adauga singur ghilimelele in jurul textului. Daca scrii 01.03.2026 sub DataReceptie, dupa Enter vezi #01.03.2026# — semn ca a fost inteleasa corect ca data. Semnul ca ceva NU e in regula e exact invers: daca dupa Enter diezii NU apar, inseamna ca Access nu a recunoscut sirul ca fiind o data (de exemplu ai scris ceva ambiguu sau intr-un format gresit) — verifica ce ai scris, pentru ca altfel criteriul se comporta ca text sau numar, nu ca data calendaristica.

5

Combinarea criteriilor: SI (AND) si SAU (OR)

Regula grilei de proiectare este simpla si merita memorata exact: criteriile scrise pe acelasi rand se combina cu SI (trebuie sa fie adevarate toate, in acelasi timp) — criteriile scrise pe randuri diferite se combina cu SAU (e suficient ca unul dintre randuri sa fie adevarat).
SI (AND) — toate conditiile deodata:

Vrei: Categorie = Lemn SI Cantitate < 10.
In grila: pe randul Criteria, sub coloana Categorie scrii "Lemn", iar sub coloana Cantitate, PE ACELASI RAND, scrii <10.
Rezultat pe exemplul din Atomul 3: doar Sipca brad si Sipca stejar.

SAU (OR) — oricare dintre conditii:

Vrei: Categorie = Lemn SAU Categorie = Feronerie (adica orice material din una din cele doua categorii).
In grila: sub coloana Categorie, pe randul Criteria scrii "Lemn", iar pe randul de dedesubt, numit Or, scrii "Feronerie".
O varianta echivalenta, mai scurta, pe un singur rand: "Lemn" Or "Feronerie" scris direct in celula Criteria a coloanei Categorie.

Combinatie SI + SAU, exemplu complet:

Cerinta: "materiale din Lemn cu stoc sub 10, SAU orice material din Feronerie indiferent de stoc". In grila: randul 1 (Criteria) → Categorie: "Lemn", Cantitate: <10. Randul 2 (Or) → Categorie: "Feronerie", Cantitate: gol (fara conditie pe randul asta). Pe exemplul din Atomul 3 plus Balama (Feronerie, 6 buc): rezultatul contine Sipca brad, Sipca stejar SI Balama — Balama intra pentru ca e Feronerie, indiferent de stoc.

6

Sortarea rezultatelor

Pe randul Sort al oricarei coloane din grila alegi din lista derulanta: Ascending (crescator: A→Z pentru text, mic→mare pentru numere, vechi→nou pentru date), Descending (descrescator, sensul invers) sau (not sorted) (fara sortare pe coloana aceea).
Sortare pe o singura coloana:

Vrei materialele cu stocul cel mai mic afisat primul (ca sa vezi rapid ce trebuie comandat): pe coloana Cantitate, randul Sort → Ascending.

Sortare pe mai multe coloane — ordinea coloanelor in grila conteaza:

Vrei materialele grupate pe categorie (alfabetic), si in interiorul fiecarei categorii, cele cu stoc mai mic primele: pui Sort Ascending pe coloana Categorie SI Sort Ascending pe coloana Cantitate. Access sorteaza intai dupa prima coloana cu Sort setat, numarand de la stanga la dreapta in grila, apoi dupa a doua. Daca vrei ca sortarea principala sa fie dupa Cantitate, coloana Cantitate trebuie sa fie la stanga coloanei Categorie in grila.

Greseala tipica:

Multi incepatori pun Sort pe o coloana pe care au debifat Show (nu apare in rezultat). Se poate — sortarea functioneaza chiar daca acea coloana nu e afisata — dar rezultatul poate parea "sortat aiurea" cuiva care nu stie dupa ce coloana ascunsa s-a facut sortarea. Regula buna: daca sortezi dupa o coloana, e util sa o lasi si vizibila, ca sa poti verifica vizual ca sortarea e corecta.

7

Filtrare rapida, fara sa construiesti o interogare

Cand ai deja tabelul sau formularul deschis si vrei o selectie rapida, ocazionala, nu ai nevoie sa deschizi Query Design — poti folosi filtrele direct din panglica Home, grupul Sort & Filter. Filtrul nu creeaza un obiect nou salvat separat; el ramane atasat ferestrei deschise, pana il inlaturi cu Toggle Filter sau Clear All Filters.
Filter by Selection — cel mai rapid:

Deschizi tabelul Materiale in Datasheet View. Dai clic intr-o celula care are valoarea "Lemn" pe coloana Categorie. Din panglica Home apesi Selection (in grupul Sort & Filter) → alegi Equals "Lemn". Access afiseaza instant doar randurile cu Categorie = Lemn. Pentru a reveni la toate randurile: Toggle Filter.

Filter by Form — criterii mai complexe, tot rapid:

Din panglica Home → AdvancedFilter By Form. Se deschide o versiune goala a tabelului, in care completezi criteriile direct in casute (la fel ca in grila Criteria a unei interogari — poti scrie <10 sub Cantitate). Apesi Toggle Filter ca sa aplici.

Cand alegi filtru si cand alegi interogare:

Filtru — pentru o cautare de moment, pe care nu ai nevoie sa o refolosesti maine. Interogare salvata — pentru o cerere pe care o refolosesti des (de exemplu "Materiale sub stoc minim", verificata saptamanal) sau pe care vrei sa o folosesti mai departe ca sursa pentru un formular sau un raport.

8

O interogare peste doua tabele legate

Cand informatia de care ai nevoie e impartita in doua tabele diferite (de exemplu comenzile intr-un tabel, iar numele si datele clientilor in alt tabel, legate prin cheia CodClient), o singura interogare poate aduce coloane din amandoua deodata, cat timp exista o relatie (linia de legatura, join) intre cele doua tabele pe campul comun.
Pasii pentru o interogare pe doua tabele:

1. Create → Query Design → in fereastra Show Table (sau panoul Add Tables, in versiunile mai noi — vezi Atomul 1) adaugi ambele tabele: Comenzi si Clienti.
2. Daca relatia dintre ele a fost definita deja in Database Tools → Relationships, apare automat o linie subtire care uneste CodClient din Comenzi cu CodClient din Clienti. Daca nu apare, o tragi manual: clic pe CodClient din casuta Comenzi si tragi pana pe CodClient din casuta Clienti.
3. Adaugi in grila: NumarComanda si DataComanda din Comenzi, NumeClient din Clienti.
4. Run — rezultatul arata, pentru fiecare comanda, si numele clientului, desi numele nu e stocat in tabelul Comenzi.

Exemplu numeric complet:

Tabelul Comenzi: (Comanda 101, CodClient C7, Data 03.03.2026), (Comanda 102, CodClient C4, Data 05.03.2026). Tabelul Clienti: (C7, Popescu Tamplarie SRL), (C4, Ionescu Feronerie SRL). Interogarea peste ambele, cu criteriu DataComanda > #01.03.2026# si sortare Ascending pe DataComanda, afiseaza doua randuri: Comanda 101 / 03.03.2026 / Popescu Tamplarie SRL, apoi Comanda 102 / 05.03.2026 / Ionescu Feronerie SRL — desi numele clientului nu exista fizic in tabelul Comenzi, el apare in rezultat gratie relatiei.

Greseala tipica:

Daca adaugi doua tabele in Query Design si NU exista nicio linie de relatie intre ele (nici automata, nici trasata manual), Access face un produs cartezian: combina fiecare rand din primul tabel cu FIECARE rand din al doilea. Semnul ca s-a intamplat asta: numarul de randuri din rezultat e mult mai mare decat te astepti (de exemplu 3 comenzi x 50 de clienti = 150 de randuri, in loc de 3). Solutia: verifici in fereastra de proiectare daca exista linia subtire de legatura intre cele doua casute de tabel; daca lipseste, o tragi manual intre campurile comune.

9

Recapitulare si conexiuni

O interogare de selectie e o intrebare pusa bazei de date; grila de proiectare e locul unde alegi coloanele, criteriile si sortarea; filtrele fac acelasi lucru rapid si temporar, direct pe tabelul deschis; iar o interogare pe doua tabele legate iti aduce, intr-un singur rezultat, informatii care in realitate stau in locuri diferite.
Rezumat vizual al pasilor:

Query Design → adaugi tabelul (tabelele)
  ↓
Grila de proiectare → alegi coloanele (Field), le arati sau nu (Show)
  ↓
Criteria — text intre ghilimele, numere fara ghilimele, date intre # #
  ↓
Acelasi rand = SI · Randuri diferite (Or) = SAU
  ↓
Sort — Ascending / Descending, pe una sau mai multe coloane
  ↓
Run — vezi rezultatul; Ctrl+S — salvezi interogarea ca obiect reutilizabil

Conexiune cu urmatoarea lectie:

O interogare buna, cu criteriile si sortarea corecte, este exact ce ai nevoie pentru pasul urmator: un raport tiparibil, curat, gata de pus pe biroul sefului sau trimis clientului. In lectia urmatoare veti lua o interogare ca aceasta si veti construi din ea un raport formatat, cu totaluri, pe care il si veti integra intr-o mica aplicatie completa.

De retinut pentru activitatile practice:

Query Design → Show Table / Add Tables (dupa versiune) → alegi tabelul(ele).
Grila: Field, Table, Sort, Show, Criteria.
Text: "valoare" · Numar: <10, Between x And y · Data: #zz.ll.aaaa#
SI = acelasi rand Criteria · SAU = randuri Criteria/Or diferite
Sort: Ascending/Descending, ordinea coloanelor in grila conteaza
Filter by Selection / Filter by Form = rapid, temporar, fara obiect salvat
Doua tabele = linie de relatie pe campul comun, altfel produs cartezian

Exercitii practice

Exercitiul 1 (Nivel minim) — Un singur criteriu

Ai tabelul Materiale cu coloanele Denumire, Categorie, Cantitate, PretUnitar. Construieste o interogare de selectie care afiseaza doar coloanele Denumire si Cantitate, pentru materialele din categoria "Vopsea". Scrie exact ce ai trece pe randul Criteria si sub ce coloana.

Vezi rezolvarea

In grila de proiectare adaugi trei coloane: Denumire, Cantitate si Categorie.

  1. Pe randul Criteria, sub coloana Categorie, scrii: "Vopsea" (sau doar Vopsea — Access adauga singur ghilimelele).
  2. Debifezi caseta Show de la coloana Categorie, pentru ca ea serveste doar la filtrare, nu trebuie sa apara in rezultat.
  3. Casutele Show raman bifate doar la Denumire si Cantitate — acestea sunt coloanele care apar in rezultatul final.

Exercitiul 2 (Nivel standard) — SI, SAU si sortare

Din acelasi tabel Materiale, construieste o interogare care afiseaza materialele din categoria "Feronerie" cu pretul unitar mai mare de 5 lei, SAU orice material din categoria "Adeziv" indiferent de pret. Rezultatul trebuie sortat crescator dupa PretUnitar. Descrie exact ce scrii pe fiecare rand (Criteria si Or) si sub ce coloane, plus ce alegi pe randul Sort.

Vezi rezolvarea

In grila de proiectare adaugi coloanele Denumire, Categorie, PretUnitar (si eventual Cantitate).

  1. Pe randul Criteria: sub Categorie scrii "Feronerie", iar pe ACELASI rand, sub PretUnitar, scrii >5 — acestea se combina cu SI (trebuie ca ambele conditii sa fie adevarate deodata).
  2. Pe randul Or (randul de dedesubt), sub Categorie scrii "Adeziv", fara nimic pe randul Or la PretUnitar (indiferent de pret) — acesta se combina cu SAU fata de conditia de mai sus.
  3. Pe randul Sort al coloanei PretUnitar alegi Ascending (crescator).

Exercitiul 3 (Nivel performanta) — Doua tabele si un criteriu pe data

Ai doua tabele legate: Comenzi (NumarComanda, CodClient, DataComanda, ValoareComanda) si Clienti (CodClient, NumeClient, Localitate), legate prin CodClient. Construieste o interogare care afiseaza NumarComanda, DataComanda, ValoareComanda si NumeClient, doar pentru comenzile facute in luna martie 2026 (intre 01.03.2026 si 31.03.2026) cu ValoareComanda peste 500 de lei, sortate descrescator dupa ValoareComanda. Descrie tabelele adaugate, coloanele alese, criteriile exacte (cu sintaxa corecta pentru data calendaristica) si sortarea.

Vezi rezolvarea

Schita de rezolvare:

  1. In Query Design adaugi ambele tabele, Comenzi si Clienti; daca relatia pe CodClient exista deja in Database Tools → Relationships, linia de legatura apare automat.
  2. In grila adaugi: NumarComanda, DataComanda, ValoareComanda (din Comenzi) si NumeClient (din Clienti).
  3. Criteria: sub DataComanda scrii Between #01.03.2026# And #31.03.2026# (diezii sunt obligatorii pentru date calendaristice); pe ACELASI rand, sub ValoareComanda scrii >500 — cele doua criterii se combina cu SI.
  4. Pe randul Sort al coloanei ValoareComanda alegi Descending (descrescator).

Criterii de evaluare: sintaxa exacta cu diez pentru data, criteriile pe acelasi rand (SI), si sortarea descrescatoare corect aleasa.

Ce ai invatat astazi

  • Interogarea de selectie afiseaza un subset de randuri/coloane, fara sa modifice tabelul original
  • Grila de proiectare: Field, Table, Sort, Show, Criteria — se construieste in Query Design
  • Criterii text: intre ghilimele ("Lemn"); Like "*text*" pentru cautare partiala
  • Criterii numerice: fara ghilimele (<10, Between 5 And 20)
  • Criterii pe date: intre diez (#01.03.2026#), Date() pentru data curenta
  • SI = criterii pe acelasi rand Criteria; SAU = criterii pe randuri Criteria/Or diferite
  • Sort: Ascending/Descending; ordinea coloanelor in grila stabileste prioritatea sortarii
  • Filter by Selection / Filter by Form = filtrare rapida, temporara, fara obiect salvat
  • Interogare pe doua tabele = ai nevoie de linia de relatie pe campul comun, altfel apare produs cartezian

Vrei mai mult?

Provocare: Pe tabelul tau Materiale, construieste o interogare cu un camp calculat: adauga o coloana noua in grila cu formula ValoareStoc: [Cantitate]*[PretUnitar] (scrisa direct in randul Field, nu ca nume de camp existent). Ruleaza interogarea si verifica manual, pentru un singur rand, ca rezultatul e corect. Apoi adauga criteriul >500 pe aceasta coloana noua, ca sa vezi doar materialele cu valoare mare in stoc.

  • De ce crezi: Coloana ValoareStoc nu exista nicaieri in tabelul Materiale, dar interogarea o afiseaza si o poti filtra ca pe orice alta coloana. De ce crezi ca Access permite sa pui un criteriu pe o coloana calculata, care nu e stocata fizic in niciun tabel?
  • Deschidere: Formula [Cantitate]*[PretUnitar] dintr-o interogare Access e strabunica instructiunii SQL SELECT Cantitate*PretUnitar AS ValoareStoc FROM Materiale — Access traduce, in fundal, exact ce ai construit tu vizual in grila, in limbajul SQL folosit de orice baza de date reala (site-uri, banci, aplicatii de firma).

Urmatoarea lectie

Continua cu Rapoarte si o aplicatie practica — cum transformi o interogare intr-un raport tiparibil, cu grupari si totaluri, si cum leaga tabele, formulare, interogari si rapoarte intr-o mica aplicatie de gestiune completa.

Continua →