Sunteți pe pagina 1din 20

CURS

9-10
Formularea interogrilor pe baze de date n Access
Sumar

Scurt cuvnt nainte despre interogarea bazelor de date Limbajul de cereri SQL i corespondena n modul Query Design view Realizarea operaiilor de adugare i tergere Lucrare aplicativ propus spre rezolvare Evidena angajailor unei societi comerciale

1. Scurt cuvnt nainte despre interogarea bazelor de date


Access ofer mai multe metode prin care ajut utilizatorul s ngusteze domeniul informaiilor pe care le caut. Cel mai flexibil mod de a realiza acest lucru este interogarea, iar, cel mai important lucru n legtur cu interogrile este faptul c acestea pot fi salvate i utilizate pentru a crea tabele, pentru a terge nregistrri sau pentru a copia nregistrri ntr-un alt tabel. Pentru a crea o interogare a unei baze de date n Access, se acceseaz zona de obiecte Queries. Aici sunt dou posibiliti: a) prin accesarea opiunii Creare interogare n modul program asisten (Create query by using wizard) permite dezvoltarea unei interogri simple, prin simpla selecie a cmpurilor ce se doresc a fi afiate; b) prin accesarea opiunii Creare interogare n modul proiectare (Create query in Design view) permite dezvoltarea interogrilor complexe proiectate n totalitate de ctre utilizator. Pe parcursul acestui curs toate interogrile dezvoltate vor fi tratate n acest mod. Pentru a vizualiza o interogare exist mai multe variante: a) vizualizare n modul Query Design view este modul implicit de vizualizare a structurii unei interogri; b) vizualizare n modul Datasheet view permite o previzualizare a rezultatului interogrii respective, naintea salvrii, respectiv, rulrii acesteia. c) vizualizare n modul SQL view permite vizualizarea interogrii n limbajul standard de interogare SQL. SQL (prescurtare de la Structured Query Language) a fost conceput ca un limbaj standard de descriere a datelor i acces la informaiile din bazele de date, ulterior dezvoltndu-se ca o adevrat tehnologie dedicat arhitecturilor client-server. Utilizat iniial de ctre firma IBM pentru produsul DB2, limbajul de interogare al bazelor de date relaionale SQL a devenit la mijlocul deceniului trecut un standard n domeniu. De atunci i pn n prezent au fost dezvoltate un numr de 7 versiuni ale standardului SQL, trei dintre acestea aparinnd Institutului Naional American de Standarde (ANSI), celelalte fiind concepute de firme de prestigiu ca IBM, Microsoft, Borland, sau de ctre consoriile industriale SAG (The SQL Access Group) i X/Open, primul format din sute de firme ce comercializeaz software pentru baze de date, iar cel din urm orientat spre activiti de promovare a standardelor n domeniul sistemelor deschise. Din pcate, lipsa unui standard unic SQL are drept consecine creterea costurilor programelor de gestiune a bazelor de date i ngreuneaz ntreinerea arhitecturilor client/server. Comenzile principale n cazul limbajului SQL se refer la cele cinci operaii de baz care se pot efectua ntr-un limbaj relaional: Crearea/tergerea unei tabele Inserarea de noi linii intr-o tabel tergerea unor linii dintr-o tabel Modificarea unor linii dintr-o tabel Listarea selectiv a datelor din una sau mai multe tabele Rularea unei interogri se face prin acionarea dublu click pe numele interogrii respective, sau selectarea sa i apsarea pe butonul .

Pentru reintrare n zona de structur a unei interogri pentru viitoare posibile modificri ale acesteia se selecteaz interogarea dorit i se acioneaz opiunea .

2. Limbajul de cereri n SQL i corespondena n modul Query Design view


