Sunteți pe pagina 1din 24

Internal

PROIECT BAZE DE DATE

SANDU MIHAELA-AMALIA
GRUPA 1082

1
Internal

CUPRINS:
1. Descrierea bazei de date
2. Schema bazei de date
3. Scripturile CREATE TABLE
4. Inserarile in tabele
5. Interogari variate
6. Gestiunea altor obiecte ale bazei de date.

2
Internal

1. Descrierea bazei de date

Zilnic avem de-a face cu date si informatii pe care dorim sa le gestionam si sa le


organizam cat mai usor posibil. Bazele de date reprezinta colectii de informatii
logic organizate, astfel incat sa ne usureze si sa ne eficientizeze diverse actiuni.
In acest proiect am droit sa evidentiez importanta unei baze de date intr-un
magazin. Consider ca prin baza de date create este mult mai usor de tinut evidenta
clientilor, comenzilor, produselor existente in magazine, produselor de care avem
nevoie si furnizorilor care ne pot asigura cele necesare functionarii.
Folosind interogari simple SQL, putem afla intr-un mod facil lipsurile din
magazine, datoriile clientilor catre societate sau datoriile societatii catre client, etc.
In prima parte a proiectului am realizat schema bazei de date, cu legaturile
dintre tabele, respectand regulile pentru a aduce baza de date in forma normala 3.
In a doua parte am create efectiv tabelele bazei de date, urmand ca in a treia
parte a proiectului sa le si populez. In medie am inserat in jur de 10 randuri in
fiecare tabela pentrua avea date pe care sa le prelucrez.
In cea de-a patra parte a proiectului am efectuat diferite interogari. Am
explicitat ce am dorit sa efectuez atasand un enunt pentru fiecare interogare si
scriptul sql.
Nu in ultimul rand, in ultima parte a proiectului creat view-uri, secvente, indecsi
si sinonime pentru a evidentia cunostintele acumulate pana in prezent in acest sens.

2. Schema bazei de date

CLIENTI
COMENZI COMENZI_PRODUSE
Id_Client3.
Id_Comanda Id_Comanda
4.
Nume_client
1 1
1
Data_comanda Pret_comanda
Prenume_client ∞
Stare_comanda Id_Produs
Cnp_client
Modplata_comanda
Adresa_client
Id_Client 3
Telefon_client

Datorii_client
1
Internal

3. Scripturile CREATE TABLE

a) Creareatabelei CLIENTI
CREATE TABLE CLIENTI1:
id_client number PRIMARY KEY,
nume_client varchar2(120) NOT NULL,
prenume_client varchar2(120) NOT NULL,
cnp_client varchar2(120) NOT NULL,
adresa_client varchar2(120) NULL,
telefon_client varchar2(120) NOT NULL,
datorii_client integer NULL);

b) Crearea tabelei COMENZI:


CREATE TABLE COMENZI1
(id_comandainteger NOT NULL PRIMARY KEY,
data_comanda date NOT NULL,
stare_comanda varchar2(20) NOT NULL,
modplata_comanda varchar2(25) NOT NULL,
Id_client number REFERENCES CLIENTI(id_client));

4
Internal

c) Crearea tabelei COMENZI_PRODUSE:


CREATE TABLE COMENZI_PRODUSE
(id_comandanumber NOT NULL ,
pret_comandanumber NOT NULL,
id_produs number NOT NULL,
CONSTRAINT fk_comenzi_prod FOREIGN KEY (id_produs)
REFERENCES PRODUSE(id_produs),
CONSTRAINT fk_comenzi_p2 FOREIGN KEY (id_comanda)
REFERENCES COMENZI1(id_comanda) );

d) Crearea tabelei FURNIZORI


CREATE TABLE FURNIZORI
(Id_furnizor number PRIMARY KEY,
nume_furnizor varchar2(120) NOT NULL,
adresa_furnizor varchar2(200),
datorie_catre_furnizor number);

5
Internal

e) Crearea tabelei PRODUSE


CREATE TABLE PRODUSE1
(id_produsinteger NOT NULL PRIMARY KEY,
descriere_produs varchar2(200 ) NULL,
pret_produs number NOT NULL,
tva_produs number NULL,
Id_furnizor number REFERENCES FURNIZORI(id_furnizor));

