Subiect_19
Proiectaţi baza de date necesară unei bănci pentru evidenţa creditelor acordate clienţilor şi a achitărilor lor, compusă din tabelele:
CREDITE (cod-credit, nume-client, valoare-credit, durata-în-luni);
ACHITĂRI (număr-document, cod-credit, data, suma achitată);
Cerinţe:
a) Populaţi fiecare tabel cu minim 5 înregistrări.
b) Afişaţi numele clientului şi valoarea creditului pentru clienţii care au credite pe o durată de cel puţin 3 ani.
c) Care este numele clientului (clienţilor) cu valoarea creditului maximă?
d) Care este suma achitată de către clientul cu valoarea creditului maximă?
e) Afişaţi clienţii în ordinea descrescătoare a valorii creditului. Doi clienţi cu aceeaşi valoare a creditului vor fi afişaţi alfabetic.
Rezolvare
a) Populaţi fiecare tabel cu minim 5 înregistrări.
Structura tabelului CREDITE pentru fiecare câmp:
- cod_credit - cheie primară, Data Type: AutoNumber
- nume_client - Data Type: Text
proprietăţi modificate
Field Size: 30
Required: Yes
- valoare_credit - Data Type: Numeric
proprietăţi modificate
Field Size: Long Integer
Format: Standard
Decimal Places: 2
Required: Yes
- durata_in_luni - Data Type: Numeric
proprietăţi modificate
Field Size: Integer
Format: Standard
Decimal Places: 0
Required: Yes
Structura tabelului ACHITARI pentru fiecare câmp:
- numar_document - cheie primară, Data Type: AutoNumber
- cod_credit - Data Type: Number
proprietăţi modificate
Field Size: Long Integer
Required: Yes
Opţional: Pentru a completa mai rapid datele în câmpul cod_credit, se poate realiza o interogare care să preia codul şi numele clientului din tabelul CREDITE.
Access preia doar valorile din prima coloană (Bound Column), chiar dacă afişează şi coloana cu numele clientului.
- valoare_credit - Data Type: Numeric
proprietăţi modificate
Field Size: Long Integer
Format: Standard
Decimal Places: 2
Required: Yes
- data - Data Type: Date
proprietăţi modificate
Format: Short Date
Decimal Places: 0
Required: Yes
- suma_achitata - Data Type: Date
proprietăţi modificate
Field Size: Long Integer
Format: Standard
Decimal Places: 2
Required: Yes
Se realizează relaţia de tip one-to-many legând
câmpul-cheie primară cod_credit din tabelul CREDITE la
câmpul cod_credit din tabelul ACHITARI.
b) Afişaţi numele clientului şi valoarea creditului pentru clienţii care au credite pe o durată de cel puţin 3 ani.
Se creează o interogare care preia date din tabelul CREDITE. Se vor afişa doar înregistrările care au durata în luni mai mare ca 36 (3 ani x 12 luni).
c) Care este numele clientului (clienţilor) cu valoarea creditului maximă?
Se creează o interogare care preia date din tabelul CREDITE.
Pentru ca să fie afişată doar prima înregistrare, se adaugă predicatul TOP 1 în interogarea SQL :
SELECT TOP 1 credite.nume_client
FROM credite
GROUP BY credite.nume_client, credite.valoare_credit
ORDER BY credite.valoare_credit DESC;
Descrierea predicatului TOP dintr-o interogare poate fi găsită în limba română aici.
d) Care este suma achitată de către clientul cu valoarea creditului maximă?
Ca şi la cerinţa c), pentru a se afişa doar prima înregistrare, se adaugă predicatul TOP 1 în interogarea SQL :
SELECT TOP 1 credite.nume_client, Sum(achitari.suma_achitata) AS SumaAchitata
FROM credite INNER JOIN achitari ON credite.cod_credit = achitari.cod_credit
GROUP BY credite.nume_client, credite.valoare_credit
ORDER BY credite.valoare_credit DESC;
e) Afişaţi clienţii în ordinea descrescătoare a valorii creditului. Doi clienţi cu aceeaşi valoare a creditului vor fi afişaţi alfabetic.
Se creează o interogare care preia din tabelul CREDITE câmpurile valoare_credit (ordonat descrescător) şi nume_client (ordonat crescător).
Am ataşat mai jos fişierul rezolvat în format .mdb.