Regsirea datelor din una sau mai multe tabele se face cu comanda SELECT. Sintaxa simplificat a acesteia este: SELECT [DISTINCT] [lista_tabele].lista_nume_campuri FROM tabela sau tabele [WHERE conditie] [GROUP BY coloana1, coloana2.] [HAVING conditie_de_grup] [ORDER BY coloana1 [ASC|DESC],] Dup cum se observ doar clauzele SELECT i FROM sunt obligatorii, celelalte reprezentnd opiuni. Toate aceste clauze prezente n clauza SQL SELECT vor fi prezentate n cele ce urmeaz. Not: Toate problemele propuse spre rezolvare ulterioar se refer la baza de date Universitate.mdb, descris n cursul anterior.

2.1 Cereri simple


Cea mai simpl cerere este cea prin care se regsesc toate informaiile dintr-o tabel. n acest caz, simbolul * plasat lng clauza SELECT ine loc de lista tuturor coloanelor unei tabele. Clauza FROM conine numele tabelei. Exemplu: Selectarea tuturor informaiilor din tabela Facultati.

a) varianta Query Design View:

b) varianta SQL: SELECT * FROM Facultate; Exemplu: Se cere o list cu cmpurile CodStud, Specializare i Media din tabela Student.

a) varianta Design View:

b) varianta SQL: SELECT CodStud, Specializare, An FROM Student; Alias de coloan n cazul n care clauza SELECT conine expresii, numele coloanelor din rezultat sunt date de acestea. Dac se dorete ca n rezultat coloana respectiv s aib alt nume, acesta se poate specifica cu AS nume_nou. Exemplu: Afiarea numelui studentului cu denumirea Nume Student, a iniialei tatlui Inititiala tata i a prenumelui cu denumirea Prenume Student din tabela DatePersonale.

a) varianta Design view:

b) varianta SQL: SELECT Nume AS [Nume student], Init AS [Initiala tatalui], Prenume AS [Prenume student] FROM DatePersonale; Constante (literali) Dac n lista SELECT se gsesc i constante, atunci pe acele coloane toate liniile rezultatului vor conine valorile respective. Exemplu: Selectarea numelui studentului, textul este nscut la data de i data naterii din tabela DatePersonale.

a) varianta Design view:

b) varianta SQL: SELECT Nume, 'este nascut la' AS [Text], DataNast FROM DatePersonale;
4

2.2 Clauza DISTINCT


n cazul cererilor de pn acum din fiecare linie a tabelei rezult o linie a rezultatului, chiar dac uneori unele linii sunt identice. Pentru a elimina liniile duplicat ale unui rezultat se folosete clauza DISTINCT care apare ntre cuvntul cheie SELECT i lista de elemente ale rezultatului. Exemplu: Afisarea codului numeric al facultii pentru care exist studeni n tabela Student. SELECT DISTINCT CodFac FROM Student;

2.3 Clauza ORDER BY


Ordinea n care apar liniile unui rezultat este dat de modul n care un sistem de gestiune stocheazi regsete informaia n tabele. Din aceast cauz n limbajul SQL exist posibilitatea de a sorta liniile unui rezultat n funcie de necesitile utilizatorului. Criteriile de sortare se definesc cu ajutorul clauzei ORDER BY. Aceasta este n mod normal ultima clauz care apare ntr-o cerere i poate conine nume de coloane, aliasuri de coloane sau numrul de ordine al coloanei n rezultat. Cnd sunt specificate mai multe criterii ele se aplic de la stnga la dreapta. Exemplu: Afiarea CNP, Nume, Prenume, data naterii din tabela DatePersonale ordonai dup nume i prenume.

a) varianta Design view

b) varianta SQL: SELECT CNP, Nume, Prenume, DataNast FROM DatePersonale ORDER BY Nume, Prenume;

2.4 Operatori
Operatorul BETWEEN Sintaxa: BETWEEN valoare_initiala AND valoare_finala Operatorul BETWEEN indic o plaj de valori incluznd valorile din capetele acestuia, cele indicate. Este un operator derivat, astfel de condiii putnd fi scrise folosind >=, AND, <= i a fost introdus pentru ca cererile s fie mai apropiate de exprimarea n limba englez. Exemplu: Afiarea codului facultii, media, specializarea, pentru studenii care au media cuprins ntre 8 i 9 inclusiv.
5