4. Inserarile in tabele:
a) Inserari in tabela Furnizori:
Insert into FURNIZORI(Id_furnizor , nume_furnizor, adresa_furnizor,
datorie_catre_furnizor)
values(1,'Cord', 'Targoviste', 200);
Insert into FURNIZORI(Id_furnizor , nume_furnizor, adresa_furnizor,
datorie_catre_furnizor)
values(2,'Astoria', 'Gaesti', 0);

6
Internal

Insert into FURNIZORI(Id_furnizor , nume_furnizor, adresa_furnizor,


datorie_catre_furnizor)
values(3,'Manoil', 'Targoviste', 0);
Insert into FURNIZORI(Id_furnizor , nume_furnizor, adresa_furnizor,
datorie_catre_furnizor)
values(4,'Central', 'Targoviste', 0);
Insert into FURNIZORI(Id_furnizor , nume_furnizor, adresa_furnizor,
datorie_catre_furnizor)
values(5,'Elit', 'Targoviste', 120);
Insert into FURNIZORI(Id_furnizor , nume_furnizor, adresa_furnizor,
datorie_catre_furnizor)
values(6,'Grandi', 'Targoviste', 80);
Insert into FURNIZORI(Id_furnizor , nume_furnizor, adresa_furnizor,
datorie_catre_furnizor)
values(7,'Orbit', 'Targoviste', 0);
Insert into FURNIZORI(Id_furnizor , nume_furnizor, adresa_furnizor,
datorie_catre_furnizor)
values(8,'2Smart', 'Targoviste', 0);
Insert into FURNIZORI(Id_furnizor , nume_furnizor, adresa_furnizor,
datorie_catre_furnizor)
values(9,'Giusto', 'Targoviste', 0);
Insert into FURNIZORI(Id_furnizor , nume_furnizor, adresa_furnizor,
datorie_catre_furnizor)
values(10,'Velpitar', 'Targoviste', 20);

7
Internal

b) Inserari in tabela Clienti1:


