Sunteți pe pagina 1din 39

ACADEMIA DE STUDII ECONOMICE FACULTATEA DE

CIBERNETICA ,
STATISTICA I INFORMATICA
ECONOMICA






PROIECT BAZE DE DATE




Parvu Constantin Catalin
An II
Seria D
Grupa 1034















Bucuresti 2011


Baza de date
-Farmacie-


Descrierea bazei de date

Aceasta baza de date este folosita pentru gestionarea stocurilor unei farmacii Sensi Blue, chiar si pentru
inregistrarea angajatilor si clientilor.
Tabelele necesare sunt:FUNCTII,ANGAJATI,COMENZI, CLIENTI,PRODUSE,STOC,FURNIZORI,
RANDCOMENZI.
FUNCTII are urmatoarele caracteristici id_functie,den_functie,salariul_min,salariul maxim. Salariul depinde
de vechimea angajatului in farmacie ,si cum intr-o farmacie avem angajati cu aceeasi functie dar cu vechime
diferita exista salariul_min si salariul_max.
ANGAJATI au urmatoarele caracteristici:id_angajat,nume, prenume,adresa,telefon,data
angajarii,salariul,comision.
Datele necesare stocarii datelor despre COMENZI sunt: data in care s-a facut comanda, id_angajat(angajatul
care a preluat comanda), id_client(clientul care a facut comanda),stare_comanda(aici comanda poate fi livrata sau
nelivrata),si modalitate plata.
Datele necesare stocarii datelor despre CLIENTI sunt :nume, prenume, adresa, telefon,
localitate,varsta,ocupatie.Un client poate achizitiona mai multe produse in aceeasi comanda.
RANDCOMENZI ofera informatii despre traking numberul comenzii , este o tabela de intersectie intre
PRODUSE si COMENZI.
PRODUSE inregistreaza date despre produsele din farmacie:denumire,categorie, data expirarii so pretul.
Datele necesare FURNIZORILOR sunt denumire,cantitate_comandata si localitatea.
Mai multe produse pot fi aduse de mai multi furnizori si astfel s-a creat tabela STOCURI in care gestionez stocul
produselor din farmacie.





Scriptul de creare a tabelelor:
prompt
prompt Create table FUNCTII
prompt =======================
prompt
create table FUNCTII
(Id_functie NUMBER(4) CONSTRAINT PK_FUNCTIE PRIMARY KEY,
Den_functie VARCHAR2(40) NOT NULL,
Salariul_min NUMBER(4),
Salariul_max NUMBER(4)
);
























prompt
prompt Create table ANGAJATI
prompt ======================
prompt
create table ANGAJATI
(Id_angajat NUMBER(4) CONSTRAINT PK_ANGAJATI PRIMARY KEY,
Nume_ang VARCHAR2(30) NOT NULL,
Prenume_ang VARCHAR2(30),
Adresa VARCHAR2(30),
Telefon NUMBER(12),
Data_ang DATE,
Salariu NUMBER(4),
Comision NUMBER(3),
Id_functie NUMBER(4),
CONSTRAINT FKFunctii FOREIGN KEY(Id_functie) REFERENCES FUNCTII(Id_functie)
);

















prompt
prompt Create table CLIENTI
prompt ===========================
prompt
create table CLIENTI
(
Id_client NUMBER(4) CONSTRAINT PK_CLIENT PRIMARY KEY,
Nume_c VARCHAR2(30) NOT NULL,
Prenume_c VARCHAR2(6),
Varsta_c NUMBER(2),
Ocupatie VARCHAR2(30),
Telefon NUMBER(11),
Adresa VARCHAR2(30),
Localitate VARCHAR2(30)
);





















prompt
prompt Create table COMENZI
prompt =======================
prompt
create table COMENZI
(Nr_comanda NUMBER(4) CONSTRAINT PK_COMANDA PRIMARY KEY,
Data DATE,
Id_angajat NUMBER(4),
Id_client NUMBER(4),
Modalitate_plata VARCHAR2(20),
Stare_comanda CHAR(20),
CONSTRAINT FKANGAJATI FOREIGN KEY (Id_angajat) REFERENCES ANGAJATI(Id_angajat),
CONSTRAINT FKCLIENTI FOREIGN KEY (Id_client) REFERENCES CLIENTI(Id_client)
);






