a) varianta Design view:

b) varianta SQL: SELECT CodFac, Media, Specializare FROM Student WHERE Media BETWEEN 8 AND 9; Operatorul IN Sintaxa: IN (v1,v2,...vk) Operatorul IN indic apartenena la o mulime de valori (v1,v2,...vk). Este de asemenea un operator derivat, dar este foarte util pentru simplificarea scrierii cererilor n cazul n care mulimea conine un numr mare de valori. Exemplu: Afiarea codului facultii, codul studentului, specializarea, bursa pentru studenii care au codul facultaii 1 sau 3.

SELECT CodFac, CodStud, Specializare, Bursa FROM Student WHERE CodFac IN (1,3); Operatorul LIKE Sintaxa: LIKE sablon Operatorul LIKE a fost introdus pentru a se putea testa potrivirea valorii unei expresii cu un ablon. ablonul poate conine caractere care vor fi cutate aa cum este i caracterul special: * nsemnnd orice ir de caractere (inclusiv unul vid). Exemplu: Afiarea codul studentului, numelui, prenumelui, data naterii pentru studenii al cror nume ncepe cu litera A, folosind tabela DatePersonale.
6

SELECT CodStud, Nume, Prenume, DataNasterii FROM DatePersonale WHERE Prenume LIKE A*;

2.5 Funcii statistice de grup


Exist multe cazuri n care se dorete obinerea de date statistice din informaiile coninute n baza de date. Pentru aceasta se folosesc funciile statistice de grup, care pe baza nregistrrilor din ntreaga tabel sau a celor care fac parte dintr-un grup - n cazul existenei clauzei GROUP BY - calculeaz valoarea statistic respectiv. Principalele funcii de grup sunt: Funcia COUNT (numrare) avnd mai multe forme: COUNT(*) ntoarce numrul de nregistrri din grup COUNT(expr) ntoarce numrul de valori nenule pentru expresia argument COUNT(DISTINCT expr) ntoarce numrul de valori distincte pentru expresia argument Funcia AVG (medie) AVG(expr) ntoarce media aritmetic a valorilor unei expresii Funcia MIN (valoarea minim) MIN(expr) ntoarce valoarea minim a unei expresii Funcia MAX (valoarea maxim) MAX(expr) ntoarce valoarea maxim a unei expresii Funciile Min i MAX se pot aplica i irurilor de caractere, n acest caz se folosete ordinea lexicografic. Funcia SUM (suma valorilor) SUM(expr) ntoarce suma valorilor unei expresii sau NULL n cazul n care n grupul pentru care se calculeaz suma este vid. Valorile nule nu sunt luate n considerare la calcularea sumei. Aa cum am menionat, n cazul n care cererea nu conine clauza GROUP BY valoarea funciilor este calculat pentru ntreaga tabel specificat n clauza FROM. Exemplu: Se cere o situaie general cuprinznd numrul total de studeni, media cea mai mic, media cea mai mare, media general i cuantumul total al burselor la nivelul ntregii universiti.

SELECT Count(*) Min(Media) Max(Media) Avg(Media) Sum(Bursa) FROM Sudent;

AS AS AS AS AS

[Numar studenti], [Media minima], [Media maxima], [Media generala], [Valoare totala burse]

2.6 Clauza GROUP BY


Clauza GROUP BY se folosete pentru a grupa nregistrrile pe baza unor criterii n scopul calculrii de valori statistice pentru fiecare grup n parte. n acest caz rezultatul cererii va conine cte o linie pentru fiecare grup identificat. n mod Design view aceast opiune se activeaz prin butonul Total .

Sintaxa: GROUP BY coloana1 [, coloana2] Exemplu: Se cere o situaie cuprinznd numrul total de studeni, media general i cuantumul total al burselor pe fiecare specializare n parte din cele existente.

SELECT Specializare, Avg(Media) AS [Media generala], Sum(Bursa) AS [Valoare burse] FROM Sudent GROUP BY Specializare;

