Pentru o mai buna gestionare a produselor si a datelor referitoare la acestea, un supermarket intentioneaza proiectarea unei baze de date. In acest sens se considera urmatorul dictionar al datelor:
I.Inventarierea atributelor. Pe baza informatiilor referitoare la activitatea firmei, se poate intocmi dictionarul de attribute:
Nr. Crt. Atribut Semnificatie 1 DC1302Id_Furnizor Cod Furnizor 2 DC1302Denumire_Furnizor Denumire Furnizor 3 DC1302Adresa Adresa Furnizor 4 DC1302Localitate Localitate Furnizor 5 DC1302Cod_Fiscal Cod Fiscal Furnizor 6 DC1302Numar_Achizitie Numarul Achizitiei 7 DC1302Data_Achizitie Data Achizitiei 8 DC1302Cantitate_Achizitionata Cantitatea Achizitionata 9 DC1302Id_Produs Cod Produs 10 DC1302Denumire_Produs Denumire Produs 11 DC1302UM Unitate de Masura 12 DC1302Pret Pretul Produsului 13 DC1302Numar_Vanzare Numarul Vanzarii 14 DC1302Data_Vanzarii Data Vanzarii 15 DC1302Cantitate_Vanduta Cantitatea Vanduta 16 DC1302Id_Client Cod Client 17 DC1302Denumire_Client Denumire Client 18 DC1302Localitate Localitate Client 19 DC1302Telefon Telefon Client 20 DC1302Cod_Fiscal Cod Fiscal Client
II.Specificarea regulilor de gestiune: Fiecare furnizor poate livra mai multe produse. Un produs poate fi achizitionat de la mai multi furnizori si poate fi vandut catre mai multi clienti. Un client poate cumpara mai multe produse. Unitatea de masura a produselor va fi aleasa dintr-o lista derulanta. Data achizitiei precum si data vanzarii nu trebuie sa fie in viitor(sa fie mai mici decat data curenta). Cantitatea vanduta nu poate depasi 2000de unitati.
14.DC1302Data_Vanzarii 15.DC1302Cantitatea_Vanduta 16.DC1302Id_Client # 1 1 1 1 17.DC1302Denumire_Client 18.DC1302Localitate 19.DC1302Telefon 20.DC1302Cod_Fiscal I. Interogari de selectie: a. Sa se calculeze valoarea totala a produselor achizitionate de la furnizori din Bucuresti. SELECT DC1302Produse.DC1302Denumire_Produs, DC1302Furnizori.DC1302Localitate, Sum([DC1302Cantitate_Achizitionata]*[DC1302Pret]) AS ValoareTotala FROM DC1302Produse INNER JOIN (DC1302Furnizori INNER JOIN DC1302Achizitii ON DC1302Furnizori.DC1302Id_Furnizor = DC1302Achizitii.DC1302Id_Furnizor) ON DC1302Produse.DC1302Id_Produs = DC1302Achizitii.DC1302Id_Produs GROUP BY DC1302Produse.DC1302Denumire_Produs, DC1302Furnizori.DC1302Localitate HAVING (((DC1302Furnizori.DC1302Localitate)="Bucuresti"));
b. Sa se afiseze in ordine alfabetica furnizorii care au livrat produse in valoare de peste 15.000.000. SELECT DC1302Furnizori.DC1302Id_Furnizor, DC1302Furnizori.DC1302Denumire_Furnizor, Sum([DC1302Cantitate_Achizitionata]*[DC1302Pret]) AS ValoareTotala FROM DC1302Produse INNER JOIN (DC1302Furnizori INNER JOIN DC1302Achizitii ON DC1302Furnizori.DC1302Id_Furnizor = DC1302Achizitii.DC1302Id_Furnizor) ON DC1302Produse.DC1302Id_Produs = DC1302Achizitii.DC1302Id_Produs GROUP BY DC1302Furnizori.DC1302Id_Furnizor, DC1302Furnizori.DC1302Denumire_Furnizor HAVING (((Sum([DC1302Cantitate_Achizitionata]*[DC1302Pret]))>=15000000)) ORDER BY DC1302Furnizori.DC1302Denumire_Furnizor;
c. Sa se afiseze lista furnizorilor dintr-o anumita localitate in ordine alfabetica. SELECT DC1302Furnizori.DC1302Id_Furnizor, DC1302Furnizori.DC1302Denumire_Furnizor, DC1302Furnizori.DC1302Adresa, DC1302Furnizori.DC1302Localitate, DC1302Furnizori.DC1302Cod_Fiscal FROM DC1302Furnizori WHERE (((DC1302Furnizori.DC1302Localitate)=[Dati numele localitatii:])) ORDER BY DC1302Furnizori.DC1302Denumire_Furnizor;
d. Sa se calculeze valoarea totala a produselor cumparate de un anumit client. SELECT DC1302Clienti.DC1302Denumire_Client, Sum([DC1302Cantitate_Vanduta]*[DC1302Pret]) AS ValoareTotala FROM DC1302Produse INNER JOIN (DC1302Clienti INNER JOIN DC1302Vanzari ON DC1302Clienti.DC1302Id_Client = DC1302Vanzari.DC1302Id_Client) ON DC1302Produse.DC1302Id_Produs = DC1302Vanzari.DC1302Id_Produs GROUP BY DC1302Clienti.DC1302Denumire_Client HAVING (((DC1302Clienti.DC1302Denumire_Client)=[Dati numele clientului:]));
e. Sa se afiseze lista furnizorilor care au furnizat produse al caror nume se termina cu a din localitatile Bucuresti si Brasov, in ordine invers alfabetica. SELECT DC1302Furnizori.DC1302Id_Furnizor, DC1302Furnizori.DC1302Denumire_Furnizor, DC1302Furnizori.DC1302Localitate FROM DC1302Produse INNER JOIN (DC1302Furnizori INNER JOIN DC1302Achizitii ON DC1302Furnizori.DC1302Id_Furnizor = DC1302Achizitii.DC1302Id_Furnizor) ON DC1302Produse.DC1302Id_Produs = DC1302Achizitii.DC1302Id_Produs WHERE (((DC1302Furnizori.DC1302Localitate)="Bucuresti") AND ((DC1302Produse.DC1302Denumire_Produs) Like "*a")) OR (((DC1302Furnizori.DC1302Localitate)="Brasov")) ORDER BY DC1302Furnizori.DC1302Denumire_Furnizor DESC;
f. Sa se afiseze lista produselor vandute de la inceputul anului pana in present. SELECT DC1302Produse.DC1302Id_Produs, DC1302Produse.DC1302Denumire_Produs, DC1302Produse.DC1302UM, DC1302Produse.DC1302Pret FROM DC1302Produse INNER JOIN DC1302Vanzari ON DC1302Produse.DC1302Id_Produs = DC1302Vanzari.DC1302Id_Produs WHERE (((Year([DC1302Data_Vanzarii]))=2010));
g. Sa se calculeze numarul de produse vandute in luna decembrie 2009. SELECT Count(DC1302Produse.DC1302Denumire_Produs) AS NrProduse, Month([DC1302Data_Vanzarii]) AS Luna, Year([DC1302Data_Vanzarii]) AS An FROM DC1302Produse INNER JOIN DC1302Vanzari ON DC1302Produse.DC1302Id_Produs = DC1302Vanzari.DC1302Id_Produs GROUP BY Month([DC1302Data_Vanzarii]), Year([DC1302Data_Vanzarii]) HAVING (((Month([DC1302Data_Vanzarii]))=12) AND ((Year([DC1302Data_Vanzarii]))=2009));
II. Interogari de actiune: 1. Interogari make table: a.Sa se creeze un nou tabel DC1302Furnizori_Bucuresti ca va contine furnizorii din Bucuresti. SELECT DC1302Furnizori.DC1302Id_Furnizor, DC1302Furnizori.DC1302Denumire_Furnizor, DC1302Furnizori.DC1302Adresa, DC1302Furnizori.DC1302Localitate, DC1302Furnizori.DC1302Cod_Fiscal INTO DC1302Furnizori_Bucuresti FROM DC1302Furnizori WHERE (((DC1302Furnizori.DC1302Localitate)="Bucuresti"));
b.Sa se creeze un nou tabel DC1302Clienti_Provincie care va contine clientii din provincie. SELECT DC1302Clienti.DC1302Id_Client, DC1302Clienti.DC1302Denumire_Client, DC1302Clienti.DC1302Localitate, DC1302Clienti.DC1302Telefon, DC1302Clienti.DC1302Cod_Fiscal INTO DC1302Clienti_Provincie FROM DC1302Clienti WHERE (((DC1302Clienti.DC1302Localitate)<>"Bucuresti"));
2. Interogari Update: a.Sa se micsoreze cu 10% pretul produselor furnizate de furnizorii din Ploiesti si Brasov. UPDATE DC1302Produse INNER JOIN (DC1302Furnizori INNER JOIN DC1302Achizitii ON DC1302Furnizori.DC1302Id_Furnizor = DC1302Achizitii.DC1302Id_Furnizor) ON DC1302Produse.DC1302Id_Produs = DC1302Achizitii.DC1302Id_Produs SET DC1302Produse.DC1302Pret = [DC1302Pret]*90/100 WHERE (((DC1302Furnizori.DC1302Denumire_Furnizor)="Brasov" Or (DC1302Furnizori.DC1302Denumire_Furnizor)="Ploiesti"));
b.Sa se mareasca, cu 50 de unitati cantitatea de bunuri achizitionata de la furnizorii din Bucuresti. UPDATE DC1302Produse INNER JOIN (DC1302Furnizori INNER JOIN DC1302Achizitii ON DC1302Furnizori.DC1302Id_Furnizor = DC1302Achizitii.DC1302Id_Furnizor) ON DC1302Produse.DC1302Id_Produs = DC1302Achizitii.DC1302Id_Produs SET DC1302Achizitii.DC1302Cantitate_Achizitionata = [DC1302Cantitate_Achizitionata]+"50" WHERE (((DC1302Furnizori.DC1302Localitate)="Bucuresti"));
3. Interogari Append: a.Sa se adauge in tabelul DC1302Furnizori_Bucuresti furnizorii din Ploiesti. INSERT INTO DC1302Furnizori_Bucuresti ( DC1302Id_Furnizor, DC1302Denumire_Furnizor, DC1302Adresa, DC1302Localitate, DC1302Cod_Fiscal ) SELECT DC1302Furnizori.DC1302Id_Furnizor, DC1302Furnizori.DC1302Denumire_Furnizor, DC1302Furnizori.DC1302Adresa, DC1302Furnizori.DC1302Localitate, DC1302Furnizori.DC1302Cod_Fiscal FROM DC1302Furnizori WHERE (((DC1302Furnizori.DC1302Localitate)="Ploiesti"));
b.Sa se adauge in tabela DC1302Clienti_Provincie clientii din Bucuresti al caror nume se termina cu a. INSERT INTO DC1302Clienti_Provincie ( DC1302Id_Client, DC1302Denumire_Client, DC1302Localitate, DC1302Telefon, DC1302Cod_Fiscal ) SELECT DC1302Clienti.DC1302Id_Client, DC1302Clienti.DC1302Denumire_Client, DC1302Clienti.DC1302Localitate, DC1302Clienti.DC1302Telefon, DC1302Clienti.DC1302Cod_Fiscal FROM DC1302Clienti WHERE (((DC1302Clienti.DC1302Denumire_Client) Like "*a") AND ((DC1302Clienti.DC1302Localitate)="Bucuresti"));
4. Interogari Delete: a.Sa se stearga din tabela DC1302Furnizori toti furnizorii din Dolj. DELETE DC1302Furnizori.DC1302Localitate FROM DC1302Furnizori WHERE (((DC1302Furnizori.DC1302Localitate)="Dolj"));
b.Sa se stearga din tabela DC1302Clienti toti clientii din Galati. DELETE DC1302Clienti.DC1302Localitate FROM DC1302Clienti WHERE (((DC1302Clienti.DC1302Localitate)="Galati"));
III. Interogari de tip crosstab: a.Sa se afiseze valoarea vanzarilor catre fiecare client, in anul 2009, din fiecare produs. TRANSFORM Sum([DC1302Cantitate_Vanduta]*[DC1302Pret]) AS Valoare SELECT DC1302Produse.DC1302Denumire_Produs FROM DC1302Produse INNER JOIN (DC1302Clienti INNER JOIN DC1302Vanzari ON DC1302Clienti.DC1302Id_Client = DC1302Vanzari.DC1302Id_Client) ON DC1302Produse.DC1302Id_Produs = DC1302Vanzari.DC1302Id_Produs GROUP BY DC1302Produse.DC1302Denumire_Produs PIVOT DC1302Clienti.DC1302Denumire_Client;
b.Sa se afiseze achizitiile realizate de la inceputul lunii mai 2009, pentru fiecare furnizor, din fiecare localitate. TRANSFORM Sum([DC1302Cantitate_Achizitionata]*[DC1302Pret]) AS Valoare SELECT DC1302Furnizori.DC1302Denumire_Furnizor FROM DC1302Produse INNER JOIN (DC1302Furnizori INNER JOIN DC1302Achizitii ON DC1302Furnizori.DC1302Id_Furnizor = DC1302Achizitii.DC1302Id_Furnizor) ON DC1302Produse.DC1302Id_Produs = DC1302Achizitii.DC1302Id_Produs WHERE (((DC1302Achizitii.DC1302Data_Achizitie)>#10/1/2008#)) GROUP BY DC1302Furnizori.DC1302Denumire_Furnizor PIVOT DC1302Furnizori.DC1302Localitate;
c.Sa se afiseze numarul de produse cumparat de fiecare client din Bucuresti pe anul 2010. TRANSFORM Count(DC1302Vanzari.DC1302Numar_Vanzare) AS NrProduse SELECT DC1302Produse.DC1302Denumire_Produs FROM DC1302Produse INNER JOIN (DC1302Clienti INNER JOIN DC1302Vanzari ON DC1302Clienti.DC1302Id_Client = DC1302Vanzari.DC1302Id_Client) ON DC1302Produse.DC1302Id_Produs = DC1302Vanzari.DC1302Id_Produs WHERE (((DC1302Clienti.DC1302Localitate)="Bucuresti")) GROUP BY DC1302Produse.DC1302Denumire_Produs PIVOT DC1302Clienti.DC1302Denumire_Client;