Insert into CLIENTI1
(id_client ,nume_client ,prenume_client ,cnp_client,adresa_client,telefon_client,dat
orii_client )
values(1,'Popescu','Andreea','pandreea','str.Mihai Eminescu,nr.2,bl
22,sc.C,ap.5',0742317745,0);
Insert into
CLIENTI1(id_client ,nume_client ,prenume_client ,cnp_client,adresa_client,telefo
n_client,datorii_client )
values(2,'Ionescu','Maria','imaria','str.Lalelelor,nr.7,bl.7,ap.41',0751236743,100);
Insert into CLIENTI1
(id_client ,nume_client ,prenume_client ,cnp_client,adresa_client,telefon_client,dat
orii_client )
values(3,'Pop','Cosmin','pcosmin','str.Victoriei,nr3,bl.A3,ap.21',0761234543,200);
Insert into CLIENTI1
(id_client ,nume_client ,prenume_client ,cnp_client,adresa_client,telefon_client,dat
orii_client )
values(4,'Ivan','Oana','ioana','str.Pacii,nr.4',0251123456,0);
Insert into CLIENTI1
(id_client ,nume_client ,prenume_client ,cnp_client,adresa_client,telefon_client,dat
orii_client )
values(5,'Popescu','Dragos','pdragos','str.Datinei,bl.B21,ap.30',0732143564,100);
Insert into CLIENTI1
(id_client ,nume_client ,prenume_client ,cnp_client,adresa_client,telefon_client,dat
orii_client )
values(6,'Negoi','Mihaela','nmihaela','str.Principala,nr.7,bl.7,ap.41',0727114404,20)
;
Insert into CLIENTI1
(id_client ,nume_client ,prenume_client ,cnp_client,adresa_client,telefon_client,dat
orii_client )
values(7,'Negoi','Danut','dnegoi','str.
Constantinescu,nr3,bl.A3,ap.21',0731278369,0);

8
Internal

Insert into CLIENTI1


(id_client ,nume_client ,prenume_client ,cnp_client,adresa_client,telefon_client,dat
orii_client )
values(8,'Popescu','Adelina','a.popescu','str.Jupiter,nr.4',0251123456,0);
Insert into CLIENTI1
(id_client ,nume_client ,prenume_client ,cnp_client,adresa_client,telefon_client,dat
orii_client )
values(9,'Sandu','Mihaela','s.mihaela','str.Oletnitei,bl.B21,ap.30',0732143564,0);
Insert into CLIENTI1
(id_client ,nume_client ,prenume_client ,cnp_client,adresa_client,telefon_client,dat
orii_client )
values(10,'Vasile','Maria','mvasile','str.Oltenitei,bl.B21,ap.30',0732143564,0);

c) Inserari in tabela Comenzi1:

insert into Comenzi1(id_comanda,data_comanda, stare_comanda,


modplata_comanda,id_client)values (1, to_date('12-12-2018', 'dd-mm-yyyy'),
'livrat', 'cash',1);
insert into Comenzi1(id_comanda,data_comanda, stare_comanda,
modplata_comanda,id_client)values (2, to_date('12-12-2018', 'dd-mm-yyyy'),
'nelivrat', 'N\A',5);
insert into Comenzi1(id_comanda,data_comanda, stare_comanda,
modplata_comanda,id_client)values (3, to_date('27-12-2018', 'dd-mm-yyyy'),
'necunoscut', 'cash',4);
insert into Comenzi1(id_comanda,data_comanda, stare_comanda,
modplata_comanda,id_client)values (4, to_date('04-12-2018', 'dd-mm-yyyy'),
'refuzat', 'N\A',3);

9
Internal

insert into Comenzi1(id_comanda,data_comanda, stare_comanda,


modplata_comanda,id_client)values (5, to_date('09-12-2018', 'dd-mm-yyyy'),
'livrat', 'cash',2);
insert into Comenzi1(id_comanda,data_comanda, stare_comanda,
modplata_comanda,id_client)values (6, to_date('12-03-2018', 'dd-mm-yyyy'),
'livrat', 'cash',6);
insert into Comenzi1(id_comanda,data_comanda, stare_comanda,
modplata_comanda,id_client)values (7, to_date('04-04-2018', 'dd-mm-yyyy'),
'livrat', 'cash',8);
insert into Comenzi1(id_comanda,data_comanda, stare_comanda,
modplata_comanda,id_client)values (8, to_date('15-10-2018', 'dd-mm-yyyy'),
'livrat', 'cash',7);
insert into Comenzi1(id_comanda,data_comanda, stare_comanda,
modplata_comanda,id_client)values (9, to_date('19-08-2018', 'dd-mm-yyyy'),
'livrat', 'cash',9);
insert into Comenzi1(id_comanda,data_comanda, stare_comanda,
modplata_comanda,id_client)values (10, to_date('21-11-2018', 'dd-mm-yyyy'),
'livrat', 'cash',10);

d) Inserari in tabela Produse1:

insert into produse1(id_produs, descriere_produs, pret_produs, tva_produs,


id_furnizor) values (1, 'paine', 1, 0.09, 10);

10
Internal

insert into produse1(id_produs, descriere_produs, pret_produs, tva_produs,


id_furnizor) values (2, 'suc', 5, 0.09, 9);
insert into produse1(id_produs, descriere_produs, pret_produs, tva_produs,
id_furnizor) values (3, 'prajitura', 1, 0.09, 8);
insert into produse1(id_produs, descriere_produs, pret_produs, tva_produs,
id_furnizor) values (4, 'guma', 2.5, 0.09, 7);
insert into produse1(id_produs, descriere_produs, pret_produs, tva_produs,
id_furnizor) values (5, 'carnati', 22, 0.09, 6);
insert into produse1(id_produs, descriere_produs, pret_produs, tva_produs,
id_furnizor) values (6, 'salam', 20, 0.09, 5);
insert into produse1(id_produs, descriere_produs, pret_produs, tva_produs,
id_furnizor) values (7, 'tigari', 18, 0.19, 4);
insert into produse1(id_produs, descriere_produs, pret_produs, tva_produs,
id_furnizor) values (8, 'bere', 3, 0.19, 3);
insert into produse1(id_produs, descriere_produs, pret_produs, tva_produs,
id_furnizor) values (9, 'corn', 2, 0.09, 2);
insert into produse1(id_produs, descriere_produs, pret_produs, tva_produs,
id_furnizor) values (10, 'biscuiti', 14, 0.09, 1);

e) Inserari in tabela Comenzi_produse:

insert into comenzi_produse( id_comanda, pret_comanda) values (1,10);