2.7 Clauza HAVING


Dac WHERE introduce o condiie de filtrare a nregistrrilor, HAVING face acelai lucru pentru grupuri: doar grupurile care ndeplinesc condiia coninut n aceast clauz vor avea o linie n rezultatul cererii. Condiia specificat prin HAVING este o expresie logic incluznd funcii de grup sau constante la nivel de grup.
8

Exemplu: S se refac exemplul anterior, aprnd n lista rezultat doar acei studeni a cror medie depete nota 8.

SELECT Specializare, Avg(Media) AS [Media generala], Sum(Bursa) AS [Valoare burse] FROM Sudent GROUP BY Specializare HAVING Media>=8;

2.8 Cereri coninnd mai multe tabele


Operaia prin care se obine un rezultat pe baza datelor din mai multe tabele se numete JOIN. Pentru a se putea efectua un JOIN este n general necesar ca tabelele s aib coloane comune, cum este cazul CodFac care se gsete att n tabela Student, ct i n tabela Facultate. Exist mai multe variante de rezultat n urma unei astefl de relaii, i anume: INNER JOIN (legtur interioar) n tabela destinaie vor fi ncrcate doar nregistrrile care respect condiia impus de relaie, deci care au corespondent n tabela pereche (nregistrrile din tabela printe care au corespondent n tabela copil i invers); LEFT JOIN (legtur la stnga) n tabela destinaie vor fi incluse doar nregistrrile care respect condiia relaiei (au corespondent n tabela vecin). n plus, n tabela destinaie vor fi incluse i nregistrrile din tabela printe (din stnga) care nu au corespondent n tabela copil (din dreapta); RIGHT JOIN (legtur la dreapta) n tabela destinaie vor fi incluse doar nregistrrile care respect condiia relaiei. La acestea se adaug i nregistrrile din tabela copil (din dreapta) care nu au corespondent n tabela printe (din stnga). Exemplu: Se cere o situaie cuprinznd numrul total de studeni, media general i cuantumul total al burselor la nivel de facultate. SELECT Facultate.Denumire, Avg(Sudent.Media) AS [Media generala], Sum(Sudent.Bursa) AS [Valoare burse] FROM Facultate INNER JOIN Sudent ON Facultate.CodFac = Sudent.CodFac GROUP BY Facultate.Denumire;

n modul QBE Design View opiunile LEFT JOIN, respectiv, RIGHT JOIN, se aleg din fereastra Join Properties. Pentru a ajunge aici se d dublu click pe relaie n cadrul interogrii.

Opiunea 1 este cea implicit (INNER JOIN); opiunea 2 este echivalent opiunii LEFT JOIN, iar, opiunea 3 implic RIGHT JOIN.

3. Realizarea operaiilor de modificare i tergere


3.1 Modificarea unor linii dintr-o tabel
Sintaxa simplificat a comenzii SQL n limbajul standard care modific liniile dintr-o tabel este urmtoarea: UPDATE nume_tabela SET colana1=valoare1, coloana2=valoare2, . [WHERE conditie] [LIMIT numar_linii] Efectul acestei comenzi este de actualizare a toturor liniilor care ndeplinesc condiia din clauza WHERE, sau a tuturor liniilor din tabel, n cazul n care lipsete aceast clauz. Noile valor sunt date de clauza SET. Exemplu: Modificarea numelui studentului cu CNP=176232567891, n Dobrota. UPDATE DatePersonale SET Nume=Dobrota WHERE CNP=176232567891; Exemplu: Mrirea tuturor burselor studenilor cu 10%. UPDATE Studenti SET Bursa=Bursa*1.1;
10

3.2 tergerea unor linii dintr-o tabel