Prompt
Prompt Create table RANDCOMENZI
Prompt======================
Prompt
Create table RANDCOMENZI
(Id_comanda NUMBER(4) CONSTRAINT PK_RANDPROD PRIMARY KEY,
Traking_number NUMBER(6),
Nr_comanda NUMBER(4),
Id_produs NUMBER(4),
CONSTRAINT FKCOMENZI FOREIGN KEY (Nr_comanda) REFERENCES COMENZI(Nr_comanda),
CONSTRAINT FKPRODUSE FOREIGN KEY (Id_produs) REFERENCES PRODUSE(Id_produs)
);


























prompt
prompt Create table PRODUSE
prompt ======================
prompt
create table PRODUSE
(
Id_produs NUMBER(4) CONSTRAINT PK_PRODUS PRIMARY KEY,
Denumire_produs VARCHAR2(35),
Categorie_produs VARCHAR2(30),
Pret NUMBER(3),
Data_exp DATE
);
alter table PRODUSE
add constraint DENUMIRE_PRODUS_NN
check ("DENUMIRE_PRODUS" IS NOT NULL);
alter table PRODUSE
add constraint PRET_NN
check("PRET" IS NOT NULL);















prompt
prompt Creating table FURNIZORI
prompt ========================
prompt
create table FURNIZORI
(
Id_furnizor Number(4) CONSTRAINT PK_ID_FURNIZOR PRIMARY KEY,
Den_furnizor VARCHAR2(30) NOT NULL,
Localitate VARCHAR2(20),
Cantitate_comandata NUMBER(3)
);

























prompt
prompt Creating table STOC
prompt =======================
prompt
create table STOC
create table STOC
(
Nr_stoc NUMBER(4) NOT NULL,
Cantitate NUMBER(3),
Id_produs NUMBER(4),
Id_furnizor NUMBER(4)
);
alter table STOC
add constraint STOC_NR_STOC_PK primary key (Nr_stoc);
alter table STOC
add constraint STOC_ID_PRODUS_FK foreign key (Id_produs)
references PRODUSE(Id_produs);
alter table STOC
add constraint STOC_ID_FURNIZOR_FK foreign key (Id_furnizor)
references FURNIZORI(Id_furnizor);


























Daca se doreste stergerea a unei sau mai multe tabele se foloseste comanda DROP:
DROP TABLE ANGAJATI CASCADE CONSTRAINTS;
DROP TABLE FUNCTII CASCADE CONSTRAINTS;
DROP TABLE COMENZI CASCADE CONSTRAINTS;
DROP TABLE CLIENTI CASCADE CONSTRAINTS;
DROP TABLE PRODUSE CASCADE CONSTRAINTS;
DROP TABLE STOC CASCADE CONSTRAINTS;
DROP TABLE FURNIZORI CASCADE CONSTRAINTS;




Scriptul de populare a tabelelor:

-- PENTRU TABELA FUNCTII

insert into FUNCTII (Id_functie,Den_functie,Salariul_min,Salariul_max)
values ('1','Farmacist', '2000','2500');
insert into FUNCTII(Id_functie,Den_functie,Salariul_min,Salariul_max)
values ('2','Manager','3400','3800');
insert into FUNCTII(Id_functie,Den_functie,Salariul_min,Salariul_max)
values ('3','Vanzator','1200','1800');
insert into FUNCTII(Id_functie,Den_functie,Salariul_min,Salariul_max)
values ('4','Promoter','600','800');
insert into FUNCTII(Id_functie,Den_functie,Salariul_min,Salariul_max)
values ('5','Ingrijitoare','1000','1200');






















-- PENTRU TABELA ANGAJATI

