Într-o bază de date se memorează informaţii despre angajaţii unei firme şi departamentele acesteia. Diagrama ERD corespunzătoare este:
a) Construiţi baza de date cu tabele corespunzătoare şi relaţiile reprezentate in ERD şi populaţi tabelele cu înregistrări relevante pentru cerinţele următoare:
b) Să se afişeze, în ordinea alfabetică a numelor şi a prenumelor, toţi angajaţii din departamentul care are id-ul 4 (nume, prenume, id_dep).
c) Afişaţi numele fiecărui departament şi numărul angajaţilor din acel departament. Introduceţi un alias pentru coloana calculată.
d) Afişaţi departamentul în care salariul mediu este cel mai mare în raport cu celelalte departamente.
Rezolvare
a) Construiţi baza de date cu tabele corespunzătoare şi relaţiile reprezentate in ERD şi populaţi tabelele cu înregistrări relevante pentru cerinţele următoare:
Structura tabelului DEPARTAMENT pentru fiecare câmp:
- id_dep - cheie primară, Data Type: AutoNumber
- nume_dep - Data Type: Text
proprietăţi modificate
Field Size: 30
Required: Yes
- adresa - Data Type: Text
- manager - Data Type: Text
proprietăţi modificate
Field Size: 50
Structura tabelului ANGAJAT pentru fiecare câmp:
- id - cheie primară, Data Type: AutoNumber
- nume - Data Type: Text
proprietăţi modificate
Field Size: 30
Required: Yes
- prenume - Data Type: Text
proprietăţi modificate
Field Size: 30
Required: Yes
- data_ang - Data Type: Date/Time
proprietăţi modificate
Format: Short Date
Required: Yes
- salariu - Data Type: Number
proprietăţi modificate
Field Size: Long Integer
Decimal Places: 2
opţional:
Validation Rule: >0
Validation Text: Introduceti valoarea salariului
Required: Yes
- email - Data Type: Text
proprietăţi modificate
Field Size: 50
opţional:
Validation Rule: Is Null Or ((Like "*?@?*.?*") And (Not Like "*[ ,;]*"))
Validation Text: Adresa de email trebuie sa contina si caracterul @.
- tel - Data Type: Text
proprietăţi modificate
Field Size: 20
opţional:
Input Mask: 9999"- "000.000;0;_
Pentru a realiza o releţie cu tabelul DEPARTAMENT, adăugăm câmpul
- id_dep - Data Type: Number
proprietăţi modificate
Field Size: Long Integer
Decimal Places: 0
Opţional: Pentru a completa mai rapid datele în acest câmp, se poate realiza o interogare care să preia denumirea şi identificatorul departamentului din tabelul DEPARTAMENT.
Aici, coloana afişată este numele departamentului, dar valoarea preluată în tabel este identificatorul departamentului.
Se realizează relaţia de tip one-to-many legând cele două tabele
câmpul-cheie primară id din tabelul DEAPRTAMENT la
câmpul id_dep din tabelul ANGAJAT.
b) Să se afişeze, în ordinea alfabetică a numelor şi a prenumelor, toţi angajaţii din departamentul care are id-ul 4 (nume, prenume, id_dep).
Se creează o interogare care preia date din ambele tabele.
c) Afişaţi numele fiecărui departament şi numărul angajaţilor din acel departament. Introduceţi un alias pentru coloana calculată.
Este necesară o interogare care să grupeze numele departamentelor (pentru a le afişa o singură dată) şi să numere (funcţia Count) angajaţii din departamentul respectiv.
Aliasul reprezintă un pseudonim (nume) asociat unui câmp.
În acest caz, aliasul coloanei care calculează numărul de angajaţi este Nr Angajati.
Aliasul poate fi scris ca în figura de mai sus, urmat de : (două puncte) şi numele câmpului sau funcţia folosită.
d) Afişaţi departamentul în care salariul mediu este cel mai mare în raport cu celelalte departamente.
Pentru a afişa doar prima înregistrare, vom folosi clauza TOP n . Această clauză se foloseşte pentru a afişa primele n înregistrări - în cazul nostru doar prima, deci TOP 1 (n=1).
Se creează o interogare care preia date din ambele tabele.
Cu click pe butonul se adaugă rândul Total în fereastra de jos. Se grupează înregistrările după departament.
Interogarea va calcula în coloana a doua media aritmetică (Avg) a salariilor pe fiecare departament, ordonate descrescător (astfel prima înregistrare va afişa cel mai mare salariu mediu).
Pentru a afişa doar prima înregistrare, vom modifica interogarea, adăugând clauza TOP 1 imediat după cuvântul SELECT. Modificarea se face accesând interogarea SQL (în zona celor două tabele, click pe butonul din dreapta al mouse-ului pentru activarea meniului rapid şi alegerea opţiunii SQL View).
SELECT TOP 1 departament.nume_dep
FROM departament INNER JOIN angajat ON departament.id_dep = angajat.id_dep
GROUP BY departament.nume_dep
ORDER BY Avg(angajat.salariu) DESC;
Fişierul rezolvat în format .mdb este ataşat mai jos.