Sunteți pe pagina 1din 13

Laborator 1

Lucrare aplicativ propus spre rezolvare


a)
Se va proiecta o baz de date pentru evidena angajailor unei societi
comerciale. Pentru dezvoltare se va folosi aplicaia Access, iar fiierul de gestiune va
purta numele Eviden angajati.mdb. Baza de date va conine tabelele descrise mai jos:
Funcii
Cod fct
Functia
Studii

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

Rezultatul la care trebuie s se ajung este indicat mai jos:

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. 5: S se modifice interogarea 4, astfel nct, n list s apar denumirea complet a


funciei angajailor i nu doar codul acesteia.

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
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.

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).

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];

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.

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

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
, care este de altfel i forma implicit de interogare, n varianta de
interogare
interogri de tergere.

, pentru interogri de modificare, sau

, pentru

c) Se va continua aplicaia nceput folosind elemente de construcie a formularelor i de


transmitere a rezultatelor obinute prin intermediul rapoartelor.

Lector univ. Mircea Musan

13

S-ar putea să vă placă și