Sie sind auf Seite 1von 32

ACADEMIA DE STUDII ECONOMICE

FACULTATEA DE CIBERNETICA, STATISTICA SI INFORMATICA ECONOMICA

PROIECT BAZE DE DATE


Vanzari de bauturi

Ion ion
Grupa 1024

SC AQUILA SRL reprezinta o firma ce comercializeaza bauturi racoritoare si


alcoolice cu o gama larga de acoperire pe teritoriul tarii.
Un angajat face mai multe vanzari.
Un produs este vandut de mai multe ori.
Un client participa la mai multe vanzari.
Un produs este inscris in mai multe arhive.

I)CREATE
CREATE TABLE angajati(cod_angajat VARCHAR2(20) primary key, cnp
NUMBER(13), nume VARCHAR2(25), prenume VARCHAR2(25), adresa
VARCHAR2(100), functie VARCHAR2(20), email VARCHAR2(30));
CREATE TABLE produse(cod_produs VARCHAR2(20) primary key, pret
NUMBER(8,2), denumire VARCHAR2(50));

CREATE TABLE clienti(cod_client VARCHAR2(20), nume VARCHAR2(25),


prenume VARCHAR2(25), telefon VARCHAR2(20), adresa VARCHAR2(50),
CONSTRAINT pk_clienti PRIMARY KEY(cod_client));
CREATE TABLE vanzari(cod_angajat VARCHAR2(20), cod_client
VARCHAR2(20), cod_produs VARCHAR2(20), cantitate NUMBER(7,2), data_vanzarii
DATE, CONSTRAINT fk_cod_angajat FOREIGN KEY(cod_angajat) REFERENCES
angajati(cod_angajat), CONSTRAINT fk_cod_client FOREIGN KEY(cod_client)
REFERENCES clienti(cod_client), CONSTRAINT fk_cod_produs FOREIGN
KEY(cod_produs) REFERENCES produse(cod_produs));
CREATE TABLE arhiva(cod_arhiva VARCHAR2(20) primary key, cod_produs
VARCHAR2(20) REFERENCES produse(cod_produs), cod_client VARCHAR2(20)
REFERENCES clienti(cod_client), cantitate NUMBER(7,2), data_vanzarii DATE);

II) ALTER
ALTER TABLE angajati ADD(nr_telefon NUMBER(20));
ALTER TABLE clienti ADD(email VARCHAR2(50));

ALTER TABLE produse ADD(CONSTRAINT ck_pret CHECK(pret IS NOT NULL));