insert into ANGAJATI (Id_angajat,Nume_ang,Prenume_ang,Adresa,Telefon,Data_ang,Salariu,Comision,Id_functie)
values ('1', 'Popescu','Ion','Alee Trandafirilor nr1','0734567234','01.may.2008','3500','10','2');
insert into ANGAJATI (Id_angajat,Nume_ang,Prenume_ang,Adresa,Telefon,Data_ang,Salariu,Comision,Id_functie)
values ('2', 'Raicu','Stefan','Strd.Dorobanti nr123','0756295234','01.april.2009','2300','12','1');
insert into ANGAJATI (Id_angajat,Nume_ang,Prenume_ang,Adresa,Telefon,Data_ang,Salariu,Comision,Id_functie)
values ('3','Mihalcea','Daniela','Bulevardul Tineretului nr13','0762389012','02.april.2009','2300','10','1');
insert into ANGAJATI (Id_angajat,Nume_ang,Prenume_ang,Adresa,Telefon,Data_ang,Salariu,Comision,Id_functie)
values ('4','Voicu','Marian','Strd Marasasesti nr4','0745690234','02.april.2010','1600','20','3');
insert into ANGAJATI (Id_angajat,Nume_ang,Prenume_ang,Adresa,Telefon,Data_ang,Salariu,Comision,Id_functie)
values ('5','Petre','Alexandra','Barajul Unirii nr1','0721098567','01.march.2010','1100','8','5');
insert into ANGAJATI (Id_angajat,Nume_ang,Prenume_ang,Adresa,Telefon,Data_ang,Salariu,Comision,Id_functie)
values ('6','Varzaru','Cornel','Strada Nicolae Balcescu nr40','0729591720','08.may.2007','2400','10','1');
insert into ANGAJATI (Id_angajat,Nume_ang,Prenume_ang,Adresa,Telefon,Data_ang,Salariu,Comision,Id_functie)
values ('7','Dinescu','Alexandru','Alee Pietroasa','0724561970','08.June.2010','1200','10','3');
insert into ANGAJATI (Id_angajat,Nume_ang,Prenume_ang,Adresa,Telefon,Data_ang,Salariu,Comision,Id_functie)
values ('8','Minea','Stefan','Bulevardul Izvor nr6','0746098097','03.may.2010','600','10','4');
insert into ANGAJATI (Id_angajat,Nume_ang,Prenume_ang,Adresa,Telefon,Data_ang,Salariu,Comision,Id_functie)
values ('9','Croitoru','Adina','Strd. T. VLadimirescu nr120','0720765432','09.january.2010','700','10','4');
insert into ANGAJATI (Id_angajat,Nume_ang,Prenume_ang,Adresa,Telefon,Data_ang,Salariu,Comision,Id_functie)
values ('10','Vasilescu','Mariana','Bulevardul Toma Caragiu','0745012321','09.june.2007','1200','12','5');












-- PENTRU TABELA CLIENTI

insert into CLIENTI (Id_client,Nume_c,Prenume_c,Varsta_c,Ocupatie,Telefon,Adresa,Localitate)
values ('1', 'Fanatiu','Ion','28','director','0751098234','Aleea Ilia nr1','Bucuresti');
insert into CLIENTI (Id_client,Nume_c,Prenume_c,Varsta_c,Ocupatie,Telefon,Adresa,Localitate)
values ('2', 'Aldea','Marin','35','vanzator','0725876145','Strd.Vacaresti nr126','Bucuresti');
insert into CLIENTI (Id_client,Nume_c,Prenume_c,Varsta_c,Ocupatie,Telefon,Adresa,Localitate)
values ('3','Micu','Daniel','56','doctor','0745957150','Aleea Oituz nr1','Bucuresti');
insert into CLIENTI(Id_client,Nume_c,Prenume_c,Varsta_c,Ocupatie,Telefon,Adresa,Localitate)
values ('4','Plevna','Alex','19','student','0746084601','Strd Aviatiei nr4','Bucuresti');
insert into CLIENTI(Id_client,Nume_c,Prenume_c,Varsta_c,Ocupatie,Telefon,Adresa,Localitate)
values ('5','Popescu','Ioana','32','avocat','0740866001','Barajul Uzului nr1','Bucuresti');
insert into CLIENTI(Id_client,Nume_c,Prenume_c,Varsta_c,Ocupatie,Telefon,Adresa,Localitate)
values ('6','Vladucu','Bogdan','51','notar','0750871035','Aleea Teilor','Bucuresti');



