Sintaxa simplificat a comenzii SQL n limbajul standard care terge liniile dintr-o tabel este urmtoarea: DELETE FROM nume_tabela [WHERE conditie] [LIMIT numar_linii] Efectul acestei comenzi este de tergere a liniilor care ndeplinesc condiia din clauza WHERE. LIMIT se folosete pentru a specifica numrul maxim de linii care se pot terge cu acea comand. n cazul n care clauza WHERE lipsete, toate liniile tabelei vor fi eliminate. Exemplu: tergerea studenilor din tabela Studenti care au media mai mic de 7. DELETE Student.* FROM Student WHERE Medie<7;

4. Lucrare aplicativ propus spre rezolvare


Vom continua aplicaia nceput n capitolul anterior, pentru formularea de cereri pe baza de date Evidenta angajati.mdb. Ex. 1 a: Se cer date complete despre angajaii firmei folosind setul complet de cmpuri din tabela Angajati, aranjai n ordine alfabetic. a) varianta Query Design view QBE:

b) varianta SQL: SELECT [Id ang], Nume, Prenume, Functia, [Data incad], [Sal incad] FROM Angajati ORDER BY Nume, Prenume; Ex. 1 b: Acelai enun ca n exerciiul anterior, dar, ntr-o alt form de reprezentare a interogrii. a) varianta Query Design view QBE:

11

b) varianta SQL: SELECT Angajati.* FROM Angajati ORDER BY Nume, Prenume; Ex. 2: S se refac prima interogare, astfel nct s apar n list doar acei angajai care sunt de profesie inginer.

SELECT Angajati.* FROM Angajati WHERE Functia='ING' ORDER BY Nume, Prenume; Ex. 3 a: S se refac prima interogare, astfel nct n list s apar acei angajai al cror nume ncepe cu litera P.

SELECT Angajati.* FROM Angajati WHERE Nume Like 'P*' ORDER BY Nume, Prenume;
12

Ex. 3 b: Se va reface interogarea anterioar, astfel nct n list vor aprea toi acei angajai al cror nume conine grupul de litere op. a) varianta Query Design view:

b) varianta SQL: SELECT Angajati.* FROM Angajati WHERE Nume Like '*op*' ORDER BY Nume, Prenume; Ex. 4: Se cere o list: id-ul de angajat, numele, prenumele, functia, data incadrrii n funcie, vechimea n munc i salariul cu care este ncadrat fiecare angajat. a) varianta Query Design view:

b) varianta SQL: SELECT [Id ang], Nume, Prenume, Functia, [Data incad], Int((Date()-[Data incad])/365) AS [Vechime in munca], [Sal incad] FROM Angajati; Ex. 5: S se modifice interogarea 4, astfel nct, n list s apar denumirea complet a funciei angajailor i nu doar codul acesteia.

13

SELECT [Id ang], Nume, Prenume, Functii.Functia, [Data incad], Int((Date()-[Data incad])/365) AS Vechime, [Sal incad] FROM Functii INNER JOIN Angajati ON Functii.[Cod fct] = Angajati.Functia; Ex. 6: Se cere o situaie similar celei precedente, doar c, n acest caz se cer acei angajai care sunt de profesie inginer sau muncitor, au vechime de pn n 4 ani n cmpul muncii, iar, salariul este peste media pe economie (considerm aceast medie ca fiind 1250 lei).

SELECT Angajati.[Id ang], Angajati.Nume, Angajati.Prenume, Functii.Functia, Angajati.[Data incad], Int((Date()-[Data incad])/365) AS [Vechime in munca], Angajati.[Sal incad] FROM Functii INNER JOIN Angajati ON Functii.[Cod fct] = Angajati.Functia WHERE Int((Date()-[Data incad])/365)<4 AND Angajati.[Sal incad]>=1250 AND (Angajati.Functia='ing' Or Angajati.Functia='mct') ORDER BY Angajati.Functia; Ex. 7: Se va reface enunul anterior, astfel nct, va exista posibilitatea afirii unei liste a acelor angajai care sau au sub 4 ani vechime, sau au salariul peste medie i sunt de profesie inginer sau muncitor.