ALTER TABLE clienti MODIFY(nume VARCHAR2(50));
ALTER TABLE angajati ADD (CONSTRAINT ck_email CHECK(email LIKE '%@
%.com'));
ALTER TABLE clienti RENAME COLUMN telefon TO nr_telefon;
ALTER TABLE angajati RENAME COLUMN adresa TO oras;

III) INSERT
ANGAJATI
INSERT INTO angajati
VALUES(100,'2900212998812','Androne','Maria','Bucuresti','Manager','andronem@yaho
o.com','0732322111');
INSERT INTO angajati
VALUES(101,'2581212324213','Ion','Adriana','Bucuresti','Director
vanzari','ionadriana@yahoo.com','0786437218');
INSERT INTO angajati
VALUES(102,'1758329041938','Bogdan','Mihai','Ploiesti','Gestionar','bogdanm@yahoo.c
om','0734953033');
INSERT INTO angajati
VALUES(103,'1881223348596','Moise','Alin','Buftea','Gestionar','moisealin@yahoo.com'
,'0723425433');
INSERT INTO angajati
VALUES(104,'1678337829543','Preda','Cosmin','Bucuresti','Asistent
vanzari','predacosmin@yahoo.com','0743978233');
INSERT INTO angajati
VALUES(105,'2599382839120','Ionescu','Laura','Bucuresti','Asistent
manager','ionesculaura@yahoo.com','0754938544');
INSERT INTO angajati
VALUES(106,'2873384783901','Popescu','Andreea','Ploiesti','Gestionar','popescua@ya
hoo.com','0787893847');
INSERT INTO angajati
VALUES(107,'2553254321234','Mihai','Georgiana','Giurgiu','Consilier
vanzari','mihaigeo@yahoo.com','0738938433');
INSERT INTO angajati
VALUES(108,'1784372839128','Moraru','Daniel','Ploiesti','Asistent
manager','morarudaniel@yahoo.com','0722763456');

INSERT INTO angajati


VALUES(109,'2938473818273','Tataru','Catalin','Bucuresti','Director
vanzari','tatarucatalin@yahoo.com','0723456789');

PRODUSE
INSERT INTO produse VALUES(prod1,'8','Coca-cola');
INSERT INTO produse VALUES(prod2,'3','Apa plata Dorna');
INSERT INTO produse VALUES(prod3,'15','Santal de portocale');
INSERT INTO produse VALUES(prod4,'10','Cappy de piersici');
INSERT INTO produse VALUES(prod5,'50','Alexandrion');
INSERT INTO produse VALUES(prod6,'120','Whiskey Jack Daniels');
INSERT INTO produse VALUES(prod7,'9','Bere Burger');
INSERT INTO produse VALUES(prod8,'12','Bere Salitos');
INSERT INTO produse VALUES(prod9,'40','Campari');
INSERT INTO produse VALUES(prod10,'75','Vodka Absolut');
INSERT INTO produse VALUES(prod11,'90','Tequila Sauza');

INSERT INTO produse VALUES(prod12,'8','Sprite');


INSERT INTO produse VALUES(prod13,'8','Fanta');
INSERT INTO produse VALUES(prod14,'15','Vin Sange de taur');

CLIENTI
INSERT INTO clienti VALUES(1,'Miron','Mihai','0734567895','Strada Morii,nr
5,Buzau','mironmihai@gmail.com');
INSERT INTO clienti VALUES(2,'Costache','Cristian','0743212324','Strada Mihai
Eminescu,nr 22,Bucuresti','cristianc@gmail.com');
INSERT INTO clienti VALUES(3,'Lupu','Adrian','0733245673','Strada Mihai Bravu,nr
10,Bucuresti','lupuadrian@gmail.com');
INSERT INTO clienti VALUES(4,'Sin','George','0722345654','Strada Cercetatorilor,nr
18,Ploiesti','singeo@yahoo.com');

INSERT INTO clienti VALUES(5,'Asaftei','Madalina','0754221223','Strada Romana,nr


11,Sibiu','asafteimada@gmail.com');
INSERT INTO clienti VALUES(6,'Neagu','Miruna','0735466543','Strada Frumoasa,nr
43,Brasov','neagumiruna@yahoo.com');
INSERT INTO clienti VALUES(7,'Oancea','Alexandru','0723456789','Strada Rozelor,nr
13,Constanta','oanceaalex@gmail.com');
INSERT INTO clienti VALUES(8,'Popescu','Ion','0725675432','Strada Victoriei,nr
76,Iasi','popescuion@gmail.com');
INSERT INTO clienti VALUES(9,'Vasile','Andrada','0732982731','Strada Paris,nr
42,Ploiesti','vasileandrada@gmail.com');
INSERT INTO clienti VALUES(10,'Radu','Elena','0712342133','Strada Surei,nr
13,Pitesti','raduelena@gmail.com');
INSERT INTO clienti VALUES(11,'Zamfir','Ovidiu','0753643111','Strada Rudului,nr
4,Bucuresti','zamfirovidiu@gmail.com');

VANZARI
INSERT INTO vanzari
VALUES('102','1','prod8','250',to_date('10.03.2013','dd.mm.yyyy'));

INSERT INTO vanzari


VALUES('102','5','prod2','100',to_date('25.03.2013','dd.mm.yyyy'));
INSERT INTO vanzari
VALUES('105','7','prod10','50',to_date('30.03.2013','dd.mm.yyyy'));
INSERT INTO vanzari
VALUES('107','10','prod1','25',to_date('02.04.2013','dd.mm.yyyy'));
INSERT INTO vanzari
VALUES('109','11','prod14','80',to_date('15.04.2013','dd.mm.yyyy'));
INSERT INTO vanzari VALUES('103','8','prod5','50',to_date('19.04.2013','dd.mm.yyyy'));
INSERT INTO vanzari
VALUES('106','2','prod9','100',to_date('25.04.2013','dd.mm.yyyy'));
INSERT INTO vanzari VALUES('104','3','prod6','20',to_date('01.05.2013','dd.mm.yyyy'));
INSERT INTO vanzari VALUES('108','9','prod3','70',to_date('15.05.2013','dd.mm.yyyy'));
INSERT INTO vanzari
VALUES('103','4','prod13','35',to_date('20.05.2013','dd.mm.yyyy'));
INSERT INTO vanzari
VALUES('103','4','prod13','25',to_date('22.05.2013','dd.mm.yyyy'));
INSERT INTO vanzari
VALUES('105','9','prod6','100',to_date('22.05.2013','dd.mm.yyyy'));
INSERT INTO vanzari
VALUES('103','4','prod13','35',to_date('23.05.2013','dd.mm.yyyy'));
INSERT INTO vanzari
VALUES('107','10','prod2','65',to_date('24.05.2013','dd.mm.yyyy'));
INSERT INTO vanzari
VALUES('102','3','prod2','100',to_date('25.05.2013','dd.mm.yyyy'));
INSERT INTO vanzari
VALUES('103','11','prod2','20',to_date('29.05.2013','dd.mm.yyyy'));

ARHIVA
INSERT INTO arhiva
VALUES('arhiva1','prod8','1','250',to_date('10.03.2013','dd.mm.yyyy'));
INSERT INTO arhiva
VALUES('arhiva2','prod2','5','100',to_date('25.03.2013','dd.mm.yyyy'));
INSERT INTO arhiva
VALUES('arhiva3','prod10','7','50',to_date('30.03.2013','dd.mm.yyyy'));
INSERT INTO arhiva
VALUES('arhiva4','prod1','10','25',to_date('02.04.2013','dd.mm.yyyy'));
INSERT INTO arhiva
VALUES('arhiva5','prod14','11','80',to_date('15.04.2013','dd.mm.yyyy'));
INSERT INTO arhiva
VALUES('arhiva6','prod5','8','50',to_date('19.04.2013','dd.mm.yyyy'));

INSERT INTO arhiva


VALUES('arhiva7','prod9','2','100',to_date('25.04.2013','dd.mm.yyyy'));
INSERT INTO arhiva
VALUES('arhiva8','prod6','3','20',to_date('01.05.2013','dd.mm.yyyy'));
INSERT INTO arhiva
VALUES('arhiva9','prod3','9','70',to_date('15.05.2013','dd.mm.yyyy'));
INSERT INTO arhiva
VALUES('arhiva10','prod13','4','35',to_date('20.05.2013','dd.mm.yyyy'));

IV)UPDATE
1) Sa se modifice tabela clienti astfel incat numele sa fie scris cu majuscule.
UPDATE clienti SET nume=UPPER(nume);
11 rows updated.

2) Sa se micsoreze cu 5% preturile pentru produsele ce au pretul mai mare de 50.


UPDATE produse SET pret=pret*0.95 where pret >50;
3 rows updated.

3)Sa se modifice orasul din Bucuresti in Cluj Napoca.

UPDATE angajati SET oras='Cluj Napoca' where oras='Bucuresti';


5 rows updated.

4)Sa se micsoreze cantitatea cu 10% pentru produsele vandute in luna martie.


UPDATE vanzari SET cantitate=cantitate*0.9 WHERE EXTRACT (month from
data_vanzarii)=3;
3 rows updated.

5)Sa se modfice emailul in @gmail.com pentru angajatii care stau in Ploiesti.


UPDATE angajati SET email='vanzari@gmail.com' WHERE oras='Ploiesti';
3 rows updated.

V)Interogari variate
1)Sa se afiseze cantitatea medie
vanduta in fiecare luna.
SELECT extract(month from
data_vanzarii) AS Luna,
ROUND(AVG(cantitate),2)AS
cantitate_medie FROM vanzari
WHERE extract(month from
data_vanzarii)>2 GROUP BY
extract(month from data_vanzarii);

2)Sa se afiseze cantitatea maxima vanduta din fiecare produs.


SELECT max(cantitate),cod_produs FROM vanzari GROUP BY cod_produs;

3)Sa se afiseze angajati care sunt din


Cluj Napoca si angajati care sunt din
Ploiesti.
SELECT oras, nume, prenume FROM
angajati WHERE oras='Cluj Napoca'
UNION SELECT oras, nume, prenume
FROM angajati WHERE oras='Ploiesti'
ORDER BY oras;

4)Sa se afiseze produsele care au pretul intre 9 si 100 excluzandu-le pe cele care au
pretul de 50 si 75.
SELECT * FROM produse WHERE pret BETWEEN 9 AND 100 MINUS SELECT *
FROM produse WHERE pret IN(50,75);

5)Sa se afiseze in cazul in care pretul produsului este sub 8 ca acesta este ieftin, daca
este intre 8 si 20 este mediu, iar peste 20 este scump.
SELECT denumire, pret, CASE WHEN pret_produs<8 then 'produs ieftin' WHEN
pret_produs BETWEEN 8 and 20 then 'produs mediu' WHEN pret_produs>20 then
'produs scump' END tip_produs FROM produse p, vanzari v where
p.cod_produs=v.cod_produs;

6)Sa se afiseze denumirea produselor, valoarea totala vanduta si numarul de cantitati


vandute pentru produsele inregistrate de cel putin 3 ori si au valoarea totala diferita de
200 si 4000.
Select p.denumire, sum(v.cantitate*p.pret) valoare_prod, count(cantitate) FROM vanzari
v, produse p WHERE p.cod_produs=v.cod_produs GROUP BY p.denumire HAVING
count(cantitate)<3 Intersect Select p.denumire, sum(v.cantitate*p.pret) valoare_prod,
count(cantitate) FROM vanzari v, produse p WHERE p.cod_produs=v.cod_produs
GROUP BY p.denumire HAVING sum(cantitate*p.pret) not in(200,4000);

7)Sa se afiseze rangul angajatului in functie


de functia angajatului: manager=Rang 1,
director vanzari=Rang 2, consilier vanzari=Rang 3, asistent manager=Rang 4, asistent
vanzari=Rang 5, gestionar=Rang 6.
SELECT functie, CASE WHEN lower(functie) like'manager' THEN'Rang 1' WHEN
lower(functie) like 'director vanzari' THEN'Rang 2' WHEN lower(functie) like'consilier
vanzari' THEN 'Rang 3' WHEN lower(functie) like'asistent manager' THEN 'Rang
4'WHEN lower(functie) like'asistent vanzari' THEN 'Rang 5' WHEN lower(functie)
like'gestionar' THEN'Rang 6' END rang FROM angajati ORDER BY rang asc;

8)Sa se afiseze pretul si produsul al carui cantitate este vanduta peste 70 si pretul
acestuia este mai mic de 25.
Select denumire, pret, cantitate from vanzari v, produse p where
p.cod_produs=v.cod_produs and v.cantitate>70 minus Select denumire, pret, cantitate
FROM vanzari v, produse p where p.cod_produs=v.cod_produs and p.pret<25;

9)Sa se afiseze denumirea produselor si cantitatea vanduta din acestea si sa se


ordoneze crescator dupa pret.
SELECT DISTINCT denumire, cantitate FROM produse p, vanzari v WHERE
p.cod_produs=v.cod_produs ORDER BY cantitate ASC;

10)Sa se afiseze data vanzarii produselor in formatul YYYY/DD/MM.


SELECT TO_CHAR(data_vanzarii,'YYYY/DD/MM'), cod_produs FROM vanzari;

11)Sa se afiseze numele, prenumele si orasul angajatilor care au vandut produsul ce


are codul produsului "prod2".
SELECT nume, prenume, oras FROM angajati a, vanzari v WHERE
v.cod_angajat=a.cod_angajat AND cod_produs='prod2';

12)Sa se afiseze un text de forma: Nume


client a cumparat denumire produs intr-o
cantitate de la un pret de.
Select c.nume ||' a cumparat '||
p.denumire||'intr-o cantitate de '|| v.cantitate ||'
la un pret de '|| p.pret FROM clienti c,
produse p, vanzari v WHERE
c.cod_client=v.cod_client and

p.cod_produs=v.cod_produs;

13)Sa se afiseze produsele ale caror denumire incep cu litera C.


SELECT cod_produs, denumire FROM produse WHERE substr(denumire,1,1)='C';

14)Sa se creeze o tabela care contine toti clientii cu emailul '@yahoo.com'.