-- PENTRU TABELA COMENZI

insert into COMENZI(Nr_comanda,Data,Id_angajat,Id_client,Modalitate_plata,Stare_comanda)
values ('1', '01.january.2012','3','1','card','livrat');
insert into COMENZI(Nr_comanda,Data,Id_angajat,Id_client,Modalitate_plata,Stare_comanda)
values ('2', '04.january.2012','3','2','card','livrat');
insert into COMENZI(Nr_comanda,Data,Id_angajat,Id_client,Modalitate_plata,Stare_comanda)
values ('3','01.march.2012','3','3','card','livrat');
insert into COMENZI(Nr_comanda,Data,Id_angajat,Id_client,Modalitate_plata,Stare_comanda)
values ('4','05.april.2012','3','4','card','livrat');
insert into COMENZI(Nr_comanda,Data,Id_angajat,Id_client,Modalitate_plata,Stare_comanda)
values ('5','02.may.2012','3','5','card','livrat');
insert into COMENZI(Nr_comanda,Data,Id_angajat,Id_client,Modalitate_plata,Stare_comanda)
values ('6','02.june.2012','3','6','card','livrat');






























-- PENTRU TABELA PRODUSE

insert into PRODUSE(Id_produs,Denumire_produs,Categorie_produs,Pret,Data_exp)
values ('1','Paracetamol','Medicament','7','01.december.2013');
insert into PRODUSE(Id_produs,Denumire_produs,Categorie_produs,Pret,Data_exp)
values ('2','Fervex','Medicament','8','02.november.2013');
insert into PRODUSE(Id_produs,Denumire_produs,Categorie_produs,Pret,Data_exp)
values ('3','Crema de zi Aven','Cosmetica','67','02.december.2013');
insert into PRODUSE(Id_produs,Denumire_produs,Categorie_produs,Pret,Data_exp)
values ('4','Disc demachiant','Cosmetica','3','02.december.2014');
insert into PRODUSE(Id_produs,Denumire_produs,Categorie_produs,Pret,Data_exp)
values ('5','Nurofen','Medicament','8','05.june.2013');
insert into PRODUSE(Id_produs,Denumire_produs,Categorie_produs,Pret,Data_exp)
values ('6','Aspirina','Medicament','5','02.january.2013');






























-- PENTRU TABELA FURNIZORI

insert into FURNIZORI(Id_furnizor,Den_furnizor,Localitate,Cantitate_comandata)
values ('1','Carbolemed','Chisinau','30');
insert into FURNIZORI(Id_furnizor,Den_furnizor,Localitate,Cantitate_comandata)
values ('2','Farmax','Deva','15');
insert into FURNIZORI(Id_furnizor,Den_furnizor,Localitate,Cantitate_comandata)
values ('3','Medimax','Cluj','20');
insert into FURNIZORI(Id_furnizor,Den_furnizor,Localitate,Cantitate_comandata)
values ('4','Remedia','Brasov','19');
insert into FURNIZORI(Id_furnizor,Den_furnizor,Localitate,Cantitate_comandata)
values ('5','Depmed','Bucuresti','30');
insert into FURNIZORI(Id_furnizor,Den_furnizor,Localitate,Cantitate_comandata)
values ('6','Naturalex','Timisoara','32');






























-- PENTRU TABELA STOC