insert into comenzi_produse(id_comanda, pret_comanda) values (2,16);
insert into comenzi_produse( id_comanda, pret_comanda) values (3,24);
insert into comenzi_produse( id_comanda, pret_comanda) values (4,1167);
insert into comenzi_produse( id_comanda, pret_comanda) values (5,156);
insert into comenzi_produse( id_comanda, pret_comanda) values (6,27);

11
Internal

insert into comenzi_produse( id_comanda, pret_comanda) values (7,14);


insert into comenzi_produse( id_comanda, pret_comanda) values (8,582);
insert into comenzi_produse( id_comanda, pret_comanda) values (9,105);
insert into comenzi_produse( id_comanda, pret_comanda) values (10,100);

5. Interogari variate

--Adaugare coloana Sex in tabela Clienti1:


ALTER TABLE CLIENTI1 ADD (SEX VARCHAR2(1));

--Se modifica marimea atributului nume_client din tabela Clienti1:


ALTER TABLE CLIENTI1 MODIFY (NUME_CLIENT VARCHAR(100));

12
Internal

--Se sterge coloana Sex din tabela Clienti1:


ALTER TABLE CLIENTI1DROP COLUMN SEX;

--Sa se redenumeasca tabela Produse1 in Produse_vanzare


ALTER TABLE PRODUSE1 RENAME TO PRODUSE_VANZARE;

13
Internal

--Se modifica numele clientului cu id-ul 2:


UPDATE CLIENTI1 SET NUME_CLIENT='IONESCU' WHERE
ID_CLIENT=2;
SELECT NUME_CLIENT FROM CLIENTI1 WHERE ID_CLIENT=2;

--Se modifica prenumele clientului in GEORGE pentru clientii care au numele


NEGOI:
UPDATE CLIENTI1 SET PRENUME_CLIENT='GEORGE'
WHERE NUME_CLIENT=(SELECT NUME_CLIENT FROM CLIENTI1
WHERE NUME_CLIENT='NEGOI');

--Se sterge randul din comenzi unde luna este MARTIE:

DELETE FROM COMENZI1 WHERE EXTRACT (MONTH FROM


DATA_COMANDA)='3';

14
Internal

-- Se sterg randurile din Furnizori unde id_ul este intre 12 si 14

DELETE FROM FURNIZORI


WHERE ID_FURNIZOR IN( SELECT ID_FURNIZOR FROM FURNIZORI
WHERE ID_FURNIZOR BETWEEN 12 AND 14);

--Se selecteaza starea comenzii, data, numele clientului si datoria acestuia:

SELECT STARE_COMANDA, DATA_COMANDA, NUME_CLIENT,


DATORII_CLIENT
FROM COMENZI1 C, CLIENTI1 CL
WHERE C.ID_CLIENT=CL.ID_CLIENT;

15
Internal

--Sa se afiseze datele din tabela FURNIZOR si pe cele comune din tabela
PRODUSE_VANZARE:

SELECT * FROM FURNIZORI F


LEFT OUTER JOIN PRODUSE_VANZARE P ON
F.ID_FURNIZOR=P.ID_FURNIZOR;

--Sa se afle pretul maxim din tabela PRODUSE_VANZARE:

SELECT MAX(PRET_PRODUS)PRET_MAXIM FROM


PRODUSE_VANZARE;

--Se face o tabela de back-up pentru cea de COMENZI1 si apoi se sterge:

CREATE TABLE CLIENTI1_BACKUP AS SELECT* FROM CLIENTI1;


DROP TABLE CLIENTI1_BACKUP;

16
Internal

--Se afiseaza toate datele despre paine si bere:

SELECT PRET_PRODUS, TVA_PRODUS, ID_FURNIZOR FROM


PRODUSE_VANZARE
WHERE DESCRIERE_PRODUS='PAINE'
UNION
SELECT PRET_PRODUS, TVA_PRODUS, ID_FURNIZOR FROM
PRODUSE_VANZARE
WHERE DESCRIERE_PRODUS='BERE';

--Se afiseaza furniorii care nu sunt Central:

SELECT* FROM FURNIZORI MINUS SELECT* FROM FURNIZORI WHERE


NUME_FURNIZOR='CENTRAL';

--Se verifica cantitatea produselor dupa descriere:

SELECT P.ID_PRODUS, P.DESCRIERE_PRODUS, F.ID_FURNIZOR,