CREATE TABLE clienti_yahoo AS SELECT cod_client,nume,prenume FROM clienti
WHERE email LIKE'%@yahoo.com';

15)Sa se adauge in tabela clienti_yahoo


toti clientii al caror numar de telefon se
termina in cifra 3.
INSERT INTO clienti_yahoo SELECT
cod_client,nume,prenume FROM clienti
WHERE SUBSTR(nr_telefon,10,10)='3';
4 rows inserted.

VEDERI
1)Sa se creeze o tabela virtuala cu toti angajatii care sunt din Ploiesti si au vandut
prod2.
CREATE VIEW ang_ploiesti AS SELECT a.* FROM angajati a, vanzari v, produse p
WHERE a.cod_angajat=v.cod_angajat AND v.cod_produs=p.cod_produs AND
a.oras='Ploiesti';

2)Sa se creeze o tabela virtuala cu toate produsele ale caror pret este mai mare sau
egal cu 70.

CREATE VIEW prod70 AS SELECT cod_produs, denumire, pret FROM produse


WHERE pret>=70;

INDECSI
1)Sa se creeze un index care sa contina numele si prenumele angajatilor.
CREATE INDEX numeprenume ON angajati (nume,prenume);

2)Sa se creeze un index care sa contina codul angajatului si codul produsului.


