La unele județe, Subiectul I nu se rezolvă scriind SQL pe hârtie, ci în Microsoft Access: primești
un fișier .accdb cu tabelele gata făcute și lucrezi direct în program. Cerințele sunt scurte —
„adăugați o regulă de validare”, „realizați un raport grupat după clasă” — și majoritatea se rezolvă
din meniuri, nu din cod.
Pagina asta adună tot ce cer aceste subiecte, pe 90 de probleme rezolvate din sesiunea
Teleorman 2026 (bazele ATESTAT2026 — SITUATIE, ELEVI — și atestat_2026_1 — CABANE, TRASEE, UTILIZATORI — și BIBLIOTECA — FISE, EDITURI, CARTI, CERERI, RETUR). Fiecare interogare a fost
rulată pe baza oficială din pachetul ISJ, cu motorul Access, iar rezultatele din pagini sunt cele
obținute la rulare.
Ce nu e aici. SQL-ul scris de mână, cu
CREATE TABLEșiINSERT, e la Baze de date și SQL la atestatul de informatică. Interogările pe două tabele legate, cuJOIN, sunt la Interogări SQL pe două tabele. Cum se construiește o lucrare de atestat în Access (cealaltă jumătate a examenului) e la Atestat în Access.
Cele patru tipuri de cerință
Aproape fiecare subiect are două cerințe: a) și b). Una dintre ele e aproape mereu „Introduceți în tabelă o înregistrare nouă”. Cealaltă cade într-una din patru categorii:
| Tip | Unde lucrezi în Access | Câte din 90 |
|---|---|---|
| proprietăți de câmp (validare, mască, dimensiune) | tabela → Design View → Field Properties | 8 |
| interogare (afișare, filtrare, medie, maxim, modificare) | Create → Query Design | 38 |
| raport (grupare, sortare, totaluri, culori) | Create → Report Wizard | 21 |
| formular (cu imagine de fundal, pe interogare, cu subformular) | Create → Form | 23 |
Interogările sunt majoritare, dar celelalte trei tipuri nu au echivalent în SQL-ul de pe hârtie. Acolo
pierd puncte cei care au învățat doar SELECT.
Înregistrarea nouă — două căi
Cerința apare la aproape toate cele 90 de subiecte și se rezolvă în două moduri, ambele corecte:
- direct în tabelă: dublu-clic pe tabelă → ultimul rând, marcat cu
*→ completezi câmpurile; rândul se salvează când treci pe alt rând; - cu o interogare de adăugare: Query Design → SQL View →
INSERT INTO ... VALUES (...)→ Run.
INSERT INTO ELEVI (Nume, Prenume, Clasa, Email, Bursier, Localitate, [Numar absente])
VALUES ("Georgescu", "Radu", "12D", "gradu@gmail.com", False, "Alexandria", 6);
Câmpul cheie de tip AutoNumber (Nrcrt, Nr matricol) nu se completează: Access îl numerotează
singur. Numele de câmpuri cu spații se scriu între paranteze drepte. Explicația completă, cu
avertismentele pe care le afișează Access, e la
subiectul 1.
Atenție la un detaliu: rândul nou intră în toate rezultatele care urmează. Dacă adaugi un elev cu 30 de absențe și apoi calculezi media, media se schimbă.
Proprietățile câmpului
Se lucrează în Design View, pe câmpul cerut, în panoul Field Properties de jos.
| Proprietate | Ce face | Exemplu | Problemă rezolvată |
|---|---|---|---|
| Validation Rule | condiția pe care trebuie s-o îndeplinească valoarea | In ("12A","12B") · Between 5 And 10 · >=0 |
1, 2, 19 |
| Validation Text | mesajul afișat când valoarea e respinsă | Valoare negativa! |
19 |
| Input Mask | forma în care se tastează valoarea | >L<??????????????????? |
16 |
| Field Size | lungimea maximă (text) sau tipul numeric | 20 · Decimal |
16, 10 |
| Decimal Places | câte zecimale se afișează | 2 |
10 |
Trei lucruri de știut:
- Regula nu se aplică datelor vechi. Dacă tabela are deja valori care o încalcă, Access te avertizează la salvare; regula rămâne și se aplică de acum înainte.
- Regula nu respinge câmpul gol. O medie lipsă (Null) trece de
Between 5 And 10. - Zecimalele afișate nu limitează valoarea. Decimal Places = 2 arată
9,35, dar câmpul poate păstra9,3456. Pentru o limită reală e nevoie de Field Size = Decimal cu Scale = 2.
Interogările
O interogare se face în Create → Query Design. Ai două vederi ale aceluiași lucru: grila
(Design View), unde bifezi câmpuri și scrii criterii, și SQL View, unde scrii instrucțiunea.
Ce cere enunțul ca „interogarea ORAS” înseamnă: salvezi interogarea cu exact acel nume (Ctrl+S).
Criteriile din grilă: același rând = AND
Criteriile scrise pe același rând al grilei se leagă prin AND. Pe rânduri diferite (or) devin OR. Cea mai frecventă greșeală la Access e un criteriu scris un rând mai jos: apar toți elevii dintr-o condiție plus toți din cealaltă. Exemplu la subiectul 4.
Text, șabloane și câmpuri Da/Nu
Like "*@yahoo.*"—*înseamnă oricâte caractere,?un singur caracter (subiectul 18).%din SQL-ul standard nu funcționează în modul implicit al Access.Like "A*"= începe cu A;Like "*A*"= conține A oriunde (subiectul 28).- Un câmp Yes/No (
Bursier) se compară cuTrue/False, nu cu"Da". - Datele calendaristice se scriu între diezi:
#2004-01-01#; anul se extrage cuYear([Data nasterii]).
Interogarea cu parametru: „X se introduce de la tastatură”
Orice nume între paranteze drepte care nu e numele unui câmp devine parametru. La rulare, Access deschide o casetă cu acel text și folosește ce scrii acolo.
SELECT Nume, Prenume, Clasa
FROM ELEVI
WHERE Bursier = True AND Localitate = [Introduceti localitatea];
Capcana: dacă numești parametrul exact ca un câmp ([Localitate]), Access nu mai întreabă nimic,
compară câmpul cu el însuși și afișează tot. Explicat la
subiectul 21; folosit și la
25 și
28.
Media, maximul și minimul: subinterogarea
„Elevii cu absențe peste medie” nu se poate scrie ca WHERE [Numar absente] > Avg(...): o funcție de
agregare nu are voie în WHERE. Media se calculează separat, într-o subinterogare:
SELECT Nume, Prenume, [Numar absente], Clasa
FROM ELEVI
WHERE CDbl([Numar absente]) > (SELECT Avg([Numar absente]) FROM ELEVI);
Când cerința spune „din fiecare clasă”, subinterogarea devine corelată: calculează maximul
sau minimul clasei elevului curent. GROUP BY singur nu ajunge, fiindcă dă valoarea, dar nu și
numele elevului care o are.
| Cerință | Tipar | Problemă |
|---|---|---|
| cel mai mare / cel mai mic din tot tabelul | = (SELECT Max(...) FROM T) |
5 |
| peste / sub medie | > (SELECT Avg(...) FROM T) |
22, 27 |
| maximul / minimul din fiecare grup | = (SELECT Min(x.c) FROM T AS x WHERE x.Clasa = e.Clasa) |
12, 26 |
Dacă doi elevi au aceeași valoare maximă, apar amândoi. E corect: amândoi „au maximul”.
Vârsta: DateAdd, nu DateDiff
„Elevii majori” pare să ceară DateDiff("yyyy", [Data nasterii], Date()) >= 18. Dar DateDiff
numără doar schimbările de an calendaristic: un elev născut în decembrie apare major din ianuarie.
Corect e DateAdd("yyyy", 18, [Data nasterii]) <= Date() —
subiectul 9.
Modificarea datelor: interogarea Update
„Scădeți 10% din absențe” nu afișează nimic, ci schimbă tabela. În Query Design alegi tipul Update, apare rândul Update To, apoi Run.
UPDATE ELEVI
SET [Numar absente] = [Numar absente] * 0.9
WHERE Bursier = False;
Două capcane: fiecare rulare mai scade încă 10%, iar un câmp întreg (Long Integer) nu poate păstra
9,9. Access rotunjește la salvare, iar la 4,5 rotunjește spre numărul par (4, nu 5) —
subiectul 23.
Rapoartele
Aproape tot ce se cere la un raport se face din Report Wizard, în pași separați:
| Cerință din enunț | Pasul din Wizard |
|---|---|
| „toate câmpurile tabelei” | primul pas: butonul >> |
| „grupate după câmpul CLASA” | grouping levels |
| „cu sortare după NUME” | sort order — sortarea în grup |
| „însumarea / valoarea maximă din câmpul X” | butonul Summary Options (Sum, Avg, Min, Max) |
La Summary Options lași Detail and Summary: raportul trebuie să conțină și rândurile, nu doar totalurile. Grupare și sortare la subiectul 13; totaluri la 29 (sumă) și 30 (maxim).
„Colorați cu roșu pe fundal verde absențele mai mari decât 20” nu e un pas din Wizard. Se face după, în
Design View: selectezi caseta câmpului → Format → Conditional Formatting → Field Value Is ·
greater than · 20. Regula se pune pe caseta din secțiunea Detail, nu pe titlul coloanei —
subiectul 20.
Formularele
Create → Form face un formular cu toate câmpurile tabelei selectate. Imaginea de fundal se pune din Property Sheet al formularului (Picture, cu Picture Size Mode = Stretch), nu ca un control Image peste câmpuri. „Introduceți o înregistrare folosind formularul” înseamnă butonul New record din formular, nu din tabelă — subiectul 15 și 17.
Capcanele motorului Access
Toate de mai jos au fost rulate pe baza oficială, nu deduse:
| Comportament | Consecință |
|---|---|
majusculele nu contează: "info" = "INFO" |
alexandria găsește Alexandria |
diacriticele contează: "fizica" ≠ "FIZICĂ" |
o regulă In ("FIZICĂ") respinge fizica din tabel (3) |
TOP 1 întoarce și egalitățile |
„primul” poate fi mai mulți elevi |
| textul se sortează caracter cu caracter | 12A iese înaintea lui 9A (30) |
| câmp întreg indexat comparat cu o valoare cu zecimale | [Numar absente] > 14.1 dă 0 rânduri, iar comparația cu Avg dă Data type mismatch; CDbl([Numar absente]) rezolvă (22) |
datele din tabel sunt scrise inconsecvent: Dificil cu spațiu în față, Usor fără diacritică |
= "Dificil" și In ("Ușor","Medie") ratează rânduri; Trim() rezolvă spațiul (35, 57) |
același loc scris în două feluri: Zărnești și Zarnești |
= "Zărnești" găsește una din două cabane; Like "Z*rne*ti" le găsește pe ambele (48) |
regulă de validare pe un câmp pe care subiectul îl modifică: CARTI.Categorie acceptă doar Informatica, Beletristica, Economica, Tehnica |
UPDATE … SET Categorie = "Literatura" dă One or more values are prohibited by the validation rule; regula se schimbă întâi în Design View (66) |
| cerere „de azi” pe date din ianuarie–aprilie 2026 | DataI = Date() întoarce 0 rânduri; Date() nu are oră, Now() da (74) |
| UPDATE pe un câmp întreg | rezultatul e rotunjit, 4,5 → 4 (23) |
Subiectele oficiale au și ele inconsecvențe: un câmp cerut care nu există în tabel (6), o regulă de validare care intră în conflict cu datele existente (1), o interogare „MAJORI” care întoarce tot tabelul (9). Fiecare e documentată în pagina problemei, cu varianta aleasă și motivul. Lista completă a erorilor de acest tip e la Enunțuri ambigue la atestat.
Greșelile care se repetă
- Criteriul pe alt rând în grilă — AND devine OR.
- Interogarea salvată cu alt nume decât cel din enunț —
ORAS,MEDIE_ABS,BURSIERse cer exact. >=în loc de>— „peste”, „mai mare decât”, „sub” sunt stricte.- Mesajul de eroare scris la Validation Rule — acolo e condiția; mesajul e la Validation Text.
- Raport cu Summary Only — dispar rândurile, deși enunțul cere toate câmpurile.
- Interogarea Update rulată de două ori — modificarea se aplică de două ori.
Cum se exersează
Ai nevoie de Microsoft Access, adică de Windows și de pachetul Office care îl include. La Teleorman, ISJ publică
odată cu subiectele un pachet de fișiere cu bazele .accdb, deci poți exersa pe exact aceleași date
ca la examen.
Interogările din paginile de mai jos au fost rulate pe baza din pachet, cu motorul Access (ACE). Pașii din interfață (validări, formulare, rapoarte) urmează meniurile Access în engleză; pe o versiune mai veche sau în română, numele butoanelor pot diferi puțin.
Cel mai util test e cel pe care îl face și profesorul: după fiecare cerință, deschide tabela sau rulează interogarea și numără rândurile. Dacă un filtru întoarce tot tabelul sau nimic, aproape sigur e un criteriu pe rândul greșit sau un text scris altfel decât în tabel.