insert into STOC(Nr_stoc,Cantitate,Id_produs,Id_furnizor)
values ('1','20','2','1');
insert into STOC(Nr_stoc,Cantitate,Id_produs,Id_furnizor)
values ('2','37','3','2' );
insert into STOC(Nr_stoc,Cantitate,Id_produs,Id_furnizor)
values ('3','23','5','3');
insert into STOC(Nr_stoc,Cantitate,Id_produs,Id_furnizor)
values ('4','12','1','5');
insert into STOC(Nr_stoc,Cantitate,Id_produs,Id_furnizor)
values ('5','17','6','6');
insert into STOC(Nr_stoc,Cantitate,Id_produs,Id_furnizor)
values ('6','10','4','4');






























PARTEA a II-a
SELECT


Sa se afiseze toti angajatii din tabela angajati.
SELECT * FROM ANGAJATI;










Sa se afiseze numai clientii care sunt din Bucuresti.
SELECT * FROM CLIENTI
WHERE upper(Localitate)
LIKE 'B%';





Sa se afiseze produsele ce au pretul mai mare decat 5 RON.
SELECT * FROM PRODUSE WHERE Pret>5;








Afisati numele, prenumele ,salariul angajatilor , cu salariul intre 600 si 2800, al caror nume incepe cu V si ordonati crescator
dupa prenume.
SELECT Nume_ang, Prenume_ang, Salariu
FROM ANGAJATI
WHERE Salariu BETWEEN 600 AND 2800 AND Nume_ang LIKE 'V%'
ORDER BY Prenume_ang DESC;


Afisati numele clientilor, prenumele concatenat cu varsta pt toti clientii ai caror nume incep cu litera A.
SELECT Nume_c,concat(Prenume_c, Varsta_c)
FROM CLIENTI
WHERE UPPER(substr(Nume_c,1,1))='A';





Afisati cantitatea medie din stoc pt fiecare produs,numai pentru acele produse care au o cantitate medie>10.
SELECT a.id_produs,AVG(b.cantitate)
FROM PRODUSE a,STOC b
WHERE a.id_produs=b.id_produs
group by a.id_produs
having AVG(b.cantitate)>10;



Afisati numarul de produse al caror pret este mai mare decat 7 RON
SELECT COUNT(id_produs)
FROM PRODUSE
WHERE Pret>7;







Afisati data primei comenzi ridicate si data ultimei comenzi ridicate.
SELECT min(Data),max(Data)
FROM COMENZI;



Sa se rotunjeasca numarul 10,234 rotunjit la doua zecimale si fara nicio zecimala.
SELECT round(10.234,2) rotunjire1,round(10.234,0) rotunjire2
FROM dual;








Sa se afiseze valoarea totala a produselor aflate in stoc.
SELECT a.Id_produs, sum(b.cantitate*a.pret) valoare
FROM PRODUSE a, STOC b
WHERE a.Id_produs=b.Id_produs
Group by a.id_produs;









Sa se afiseze numele si valoarea fiecarui produs care au preturile cuprinse intre 5 ron si 10 ron.
SELECT a.Id_produs,b.cantitate*a.pret
FROM PRODUSE a, STOC b
WHERE a.Id_produs=b.Id_produs AND a.pret BETWEEN 5 AND 10;









S se afieze comenzile i data in format MM/YY

SELECT Nr_comanda, TO_CHAR(Data, 'MM/YY') Data FROM COMENZI;




S se afieze comenzile i data ncheierii n formatul Month dd, YYYY

SELECT Nr_comanda, modalitate_plata, Data
FROM COMENZI
WHERE data=TO_DATE( 'January 01, 2012', 'Month dd,YYYY');







Sa se calculeze comisionul angajatilor in functie de
functie:
0.1% din valoarea salariului sau daca functia este
promoter
0.2% din valoarea salariului sau daca functia este
vanzator
0.3% din valoarea salariului sau daca functia este
farmacist
0,4% din valoarea salariului sau daca functia
estedirector
Pentru celelalte functii comisionul va fi 0.






DECODE
SELECT a.Nume_ang, b.Den_functie, DECODE(lower(b.Den_functie) , 'director' , 0.4,'farmacist', 0.3, 'vanzator' ,
0.2, promoter,0.1,0) comision
FROM ANGAJATI a,FUNCTII b
WHERE a.id_functie=b.id_functie;







