Documente Academic
Documente Profesional
Documente Cultură
1:n
Angajai
Id ang
Nume
Prenume
Functia
Data ang
Sal incad
1:n
Date pers
Id ang
CI
Data nast
Adresa
1:1
Copii ang
Cod ang
Prenume
Alocatie
Angajati
Nume cmp
Tip/dimensiune
Id ang
Numeric ntreg
Nume
Prenume
Functia
Text 20
Text 40
Text 3
Data incad
Sal incad
Dat calendaristic
Numeric ntreg
Index/cheie
Restricii
primar
Cheie
primar
Index
cu Se gsete n lista
duplicate
<ING, DIR, MCT,
MST, ECO, INF>
>=600
Date personale
Nume cmp
Tip/dimensiune
Id ang
Numeric ntreg
Index/cheie
primar
Index unic
CI
Data nast
Adresa
Text 8
Dat calendaristic
Memo
Restricii
Se gsete n lista
codurilor angajailor
din tabela Angajai
Se creaz un ablon
Loc, str., nr., ap.,
tel., jud., e-mail:
Functii
Nume cmp
Tip/dimensiune
Cod fct
Text 3
Functia
Text 15
Index/cheie
primar
Cheie
primar
Restricii
Studii
Text 10
Se gsete n lista
<PRIMARE, MEDII,
SUPERIOARE>
Copii angajati
Nume cmp
Tip/dimensiune
Cod ang
Numeric ntreg
Prenume
Alocatie
Text 40
Numeric ntreg
Index/cheie
Restricii
primar
Index
cu Se gsete n lista
duplicate
codurilor angajaior
din tabela Angajai
Valoarea implicit va
fi 40
b)
Vom continua aplicaia nceput, 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:
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;
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. 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).
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 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.
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.
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).
Ex. 13: Aceleai cerine ca la interogarea precedent, dar, pentru un anumit angajat dat
prin codul su de la tastatur (ca parametru).
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.
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.
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.
10
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.
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.
11
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.
DELETE Angajati.*
FROM Angajati INNER JOIN [Date personale]
ON Angajati.[Id ang] = [Date personale].[Cod ang]
WHERE Int((Date()-[Data nast])/365)>=60;
12
Acelai lucru se mai poate realiza i folosind meniul Query, activ dup
deschiderea unei interogri, i comutarea din opiunea interogri de selecie
, care este de altfel i forma implicit de interogare, n varianta de
interogare
interogri de tergere.
, pentru
13