F.NUME_FURNIZOR,
CASE WHEN P.DESCRIERE_PRODUS='SUC' THEN 3
WHEN P.DESCRIERE_PRODUS='PAINE' THEN 2
ELSE 0
END AS NUMAR
FROM PRODUSE_VANZARE P, FURNIZORI F

17
Internal

WHERE P.ID_FURNIZOR=F.ID_FURNIZOR;

--Afisam clientii care au datorii sub 70 lei folosind operatorul minus

SELECT ID_CLIENT, NUME_CLIENT, DATORII_CLIENT


FROM CLIENTI1
MINUS
SELECT ID_CLIENT, NUME_CLIENT, DATORII_CLIENT
FROM CLIENTI1
WHERE DATORII_CLIENT>70;

18
Internal

--Afisam id-ul si pretul produsului folosind operatorul union:

SELECT ID_PRODUS
FROM PRODUSE_VANZARE
UNION
SELECT PRET_PRODUS
FROM PRODUSE_VANZARE;

--Se afiseaza numele si adresa clientilor care au datorii mai mari de 70 de lei
folosind intersect:
SELECT NUME_CLIENT, ADRESA_CLIENT
FROM CLIENTI1
INTERSECT
SELECT NUME_CLIENT, ADRESA_CLIENT
FROM CLIENTI1
WHERE DATORII_CLIENT>70;

19
Internal

--Se afiseaza id-ul clientului si modalitatea de plata din tabela comenzi1, daca
modalitatea de plata nu este specificata, se creste datoria clientului cu 10%
SELECT A.ID_CLIENT, A.MODPLATA_COMANDA,
DECODE(A.ID_CLIENT, 'N\A', B.DATORII_CLIENT*1.1,
B.DATORII_CLIENT) DATORII
FROM COMENZI1 A, CLIENTI1 B
WHERE
A.ID_CLIENT=B.ID_CLIENT;

6. Gestiunea altor obiecte ale bazei de date:

--Se creaza un view care sa afiseze toti clientii:

CREATE VIEW CLIENTII


AS SELECT C.ID_CLIENT, C.NUME_CLIENT, C.PRENUME_CLIENT,
C.CNP_CLIENT,

20
Internal

C.ADRESA_CLIENT, C.TELEFON_CLIENT,C.DATORII_CLIENT FROM


CLIENTI1 C, COMENZI1 CO
WHERE C.ID_CLIENT=CO.ID_CLIENT;

SELECT* FROM CLIENTII;

--Se creaza indexuri pentru coloan anume_client din tabela CLIENTI1:

CREATE INDEX NAME_IDX ON CLIENTI1(NUME_CLIENT);

SELECT * FROM USER_INDEXES WHERE INDEX_NAME LIKE '%_IDX'


AND TABLE_NAME IN ('CLINETI1');

--Se sterge indexul create anterior:


DROP INDEX NAME_IDX;

21
Internal

--Se creaza un sinonim pentru PRODUSE_VANZARE si se afiseaza:


CREATE SYNONYM PROD FOR PRODUSE_VANZARE;

SELECT*FROM PROD;

--Se creaza o secventa pentru tabela Prod:

CREATE SEQUENCE SEQ_ID_PRODUS


START WITH 2
INCREMENT BY 2
MAXVALUE 200

22
Internal

NOCYCLE;

INSERT INTO PROD VALUES(SEQ_ID_PRODUS.NEXTVAL,


'CEAPA', 2,0.09, 2);

--Se creaza un view unde sunt mai multi funizori:

CREATE VIEW FURNIZ AS( SELECT ID_FURNIZOR,


COUNT(NUME_FURNIZOR) AS CNT FROM FURNIZORI
GROUP BY ID_FURNIZOR
HAVING COUNT(NUME_FURNIZOR)<2);

SELECT* FROM FURNIZ;

23
Internal

--Se creaza un cluster pentru tabelele produse_vanzare si comenzi_produse:

CREATE CLUSTER PRODUSE_COMANDATE( ID_COMANDA NUMBER)


SIZE 200
STORAGE ( INITIAL 200K NEXT 300K MINEXTENTS 2 PCTINCREASE 33);

CREATE TABLE PRODUSE_COMANDATE( ID_PRODUS NUMBER


PRIMARY KEY, NUME_PRODUS VARCHAR2(20), ID_COMANDA
NUMBER REFERENCES PRODUSE_COMANDATE)
CLUSTER PRODUSE_COMANDATE (ID_COMANDA);

24

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