CASE
SELECT a.Nume_ang, b.Den_functie,
(CASE WHEN b.id_functie=2
WHEN b.id_functie=1 THEN 0.3
WHEN b.id_functie=3 THEN 0.2
WHEN b.id_functie=4 THEN 0.1
ELSE 0 END)*salariu COMISION
FROM ANGAJATI a, FUNCTII b
WHERE a.id_functie=b.id_functie;

















UNION, INTERSECT, MINUS
Sa se calculeze distinct comisionul pt angajati folosind operatorul UNION:
Daca au avut mai mult de 10 comenzi va fi de 10% din salariu.
Daca au avut mai mult de 15 comenzi va fi de 20% din salariu.
Daca au avut mai mult de 20 comenzi va fi de 30% din salariu.

select a.nume_angajat, count(b.nr_comanda) nrcomenzi,
0.1*a.salariu val_comision
from ANGAJATI a,COMENZI c
where a.id_angajat=b.id_angajat
group by a.id_angajat
having count(c.nr_comanda)>=10
union
select a.nume_angajat, count(b.nr_comanda) nrcomenzi,
0.2*a.salariu val_comision
from ANGAJATI a,COMENZI c
where a.id_angajat=b.id_angajat
group by a.id_angajat


having count(c.nr_comanda)>=15
union
select a.nume_angajat, count(b.nr_comanda) nrcomenzi,
0.3*a.salariu val_comision
from ANGAJATI a,COMENZI c
where a.id_angajat=b.id_angajat
group by a.id_angajat
having count(c.nr_comanda)>=20;

UNION
select telefon,adresa from angajati
union
select
telefon,adresa from clienti;
MINUS
select telefon,adresa from angajati
minus


select
telefon,adresa from clienti;

INTERSECT

select adresa from angajati
intersect
select
adresa from clienti;

update clienti
set adresa='Alee Trandafirilor nr1'
where id_client=1;











Subcereri, cereri imbricate
ALTER TABLE ANGAJATI ADD (CodSef number(4));
Selectati toti agentii si subordonatii acestora:
select * from ANGAJATI
connect by nocycle id_angajat= prior codsef
order by codsef;





Afisati agentii companiei subordonati inregistrarii radacina:
Select id_angajat, nume_ang, codsef from ANGAJATI
connect by prior id_angajat= codsef
start with nume_ang= 'Popescu'
VIEW
Sa realizeze o tabela virtuala cu toti clientii din Bucuresti:
CREATE VIEW buc_v
AS SELECT * FROM CLIENTI
WHERE localitate='Bucuresti';
SELECT * FROM buc_v;




Sa se stearga tabela virtuala buc_v:
DROP VIEW buc_v;



SINONIME
Sa se creeze un sinonim pentru tabela Furnizori:

Create synonym detalii_furnizori for Furnizori;



Vizualizarea sinonimelor se realizeaza astfel

Select * from detalii_furnizori;






Sa se strearga sinonimul creat anterior:

Drop synonym detalii_furnizor;



INDEX

Creati un index pentru tabela Angajati.
CREATE INDEX ANGAJATI_NUME_ANG_IDX ON ANGAJATI(NUME_ANG);






Vizualizarea indecsilor unui anumit utilizator:
Select * from user_indexes;
Sa se strearga indexul creat anterior:
DROP INDEX ANGAJATI_NUMEANG_IDX;








SECVENTA


Sa se creeze o secventa pentru asigurarea unicitatii cheii primare din tabela Comenzi.
Create sequence seq_nrcomanda
start with 500 Increment by 10
Maxvalue 1000 nocycle;
Insert into comenzi values (seq_nrcomanda.nextval, '10', '3', to_date('oct 12,05', 'mon dd,yy'));
Sa se afiseze valoarea curenta a secventei:
Select seq_rcomanda.currval from dual;
Sa se modifice pasul de incrementare pentru secventa anterioara:
Alter sequence seq_nrcomanda increment by 100;

S-ar putea să vă placă și