Pentru o mai buna gestionare a produselor, un magazin de calculatoare intentioneaza proiectarea unei baze de date, considerandu-se urmatorul dictionar al datelor:
Inventarierea atributelor. Pe baza informatiilor referitoare la activitatea firmei, se poate intocmi dictionarul de atribute:
Nr. Crt. Atribut Semnificatie 1 BB1301CodFurnizor Cod Furnizor 2 BB1301DenumireFurnizor Denumire Furnizor 3 BB1301Adresa Adresa Furnizor 4 BB1301Localitate Localitate Furnizor 5 BB1301Telefon Telefon Furnizor 6 BB1301NumarFactura Numarul Factura 7 BB1301DataFactura Data Factura 8 BB1301Cantitate Cantitatea Facturata 9 BB1301CodProdus Cod Produs 10 BB1301DenumireProdus Denumire Produs 11 BB1301UM Unitate de Masura 12 BB1301CategorieCalitate Categoria de Calitate 13 BB1301PretUnitar Pretul Produsului 14 BB1301NumarComanda Numarul Comenzii 15 BB1301DataComanda Data Comenzii 16 BB1301Cantitate Cantitatea Comandata 17 BB1301DataLivrare Data Livrarii 18 BB1301CodClient Cod Client 19 BB1301NumeClient Nume Client 20 BB1301Localitate Localitate Client 21 BB1301Adresa Adresa Cleint 22 BB1301Telefon Telefon Client 23 BB1301CodPostal Cod Postal Client
Specificarea regulilor de gestiune:
Unitatea de masura va fi aleasa din lista derulanta. Pretul unitar sa fie cuprins intre 50 si 1.000.000. Data facturii nu poate fi mai mare de data curenta(nici data comenzii nici data livrarii). Cantitatea maxima pe o comanda va fi de 5000. Fiecare furnizor poate livra mai multe produse. Un produs poate fi achizitionat de mai multi clienti.
Interogari I. Interogari de selectie: a. Interogari cu functii agregate: 1.Sa se calculeze valoarea totala a produselor achizitionate de la furnizori in anul curent. SELECT Sum([BB1301Cantitate]*[BB1301PretUnitar]) AS ValoareTotala, Year([BB1301DataFactura]) AS An, BB1301Produse.BB1301DenumireProdus FROM BB1301Produse INNER JOIN BB1301Factura ON BB1301Produse.BB1301CodProdus = BB1301Factura.BB1301CodProdus GROUP BY Year([BB1301DataFactura]), BB1301Produse.BB1301DenumireProdus HAVING (((Year([BB1301DataFactura]))=2010));
2.Sa se afiseze numarul produselor achizitionate de la furnizori in anul 2009. SELECT Count(BB1301Produse.BB1301CodProdus) AS CountOfBB1301CodProdus, Year([BB1301DataFactura]) AS An FROM BB1301Produse INNER JOIN BB1301Factura ON BB1301Produse.BB1301CodProdus = BB1301Factura.BB1301CodProdus GROUP BY Year([BB1301DataFactura]) HAVING (((Year([BB1301DataFactura]))=2009));
3.Sa se afiseze numarul de produse comandate de clientii al caror nume incep cu b. SELECT Count(BB1301Produse.BB1301CodProdus) AS CountOfBB1301CodProdus, BB1301Clienti.BB1301NumeClient FROM BB1301Produse INNER JOIN (BB1301Clienti INNER JOIN BB1301Comanda ON BB1301Clienti.BB1301CodClient = BB1301Comanda.BB1301CodClient) ON BB1301Produse.BB1301CodProdus = BB1301Comanda.BB1301CodProdus GROUP BY BB1301Clienti.BB1301NumeClient HAVING (((BB1301Clienti.BB1301NumeClient) Like "B*"));
4.Sa se afiseze valoarea totala a produselor comandate de clientii din Bucuresti in luna februarie 2010. SELECT [BB1301Cantitate]*[BB1301PretUnitar] AS ValoareTotala, BB1301Clienti.BB1301Localitate, Month([BB1301DataComanda]) AS Luna, Year([BB1301DataComanda]) AS An FROM BB1301Produse INNER JOIN (BB1301Clienti INNER JOIN BB1301Comanda ON BB1301Clienti.BB1301CodClient = BB1301Comanda.BB1301CodClient) ON BB1301Produse.BB1301CodProdus = BB1301Comanda.BB1301CodProdus WHERE (((BB1301Clienti.BB1301Localitate)="Bucuresti") AND ((Month([BB1301DataComanda]))=2) AND ((Year([BB1301DataComanda]))=2010));
b. Interogari parametrizate: 1.Sa se afiseze lista furnizorilor dintr-o anumita localitate in ordine invers alfabetica. SELECT BB1301Furnizori.BB1301CodFurnizor, BB1301Furnizori.BB1301DenumireFurnizor, BB1301Furnizori.BB1301Adresa, BB1301Furnizori.BB1301Localitate, BB1301Furnizori.BB1301Telefon FROM BB1301Furnizori WHERE (((BB1301Furnizori.BB1301Localitate)=[Dati nume Localitate:])) ORDER BY BB1301Furnizori.BB1301DenumireFurnizor DESC;
2.Sa se afiseze lista clientilor care au comandat un anumit produs in ordine inversa a localitatii. SELECT BB1301Clienti.BB1301CodClient, BB1301Clienti.BB1301NumeClient, BB1301Clienti.BB1301Localitate, BB1301Clienti.BB1301Telefon, BB1301Clienti.BB1301CodPostal FROM BB1301Produse INNER JOIN (BB1301Clienti INNER JOIN BB1301Comanda ON BB1301Clienti.BB1301CodClient = BB1301Comanda.BB1301CodClient) ON BB1301Produse.BB1301CodProdus = BB1301Comanda.BB1301CodProdus WHERE (((BB1301Produse.BB1301DenumireProdus)=[Dati nume Produs:])) ORDER BY BB1301Clienti.BB1301Localitate DESC;
3.Sa se afiseze lista produselor care incep cu m achizitionate de la un anumit furnizor. SELECT BB1301Produse.BB1301CodProdus, BB1301Produse.BB1301DenumireProdus, BB1301Produse.BB1301UM, BB1301Produse.BB1301CategorieCalitate, BB1301Produse.BB1301PretUnitar FROM BB1301Produse INNER JOIN (BB1301Furnizori INNER JOIN BB1301Factura ON BB1301Furnizori.BB1301CodFurnizor = BB1301Factura.BB1301CodFurnizor) ON BB1301Produse.BB1301CodProdus = BB1301Factura.BB1301CodProdus WHERE (((BB1301Produse.BB1301DenumireProdus) Like "M*") AND ((BB1301Furnizori.BB1301DenumireFurnizor)=[Dati nume Furnizor:]));
4.Sa se afiseze lista produselor comandate de un client dintr-o anumita localitate. SELECT BB1301Produse.BB1301CodProdus, BB1301Produse.BB1301DenumireProdus, BB1301Produse.BB1301UM, BB1301Produse.BB1301CategorieCalitate, BB1301Produse.BB1301PretUnitar FROM BB1301Produse INNER JOIN (BB1301Clienti INNER JOIN BB1301Comanda ON BB1301Clienti.BB1301CodClient = BB1301Comanda.BB1301CodClient) ON BB1301Produse.BB1301CodProdus = BB1301Comanda.BB1301CodProdus WHERE (((BB1301Clienti.BB1301Localitate)=[Dati nume Localitate:]));
II. Interogari de actiune: A.Interogari make table: a.Sa se creeze un nou tabel BB1301ProduseBucati care va contine toate produsele masurate in bucati. SELECT BB1301Produse.BB1301CodProdus, BB1301Produse.BB1301DenumireProdus, BB1301Produse.BB1301UM, BB1301Produse.BB1301CategorieCalitate, BB1301Produse.BB1301PretUnitar INTO BB1301ProduseBucati FROM BB1301Produse WHERE (((BB1301Produse.BB1301UM)="Bucati"));
b.Sa se creeze un nou tabel BB1301FurnizoriProvincie care va contine furnizorii din provincie care au livrat produse in cantitate mai mare de 100. SELECT BB1301Furnizori.BB1301CodFurnizor, BB1301Furnizori.BB1301DenumireFurnizor, BB1301Furnizori.BB1301Adresa, BB1301Furnizori.BB1301Localitate, BB1301Furnizori.BB1301Telefon INTO BB1301FurnizoriProvincie FROM BB1301Furnizori INNER JOIN BB1301Factura ON BB1301Furnizori.BB1301CodFurnizor = BB1301Factura.BB1301CodFurnizor WHERE (((BB1301Furnizori.BB1301Localitate)<>"Bucuresti") AND ((BB1301Factura.BB1301Cantitate)>100));
c.Sa se creeze un nou tabel BB1301ClientiBucuresti care va contine clientii din Bucuresti care au comandat produse in luna decembrie2009. SELECT BB1301Clienti.BB1301CodClient, BB1301Clienti.BB1301NumeClient, BB1301Clienti.BB1301Localitate, BB1301Clienti.BB1301Adresa, BB1301Clienti.BB1301Telefon, BB1301Clienti.BB1301CodPostal INTO BB1301ClientiBucuresti FROM BB1301Clienti INNER JOIN BB1301Comanda ON BB1301Clienti.BB1301CodClient = BB1301Comanda.BB1301CodClient WHERE (((BB1301Clienti.BB1301Localitate)="Bucuresti") AND ((Month([BB1301DataComanda]))=12) AND ((Year([BB1301DataComanda]))=2009));
B.Interogari Update: a.Sa se mareasca cu 10% pretul produselor comandate in anul 2010. UPDATE BB1301Produse INNER JOIN BB1301Comanda ON BB1301Produse.BB1301CodProdus = BB1301Comanda.BB1301CodProdus SET BB1301Produse.BB1301PretUnitar = [BB1301PretUnitar]*110/100 WHERE (((Year([BB1301DataComanda]))=2010));
b.Sa se micsoreze cu 20% pretul produselor comandate de clientii din Ploiesti. UPDATE BB1301Produse INNER JOIN (BB1301Clienti INNER JOIN BB1301Comanda ON BB1301Clienti.BB1301CodClient = BB1301Comanda.BB1301CodClient) ON BB1301Produse.BB1301CodProdus = BB1301Comanda.BB1301CodProdus SET BB1301Produse.BB1301PretUnitar = [BB1301PretUnitar]*80/100 WHERE (((BB1301Clienti.BB1301Localitate)="Ploiesti"));
C.Interogari Append: a.Sa se adauge in tabelul BB1301ProduseBucati si produsele masurate in metri. INSERT INTO BB1301ProduseBucati ( BB1301DenumireProdus, BB1301CodProdus, BB1301UM, BB1301CategorieCalitate, BB1301PretUnitar ) SELECT BB1301Produse.BB1301DenumireProdus, BB1301Produse.BB1301CodProdus, BB1301Produse.BB1301UM, BB1301Produse.BB1301CategorieCalitate, BB1301Produse.BB1301PretUnitar FROM BB1301Produse WHERE (((BB1301Produse.BB1301UM)="Metri"));
b.Sa se adauge in tabela BB1301FurnizoriProvincie furnizorii care au livrat produse in cantitate mai mare de 100. INSERT INTO BB1301FurnizoriProvincie ( BB1301CodFurnizor, BB1301DenumireFurnizor, BB1301Adresa, BB1301Localitate, BB1301Telefon ) SELECT BB1301Furnizori.BB1301CodFurnizor, BB1301Furnizori.BB1301DenumireFurnizor, BB1301Furnizori.BB1301Adresa, BB1301Furnizori.BB1301Localitate, BB1301Furnizori.BB1301Telefon FROM BB1301Furnizori INNER JOIN BB1301Factura ON BB1301Furnizori.BB1301CodFurnizor = BB1301Factura.BB1301CodFurnizor WHERE (((BB1301Factura.BB1301Cantitate)>100));
c.Sa se adauge in tabela BB1301ClientiBucuresti clientii care au comandat in anul in curs. INSERT INTO BB1301ClientiBucuresti ( BB1301CodClient, BB1301NumeClient, BB1301Localitate, BB1301Adresa, BB1301Telefon, BB1301CodPostal ) SELECT BB1301Clienti.BB1301CodClient, BB1301Clienti.BB1301NumeClient, BB1301Clienti.BB1301Localitate, BB1301Clienti.BB1301Adresa, BB1301Clienti.BB1301Telefon, BB1301Clienti.BB1301CodPostal FROM BB1301Clienti INNER JOIN BB1301Comanda ON BB1301Clienti.BB1301CodClient = BB1301Comanda.BB1301CodClient WHERE (((BB1301Clienti.BB1301Localitate)="Bucuresti") AND ((Year([BB1301DataComanda]))=2010));
D. Interogari Delete: a.Sa se stearga din tabela BB1301Furnizori toti furnizorii din Cluj. DELETE BB1301Furnizori.BB1301Localitate FROM BB1301Furnizori WHERE (((BB1301Furnizori.BB1301Localitate)="Cluj"));
b.Sa se stearga din tabela BB1301Clienti toti clientii din Buzau. DELETE BB1301Clienti.BB1301Localitate FROM BB1301Clienti WHERE (((BB1301Clienti.BB1301Localitate)="Buzau"));
III. Interogari de tip crosstab: a.Sa se afiseze valoarea vanzarilor realizate catre fiecare client in anul 2009 din fiecare produs. TRANSFORM Sum([BB1301Cantitate]*[BB1301PretUnitar]) AS ValoareTotala SELECT BB1301Clienti.BB1301NumeClient FROM BB1301Produse INNER JOIN (BB1301Clienti INNER JOIN BB1301Comanda ON BB1301Clienti.BB1301CodClient = BB1301Comanda.BB1301CodClient) ON BB1301Produse.BB1301CodProdus = BB1301Comanda.BB1301CodProdus WHERE (((Year([BB1301DataComanda]))=2009)) GROUP BY BB1301Clienti.BB1301NumeClient, Year([BB1301DataComanda]) PIVOT BB1301Produse.BB1301DenumireProdus;
b.Sa se afiseze numarul de produse livrate catre fiecare client din Bucuresti pe anul 2009. TRANSFORM Count(BB1301Produse.BB1301CodProdus) AS CountOfBB1301CodProdus SELECT BB1301Clienti.BB1301NumeClient FROM BB1301Produse INNER JOIN (BB1301Clienti INNER JOIN BB1301Comanda ON BB1301Clienti.BB1301CodClient = BB1301Comanda.BB1301CodClient) ON BB1301Produse.BB1301CodProdus = BB1301Comanda.BB1301CodProdus WHERE (((BB1301Clienti.BB1301Localitate)="Bucuresti") AND ((Year([BB1301DataComanda]))=2009)) GROUP BY BB1301Clienti.BB1301NumeClient, BB1301Clienti.BB1301Localitate, Year([BB1301DataComanda]) PIVOT BB1301Produse.BB1301DenumireProdus;
c.Sa se afiseze facturile realizate pentru fiecare furnizor, din fiecare localitate. TRANSFORM Count(BB1301Factura.BB1301NumarFactura) AS CountOfBB1301NumarFactura SELECT BB1301Furnizori.BB1301DenumireFurnizor FROM BB1301Furnizori INNER JOIN BB1301Factura ON BB1301Furnizori.BB1301CodFurnizor = BB1301Factura.BB1301CodFurnizor GROUP BY BB1301Furnizori.BB1301DenumireFurnizor PIVOT BB1301Furnizori.BB1301Localitate;