CREATE INDEX cod ON vanzari(cod_angajat,cod_produs);

SINONIME
1)Sa se creeze un sinonim pentru tabela arhiva.
CREATE SYNONYM arhiva_sinonim FOR arhiva;

2)Sa se creeze un sinonim pentru tabela clienti.

CREATE SYNONYM clienti_sinonim FOR clienti;

SECVENTE
1)Sa se creeze o secventa pt a genera valori pt cheia primara din tabela clienti
incepand cu valoarea 10 doar numere impare pana la valoarea 250.
CREATE SEQUENCE secv_clienti START WITH 10 INCREMENT BY 1 MAXVALUE
250 NOCYCLE;

2)Sa se modifice valoarea de sfarsit la 300 in secventa secv_clienti.


ALTER SEQUENCE secv_clienti maxvalue 300;

CLUSTER
1)Sa se creeze un cluster produse_cluster care sa contina denumirea produsului si
pretul produsului.
CREATE CLUSTER produse_cluster(denumire_prod VARCHAR2(20),pret_prod
NUMBER(5.2));
CREATE INDEX prod_cluster_ind ON cluster produse_cluster;
CREATE TABLE produse1(cod_produs VARCHAR2(20) primary key, denumire
VARCHAR2(25)) CLUSTER produse_cluster (denumire_prod,pret_prod);

TABELE PARTITIONATE
1)Sa se creeze o tabela partitionata numita vanzari care sa se incadreze in partitiile 50
si 250.
CREATE TABLE vanzari_part(cod_angajat NUMBER(4) primary key, cod_produs
VARCHAR2(30), cantitate VARCHAR(30)) PARTITION BY RANGE (cantitate)
(PARTITION Cat1 values less than (10), PARTITION Cat2 values less than (100),
PARTITION Cat3 values less than (250));

2)Sa se adauge o inregistrare in tabela vanzari_part.


INSERT INTO vanzari_part values(2,'prod3',25);

Das könnte Ihnen auch gefallen