SELECT Angajati.[Id ang], Angajati.Nume, Angajati.Prenume, Functii.Functia, Angajati.[Data incad], Int((Date()-[Data incad])/365) AS [Vechime in munca], Angajati.[Sal incad] FROM Functii INNER JOIN Angajati ON Functii.[Cod fct] = Angajati.Functia WHERE (Angajati.[Sal incad]>=1250 AND (Angajati.Functia='ing' Or Angajati.Functia='mct')) OR Int((Date()-[Data incad])/365)<4
14

ORDER BY Angajati.Functia; Ex. 8: O list cu numrul de angajai, maximul salarial, media salarial general i valoarea total a fondului de salarii.

SELECT Count([Id ang]) AS [Numar angajati], Max([Sal incad]) AS [Maxim salarial], Min([Sal incad]) AS [Minim salarial], Avg([Sal incad]) AS [Media salariala], Sum([Sal incad]) AS [Fond salarii] FROM Angajati; Ex. 9: Aceleai cerine ca n interogarea anterioar, dar, situaia se cere a se obine pe fiecare funcie n parte. Astfel de cereri se numesc cereri de totalizare sau de grupare i se activeaz prin butonul .

SELECT Functii.Functia, Count(Angajati.[Id ang]) AS [Numar angajati], Max(Angajati.[Sal incad]) AS [Maxim salarial], Min(Angajati.[Sal incad]) AS [Minim salarial], Sum(Angajati.[Sal incad]) AS [Fond salarii] FROM Functii INNER JOIN Angajati ON Functii.[Cod fct] = Angajati.Functia GROUP BY Functii.Functia; Ex. 10: S se refac interogarea anterioar astfel nct n list s apar i acele funcii existente n nomenclatorul de funcii, dar, pentru care nu sunt nregistrai angajai. Se va face o sortare descresctoare dup fondul de salarii.

15

SELECT Functii.Functia, Count(Angajati.[Id ang]) AS [Numar angajati], Max(Angajati.[Sal incad]) AS [Maxim salarial], Min(Angajati.[Sal incad]) AS [Minim salarial], Sum(Angajati.[Sal incad]) AS [Fond salarii] FROM Functii LEFT JOIN Angajati ON Functii.[Cod fct] = Angajati.Functia GROUP BY Functii.Functia; Ex. 11: Date complete (Id ang, Nume, Prenume, Data nast, CI, Adresa, Functia (n denumirea sa complet), studiile aferente respectivei funcii, Data incad i Sal incad). Lista se va da n ordine alfabetic a angajailor.

SELECT Angajati[Id ang], Nume, Prenume, [Data nast], CI, Adresa, Functii.Functia, Studii FROM Functii INNER JOIN (Angajati INNER JOIN [Date personale] ON Angajati.[Id ang] = [Date personale].[Id ang]) ON [Cod fct] = Angajati.Functia ORDER BY Nume, Prenume; Ex. 12: Aceleai cerine ca la interogarea anterioar, dar cerinele s fie pentru o anumit categorie de funcie, ce va fi dat de la tastatur n momentul rulrii interogrii (ca parametru).

16

SELECT Angajati[Id ang], Nume, Prenume, [Data nast], CI, Adresa, Functii.Functia, Studii FROM Functii INNER JOIN (Angajati INNER JOIN [Date personale] ON Angajati.[Id ang] = [Date personale].[Id ang]) ON [Cod fct] = Angajati.Functia WHERE Functii.Functia=[Introduceti o functie:] ORDER BY Nume, Prenume; Ex. 13: Aceleai cerine ca la interogarea precedent, dar, pentru un anumit angajat dat prin codul su de la tastatur (ca parametru).

SELECT Angajati[Id ang], Nume, Prenume, [Data nast], CI, Adresa, Functii.Functia, Studii FROM Functii INNER JOIN (Angajati INNER JOIN [Date personale] ON Angajati.[Id ang] = [Date personale].[Id ang]) ON [Cod fct] = Angajati.Functia WHERE Angajati.[Id ang]=[Dati un cod de angajat:] ORDER BY Nume, Prenume; Ex. 14: Se cere o list cu toi copii salariailor, i anume: codurile angajailor, numele lor de familie, iniiala prenumelui angajatului (ca si tat de copii) i prenumele copiilor.

SELECT [Id ang] AS [Cod angajat], Nume AS [Nume familie], LEFT(Prenume,1)+'.' AS [Intiala tata], [Copii angajati].Prenume AS [Prenume copil] FROM Angajati INNER JOIN [Copii angajati] ON Angajati.[Id ang] = [Copii angajati].[Cod ang];

17

Ex. 15: O situaie cu angajaii din firm (codul, numele i prenumele lor) cu numrul de copii ai fiecruia i suma total obinut din alocaiile acestora, n cazul angajailor ce au copii.

SELECT [Id ang], Nume, Prenume, Count([Cod ang]) AS [Numar copii] Sum(Alocatie) AS [Valoare din alocatii] FROM Angajati INNER JOIN [Copii angajati] ON Angajati.[Id ang] = [Copii angajati].[Cod ang] GROUP BY [Id ang], Nume, Prenume; Observaie: Dac se dorete o situaie care s includ o list complet, cu toi angajaii, indiferent c acetia au sau nu copii, se modific interogarea anterioar astfel nct n loc de INNER JOIN se va scrie LEFT JOIN. Ex. 16: Interogri de modificare. Toate salariile de ncadrare ale angajailor se mresc cu 10%.

UPDATE Angajati SET [Sal incad] = [sal incad]+[sal incad]*10/100; sau UPDATE Angajati SET [Sal incad] = [sal incad]*1.1; Ex. 17: Toate salariile de ncadrare ale sufer modificri cu un anumit procent dat de la tastatur.

18

UPDATE Angajati SET [Sal incad] = [sal incad]+[sal incad]*[Introduceti un procent de modificare salariala:]/100; Ex. 18: Toate salariile unei anumite categorii de angajai se modific cu un anumit procent. Categoria de funcii i procentul de modificare se dau de la tastatur.

UPDATE Angajati SET [Sal incad] = [sal incad]+[sal incad]*[Introduceti un procent de modificare salariala:]/100 WHERE Functia=[Introduceti o categorie de functii:]; Ex. 19: Salariul unui anumit angajat, dat prin codul su se modific cu un anumit procent.

UPDATE Angajati SET [Sal incad] = [sal incad]+[sal incad]*[Introduceti un procent de modificare salariala:]/100 WHERE [Id ang]=[Introduceti un cod angajat:]; Ex. 20: Interogri de tergere. Se terg din baza de date acei angajai care au mplinit vrsta de pensionare, adic 60 de ani. Indicaie: Aceast interogare presupune tergerea tuturor angajailor care au ndeplinit respectivul criteriu, mpreun cu datele lor personale i copii lor. Pentru aceasta trebuie intrat n relaia realizat pe baza de date. Apoi, se alege relaia ntre tabelele Angajati si Date personale i se realizeaz tergere n cascad pe cele dou tabele, prin bifarea opiunilor Enforce Referential Integrity, i ulterior Cascade Delete Related Records. Operaiunea anterior se repet n mod similar i pentru tabelele Angajati i Copii angajati.
19

DELETE Angajati.* FROM Angajati INNER JOIN [Date personale] ON Angajati.[Id ang] = [Date personale].[Cod ang] WHERE Int((Date()-[Data nast])/365)>=60; Observaie: n cazul interogrilor de modificare, respectiv, tergerea setarea unui astfel de tip de interogare se face n modul Query Design view prin click dreapta pe zona de lucru a interogrii i selectarea opiunii Update Query pentru cea de modificare, respectiv, Delete Query pentru cea de tergere.

Acelai lucru se mai poate realiza i folosind meniul Query, activ dup deschiderea unei interogri, i comutarea din opiunea interogri de selecie i forma implicit de interogare, n varianta de interogare modificare, sau , pentru interogri de tergere. , care este de altfel , pentru interogri de

20