Sunteți pe pagina 1din 34

Baze de Date

Gestiunea unui
magazin de mobil

Gestiunea unui magazin de mobila

Tema proiectului o reprezinta gestiunea unui magazin de mobila, si pentru aceasta am


folosit urmatoarele tabele:
- TARI cu structura : id_tara number(5), denumire varchar2(25), continent varchar2 (20).
Cheia primara o reprezinta id_tara.
- FURNIZORI cu structura : cod_furnizor number(5),nume_furnizor varchar2(20),adresa
varchar2(30), email varchar2(20), telefon number(10), id_tara number(5). Cheia primara este
cod_furnizor iar id_tara este foreign key din tabela TARI.
- PRODUSE cu structura : cod_art number(5),cod_furnizor number(5), denumire
varchar2(20), material varchar2(20), pret_cump number(8,2). Cheia primara o reprezinta
cod_art,iar cod_furnizor este foreign key din tabela FURNIZORI.
- LISTA_COMENZI cu structura : nr_comanda number(5) ,cod_art number(5), pret
number(8,2), cantitate number(8). Cheia primara este nr_comanda si contine foreign key
(cod_art) din tabela PRODUSE .
- COMENZI cu structura : nr_comanda number(5), data date, modalitate varchar2(20),
id_client number(6), stare_comanda varchar2(20).Cheia primara este nr_comanda ,iar
id_client e foreign key din tabela CLIENTI .
- CLIENTI cu structura : id_client number(6), prenume_client varchar2(20), nume_client
vachar2(20), telefon varchar2(20), limita_credit number(9,2), email_client
varchar2(20),data_nastere date. Cheia primara este id_client.
O tara poate contine unul sau mai multi furnizori (sau deloc).Fiecare tara trebuie sa
apartina unui continent .
Un furnizor produce mai multe obiecte de mobilier identificate prin cod_art, un produs
putand fi achizitonat de la un unic furnizor.
Un client poate solicita mai multe tipuri de produse intr-o singura comanda , prin
intermediul tabelei LISTA_COMENZI care retine cantitatile comandate din fiecare produs.
Un client poate face mai multe comenzi, la date diferite, sau in aceeasi zi , poate
adauga alte produse pe o comanda existenta.
Produsele de pe o comanda se livreaza in acelasi timp.
Pretul de cumprarare al articolelor de mobilier trebuie sa fie mai mic decat pretul de
vanzare al lor, in vederea realizarii profitului.

SCHEMA CONCEPTUALA

CREAREA TABELEI TARI


CREATE TABLE TARI
( id_tara
NUMBER (5),
denumire_tara VARCHAR2(25),
continent VARCHAR(20));

alter table TARI add constraint TARA_PK primary key (ID_TARA);


alter table TARI add constraint ID_TARA_NN check ("ID_TARA" IS NOT NULL);
alter table TARI add constraint CONTINENT_NN check ("CONTINENT" IS NOT NULL);

CREAREA TABELEI FURNIZORI


CREATE TABLE furnizori
(COD_FURNIZOR number(5) NOT NULL,
NUME_FURNIZOR varchar2(20) NOT NULL,
ADRESA varchar2(30),
EMAIL varchar2(20),
TELEFON NUMBER(10),
ID_TARA NUMBER(5));

alter table FURNIZORI add constraint FURNIZ_PK primary key (COD_FURNIZOR);


alter table FURNIZORI add constraint FURNIZ_FK foreign key (ID_TARA) references TARI
(ID_TARA) on delete set null;

CREAREA TABELEI PRODUSE


CREATE TABLE produse
(cod_art NUMBER(5) NOT NULL ,
cod_furnizor NUMBER(5) NOT NULL,
denumire VARCHAR2(30) not null,
material VARCHAR2(20),
pret_cump NUMBER(8,2));

alter table PRODUSE add constraint Prod_PK primary key (COD_ART);


alter table PRODUSE add constraint Prod_FK foreign key (COD_FURNIZOR) references FURNIZORI
(COD_FURNIZOR) ;

CREAREA TABELEI CLIENTI


CREATE TABLE clienti
(id_client
NUMBER(6) NOT NULL,
prenume_client VARCHAR2(20),
nume_client VARCHAR2(20),
telefon
VARCHAR2(20),
limita_credit NUMBER(9,2),
email_client VARCHAR2(30),
data_nastere DATE);
alter table CLIENTI add constraint CLIENTI_PK primary key (ID_CLIENT);
alter table CLIENTI add constraint LIMITA_CREDIT_MAX check (LIMITA_CREDIT <= 10000);
alter table CLIENTI add constraint NUME_NN check ("NUME_CLIENT" IS NOT NULL);
alter table CLIENTI add constraint PRENUME_NN check ("PRENUME_CLIENT" IS NOT NULL);
5

CREAREA TABELEI COMENZI

CREATE TABLE comenzi


(nr_comanda NUMBER(5) not null,
data
DATE,
modalitate VARCHAR2(20),
id_client NUMBER(6),
stare_comanda VARCHAR2(20));
alter table COMENZI add constraint NR_COMANDA_PK primary key (NR_COMANDA);
alter table COMENZI add constraint ID_CLIENT_FK foreign key (ID_CLIENT)
references CLIENTI (ID_CLIENT) on delete set null;
alter table COMENZI add constraint DATA_NN check ("DATA" IS NOT NULL);
alter table COMENZI add constraint ID_CLIENT_NN check ("ID_CLIENT" IS NOT NULL);
alter table COMENZI add constraint MODALITATE_CK check (MODALITATE in ('cash','transfer
bancar','credit'));

CREAREA TABELEI LISTA_COMENZI

create table LISTA_COMENZI


(nr_comanda NUMBER(5) not null constraint PK_LISTA primary key,
cod_art NUMBER(5) NOT NULL,
pret NUMBER(8,2),
cantitate NUMBER(8));
alter table LISTA_COMENZI add constraint LISTA_FK foreign key (COD_ART)
references PRODUSE (COD_ART);
alter table LISTA_COMENZI add constraint L_C_FK foreign key (NR_COMANDA)
references COMENZI (NR_COMANDA) on delete cascade;

Sa se restrictioneze valorile pe care le poate lua campul data din tabela COMENZI, astfel incat
anul sa fie mai mare de 2000.
alter table COMENZI add constraint DATA_CK check (extract (year from data)>2000);

Sa se modifice numele tabelei PRODUSE in ART_MOBILIER


alter table PRODUSE rename to ART_MOBILIER;

Sa se introduca date in tabela TARI


insert into TARI values('101','OLANDA','EUROPA');
insert into TARI values('102','ITALIA','EUROPA');
insert into TARI values('103','SPANIA','EUROPA');
insert into TARI values('104','PORTUGALIA','EUROPA');
insert into TARI values('105','FRANTA','EUROPA');
insert into TARI values('106','AUSTRIA','EUROPA');
insert into TARI values('107','GRECIA','EUROPA');
insert into TARI values('108','BELGIA','EUROPA');
insert into TARI values('109','ANGLIA','EUROPA');
insert into TARI values('110','SUEDIA','EUROPA');
insert into TARI values('111','INDIA','ASIA');
insert into TARI values('112','CHINA','ASIA');
insert into TARI values('113','JAPONIA','ASIA');
insert into TARI values('114','SUA','AMERICA');
insert into TARI values('115','MEXIC','AMERICA');
insert into TARI values('116','COLUMBIA','AMERICA');
insert into TARI values('117','VENEZUELA','AMERICA');
insert into TARI values('118','GERMANIA','EUROPA');
insert into TARI values('119','CANADA','AMERICA');

Sa se introduca date in tabela CLIENTI


insert into CLIENTI values (130, 'MARIA', 'IORGA', null, 600, 'iorga.maria@yahoo.com' , to_date('2103-1978', 'dd-mm-yyyy'));
insert into CLIENTI values (131, 'OCTAVIAN', 'MARIN', 0723456273, 1000,
'marin.octavian@yahoo.com', to_date('02-07-1977', 'dd-mm-yyyy'));
insert into CLIENT values (132, 'MIHAI', 'MIHAILA', 0762134516, 550, mihaila.mihai@yahoo.com',
to_date('11-10-1981', 'dd-mm-yyyy'));
insert into CLIENTI values (133, 'BOGDAN', 'NASTASE', 0745167890, 760,
'nastase.bogdan@yahoo.com', to_date('15-05-1985', 'dd-mm-yyyy'));
insert into CLIENTI values (134, 'IOANA', 'IONESCU', null, 1200, 'ionescu.ioana@yahoo.com',
to_date('21-07-1980', 'dd-mm-yyyy'));
insert into CLIENTI values (135, 'COSMINA', 'PETRESCU', 0762681341, 900,
'petrescu.cosmina@yahoo.com', to_date('09-12-1979', 'dd-mm-yyyy'));
insert into CLIENTI values (136, 'VLAD', 'SOIMAN', 0754123875, 1500, 'soiman.vlad@yahoo.com',
to_date('13-12-1988', 'dd-mm-yyyy'));
insert into CLIENTI values (137, 'ALEXANDRU', 'VASILE', 0723411325, 950,
'vasile.alexandru@yahoo.com', to_date('09-08-1977', 'dd-mm-yyyy'));
insert into CLIENTI values (138, 'DANA', 'MIHAILA', 0742179367, 1300, 'mihaila.dana@yahoo.com',
to_date('09-12-1984', 'dd-mm-yyyy'));
insert into CLIENTI values (139, 'IONUT', 'RADU', 0762168134, 900, 'radu.ionut@yahoo.com',
to_date('08-08-1988', 'dd-mm-yyyy'));
insert into CLIENTI values (140, 'ALEXANDRA', 'MARIN', 0721134753, 1700,
'marin.alexandra@yahoo.com', to_date('19-05-1984', 'dd-mm-yyyy'));
insert into CLIENTI values (141, 'ANDREEA', 'BURCEA', 0722178753, 790,
'burcea.andreea@yahoo.com', to_date('17-02-1986', 'dd-mm-yyyy'));
insert into CLIENTI values (142, 'OANA', 'IONESCU', 072134753, 670, 'ionescu.oana@yahoo.com',
to_date('27-05-1985', 'dd-mm-yyyy'));
insert into CLIENTI values (143, 'MIHAI', 'ANDREESCU', 0741179753, 950,
'andreescu.mihai@yahoo.com', to_date('31-01-1986', 'dd-mm-yyyy'));
insert into CLIENTI values (144, 'MIRCEA', 'VASILE', 0721347153, 1700, 'vasile.mircea@yahoo.com',
to_date('19-07-1986', 'dd-mm-yyyy'));
insert into CLIENTI values (145, 'ROBERT', 'IONESCU', 0745213721, 840,
'ionescu.robert@yahoo.com', to_date('11-12-1981', 'dd-mm-yyyy'));

10

Sa se introduca date in tabela COMENZI


insert into COMENZI values (1001, to_date('17-08-2005', 'dd-mm-yyyy'), 'cash', 131, 'efectuata');
insert into COMENZI values (1002, to_date('23-12-2005', 'dd-mm-yyyy'), 'credit', 144, 'efectuata');
insert into COMENZI values (1003, to_date('24-12-2005', 'dd-mm-yyyy'), 'cash', 132, 'efectuata');
insert into COMENZI values (1004, to_date('12-02-2006', 'dd-mm-yyyy'), 'cash', 131, 'efectuata');
insert into COMENZI values (1005, to_date('23-03-2006', 'dd-mm-yyyy'), 'transfer bancar', 135,
'efectuata');
insert into COMENZI values (1006, to_date('17-04-2006', 'dd-mm-yyyy'), 'cash', 133, 'efectuata');
insert into COMENZI values (1007, to_date('24-05-2006', 'dd-mm-yyyy'), 'cash', 131, 'efectuata');
insert into COMENZI values (1008, to_date('08-08-2006', 'dd-mm-yyyy'), 'credit', 137, 'efectuata');
insert into COMENZI values (1009, to_date('17-08-2006', 'dd-mm-yyyy'), 'cash', 131, 'efectuata');
insert into COMENZI values (1010, to_date('17-12-2006', 'dd-mm-yyyy'), 'transfer bancar', 142,
'efectuata');
insert into COMENZI values (1011, to_date('25-04-2007', 'dd-mm-yyyy'), 'cash', 142, 'efectuata');
insert into COMENZI values (1012, to_date('30-09-2007', 'dd-mm-yyyy'), 'credit', 145, 'efectuata');
insert into COMENZI values (1013, to_date('19-01-2008', 'dd-mm-yyyy'), 'cash', 142, 'efectuata');
insert into COMENZI values (1014, to_date('17-03-2008', 'dd-mm-yyyy'), 'credit', 137, 'efectuata');
insert into COMENZI values (1015, to_date('23-07-2008', 'dd-mm-yyyy'), 'transfer bancar', 131,
'efectuata');
insert into COMENZI values (1016, to_date('17-10-2008', 'dd-mm-yyyy'), 'cash', 145, 'in asteptare');
insert into COMENZI values (1017, to_date('24-10-2008', 'dd-mm-yyyy'), 'credit', 131, 'efectuata');
insert into COMENZI values (1018, to_date('14-11-2008', 'dd-mm-yyyy'), 'credit', 142, 'in asteptare');
insert into COMENZI values (1019, to_date('23-11-2008', 'dd-mm-yyyy'), 'cash', 145, 'efectuata');
insert into COMENZI values (1020, to_date('30-11-2008', 'dd-mm-yyyy'), 'cash', 136, 'in asteptare');
insert into COMENZI values (1021, to_date('10-12-2008', 'dd-mm-yyyy'), 'credit', 133, 'in asteptare');
insert into COMENZI values (1022, to_date('18-12-2008', 'dd-mm-yyyy'), 'cash', 145, 'in asteptare');

11

insert into COMENZI values (1023, to_date('22-12-2008', 'dd-mm-yyyy'), 'transfer bancar', 136, 'in
asteptare');
insert into COMENZI values (1024, to_date('4-02-2009', 'dd-mm-yyyy'), 'credit', 144, 'in asteptare');
insert into COMENZI values (1025, to_date('7-01-2009', 'dd-mm-yyyy'), 'cash', 140, 'in asteptare');

Sa se introduca date in tabela FURNIZORI


insert into FURNIZORI values (2001, 'AVILA', 'STR. Revolutiei', 'avila@yahoo.com',null,101);
insert into FURNIZORI values (2002, 'MOBEXPERT', 'STR. LIBERTATII',
'mobexpert@yahoo.com',07243676,115);
insert into FURNIZORI values (2003, 'KIKA', 'STR. EROIILOR', 'kika@yahoo.com',0756961778,115);
insert into FURNIZORI values (2004, 'ECO', 'STR. M.BROWN', 'eco@yahoo.com',0732444680,113);
insert into FURNIZORI values (2005, 'MOBFAN', 'STR. LIBERTY',
'mobfan@yahoo.com',079057685,114);

12

insert into FURNIZORI values (2006, 'INVESTGROUP', 'STR. DUST',


'investgroup@yahoo.com',null,110);
insert into FURNIZORI values (2007, 'PRACTIKER', 'STR. Elizabeth',
'practiker@yahoo.com',012376586,102);
insert into FURNIZORI values (2008, 'HOME', 'STR. Peace', 'home@yahoo.com',076423311,115);
insert into FURNIZORI values (2009, 'DREAM HOUSE', 'STR. Blue',
'dream.house@yahoo.com',null,107);
insert into FURNIZORI values (2010, 'M-STORE', 'STR. Life', 'm.store@yahoo.com',null,117);

Sa se introduca date in tabela PRODUSE


insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3001, 2001, 'canapea extensibila', 'piele',915 );
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3002, 2002, 'pat 1pers', 'lemn',220 );
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3003, 2003, 'pat 2pers etajat', 'lemn',250 );
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3004, 2004, 'pat 2pers', 'metal', 345 );
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3005, 2005, 'canapea extensibila', 'material textil' ,235 );
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3006, 2006, 'scaun cu spatar', 'lemn' ,110 );
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3007, 2007, 'fotoliu', 'piele',245 );
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3008, 2007, 'fotoliu', 'material textil', 190 );
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3009, 2008, 'pat 2pers', 'metal' ,295 );
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3010, 2009, 'pat 1pers', 'lemn', 215 );

13

insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)


values (3011, 2010, 'scaun cu spatar', 'metal',135 );
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3012, 2010, 'canapea', 'piele',720 );
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3013, 2010, 'masa bucatarie', 'lemn', 190);
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3014, 2010, 'sifonier', 'lemn' ,245);
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3015, 2001, 'canapea', 'material textil', 235 );
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3016,2008,masa bucatarie,sticla,230);
insert into PRODUSE (COD_ART, COD_FURNIZOR, DENUMIRE,MATERIAL, PRET_CUMP)
values (3017,2008,birou,lemn,260);

Sa se introduca date in tabela LISTA_COMENZI


insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1001, 3001,1100, 2);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1002, 3003, 900, 1);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1003, 3010, 300, 1);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1004, 3008, 250, 3);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1012, 3001, 1150, 1);
14

insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)


values (1006, 3013, 240, 1);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1013, 3001, 1058, 1);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1008, 3005, 330, 1);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1009, 3009, 348, 1);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1010, 3012, 934, 1);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1011, 3011, 150, 4);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1015, 3006, 130, 8);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1014, 3005, 300, 1);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1019, 3002, 255,1);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1022, 3012, 900, 1);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1023, 3008, 220, 3);
insert into LISTA_COMENZI (NR_COMANDA, COD_ART, PRET, CANTITATE)
values (1025, 3017, 310, 1);

15

Sa se creeze o noua tabela PROD1 cu aceeasi structura cu a tabelei PRODUSE care sa contina
informatii despre produsele de la furnizorul cu codul 2010.
create table PROD1 as select * from PRODUSE where cod_furnizor=2010;

Sa se creeze o tabele PROD2 cu aceeasi structura ca a tabelei PRODUSE.Apoi sa se insereze


produsele cu preturi cuprinse intre 100 si 500
create table PROD2 as select * from PRODUSE where 2=3;
insert into PROD2 select * from PRODUSE where PRET_CUMP between 100 and 500;

16

Sa se elimine restrictia conform careia prenumele clientilor nu tb sa fie nul, din tabela CLIENTI.
alter table CLIENTI drop constraint PRENUME_NN;

Sa se adauge o noua coloana Stoc la tabela produse


alter table produse add stoc number(20);

Sa se stearga coloana STOC din tabela PRODUSE


alter table PRODUSE drop column stoc;

17

Sa se modifice campul id_furnizor din tabela PRODUSE pentru articolul cu codul 3004
atribuindu-i valoarea 2005
update PRODUSE set COD_FURNIZOR=2005 where COD_ART=3004;

Sa se modifice campul data din tabela PRODUSE cu data actuala pentru cele din anul 2009
update COMENZI set data=sysdate where extract(year from data)=2009;

18

Sa se modifice campurile pret si cantitate din tabele LISTA_COMENZI pentru


nr_comanda=1001 si 1004, astfel incat pretul sa creasca cu 10% iar cantitatea sa scada cu 1
update LISTA_COMENZI
set PRET=PRET*1.1, CANTITATE=CANTITATE-1
where NR_COMANDA in (1001,1004);

19

Sa se modifice campul stare_comanda in "efectuata" din tabela COMENZI pentru inregistrarile


mai vechi de 2007
update COMENZI set STARE_COMANDA='efectuata' where extract(year from data)<2007;

Sa se actualizeze pretul produselor cu pretul si materialul produsului de cod 3003 numai pentru
produsele comandate in cantitate mai mare de 2.
update PRODUSE
set (pret_cump,material)=( select pret_cump,material
from PRODUSE
where cod_art=3003)

20

where cod_art in (select cod_art


from LISTA_COMENZI
where cantitate>=2);

Sa se actualizeze limita_credit a clientului cu numele Soiman cu cea a clientului cu id-ul 137.


update CLIENTI
set LIMITA_CREDIT=( select LIMITA_CREDIT
from CLIENTI
where ID_CLIENT=137)
where upper(NUME_CLIENT)='SOIMAN';

21

Sa se stearga datele din tabela LISTA_COMENZI pentru inregistrarile solicitate in cantitate mai
mare sau egala cu 3 si care au minim 3 luni de la data comandarii.
delete from LISTA_COMENZI
where cantitate>=4 and nr_comanda in (select nr_comanda from comenzi where
months_between(sysdate,data)>=3);

22

Sa se actualizeze tabela PROD2 astfel incat pret_cump sa fie egal cu pret mediu din tabela
LISTA_COMENZI. Apoi sa se realizeze o actualizare prin comparatie intre tabela PROD2 si
PRODUSE astfel incat cele doua tabele sa contina date identice.
update PROD2 set pret_cump=( select avg(pret) from LISTA_COMENZI);
merge into PROD2
using PRODUSE
on (PROD2.cod_art=PRODUSE.cod_art)
when matched then update
set PROD2.pret_cump=PRODUSE.pret_cump
when not matched then insert
(prod2.pret_cump,prod2.cod_art,prod2.cod_furnizor,prod2.denumire,prod2.material)
values (produse.pret_cump,produse.cod_art,produse.cod_furnizor,produse.denumire,produse.material) ;

23

Sa se afiseze produsele si cantitatile comandate din fiecare produs.


select p.cod_art,p.denumire,p.material,c.cantitate
from lista_comenzi c, produse p
where p.cod_art=c.cod_art;

Sa se afiseze produsele comandate si cantitatile lor, impreuna cu produsele


necomandate,ordonate dupa denumire.
Select p.cod_art,p.denumire,lc.cantitate,p.pret_cump
From produse p,lista_comenzi lc
Where p.cod_art=lc.cod_art(+)
order by p.denumire ;

24

Sa se regaseasca produsele a caror comanda are valoarea cuprinsa intre 800 si 2000.
SELECT p.denumire, lc.pret*lc.cantitate valoare
FROM produse p, lista_comenzi lc
WHERE p.cod_art=lc.cod_art AND lc.pret*lc.cantitate BETWEEN 800 AND 2000;

Sa se selecteze furnizorii care sunt din aceeasi tara cu furnizorul 'HOME'.


SELECT *
FROM furnizori
WHERE id_tara=
( SELECT id_tara FROM furnizori WHERE upper(nume_furnizor)='HOME');

Sa se afiseze valoarea totala a comenzilor din anul 2008.


SELECT sum(lc.pret*lc.cantitate) valoare_totala
FROM lista_comenzi lc, comenzi c
WHERE lc.nr_comanda=c.nr_comanda AND extract(year from data)=2008;

Sa se afiseze cantitatea din fiecare articol comandat.


SELECT cod_art,avg(cantitate)
FROM lista_comenzi
GROUP BY cod_art

25

ORDER BY avg(cantitate);

Sa se afiseze numai comenzile care au valoarea intre 100 si 1000 ordonate descrescator dupa
valoare.
SELECT comenzi.nr_comanda, sum(pret*cantitate)
FROM comenzi, lista_comenzi
WHERE comenzi.nr_comanda=lista_comenzi.nr_comanda
GROUP BY comenzi.nr_comanda
HAVING sum(pret*cantitate) BETWEEN 100 AND 1000
ORDER BY sum(pret*cantitate) desc;

Sa se afiseze denumirea si materialul articolelor care nu au fost comandate;


SELECT ' ARTICOLUL '||denumire|| ' din '|| material ||' nu a fost comandat'
FROM produse
WHERE cod_art NOT IN (SELECT cod_art FROM lista_comenzi);

26

Sa se afiseze furnizorii din continentele al caror nume incepe cu litera A.


SELECT furnizori.nume_furnizor,tari.continent
FROM furnizori,tari
WHERE furnizori.id_tara=tari.id_tara AND substr(continent,1,1)='A';

Sa se afiseze comenzile incheiate in 2005. Se va rotunji data la prima zi din luna corespunzatoare
daca data este in prima jumatatea a lunii sau la prima zi din luna urmatoare.
SELECT nr_comanda, data, round(data, 'month') data_aproximata
FROM comenzi
WHERE extract(year from data)=2005;

Sa se afiseze perioada de timp corespunzatoare(in saptamani) intre data incheierii celei mai
valoroase comenzi si data curenta.
SELECT c.nr_comanda, round((sysdate-c.data)/7), lc.pret*lc.cantitate
FROM comenzi c,lista_comenzi lc
WHERE c.nr_comanda=lc.nr_comanda AND lc.pret*lc.cantitate=(SELECT MAX(pret*cantitate)
FROM lista_comenzi);

27

Sa se calculeze diferit stocul pt plante astfel: daca este din lemn stocul este de 1500, daca esti
din sticla stocul e de 100, iar daca e din metal stocul este de 2000.
SELECT p.cod_art,p.denumire,
DECODE (lower(p.material),'lemn',1500,'sticla',100, 'metal',2000,0) stoc
FROM produse p;

Sa se clasifice produsele in functie de pretul lor astfel:daca pretul este mai mic de 150 atunci este
ieftin,daca pretul este intre 150 si 300 atunci este considerat mediu, daca pretul este intre 300 si
1200 atunci este considerat scump;
select p.cod_art,p.denumire,p.pret_cump,
case
when pret<150 then 'ieftin'
when pret>150 and pret<=300 then 'mediu'
when pret>300 and pret<=1200 then 'scump'
else '' end valoare
from produse p, lista_comenzi lc where p.cod_art=lc.cod_art;

28

Sa se afiseze furnizorii din continentul Europa dar fara cei care produc articole din lemn.
SELECT f.cod_furnizor,f.nume_furnizor
FROM furnizori f,tari t
WHERE f.id_tara=t.id_tara AND lower(continent)='europa'
MINUS
SELECT f.cod_furnizor,f.nume_furnizor
FROM furnizori f, produse p
WHERE p.cod_furnizor=f.cod_furnizor AND lower(p.material)='lemn';

Sa se afis denumirea produselor, valoarea totala comandata si nr de comenzi pentru produsele


comandate de cel putin 2 ori si care au valoarea diferita de 1500 ,1000 si 2000.
SELECT p.denumire, sum(l.pret*l.cantitate), count(nr_comanda)
FROM produse p, lista_comenzi l
WHERE p.cod_art=l.cod_art
GROUP BY p.denumire
HAVING count(nr_comanda)>=2
INTERSECT
SELECT p.denumire, sum(l.pret*l.cantitate), count(nr_comanda)
FROM produse p, lista_comenzi l
WHERE p.cod_art=l.cod_art
GROUP BY p.denumire
HAVING sum(l.pret*l.cantitate) NOT IN (1000,1500,2000);

29

Sa se afiseze clientii care au limita de credit intre 0-600, cei care au limita intre 700-950 si cei
care au limita de credit peste 1000.
SELECT nume_client,prenume_client,id_client,limita_credit
FROM clienti
WHERE limita_credit<=600
UNION
SELECT nume_client,prenume_client,id_client, limita_credit
FROM clienti
WHERE limita_credit >=700 AND limita_credit<=950
UNION
SELECT nume_client,prenume_client,id_client, limita_credit
FROM clienti
WHERE limita_credit>=1000;

Sa se afiseze comenzile din 2008 ,modul de plata,starea_comenzii si id-ul clientului care a facut
comanda.
SELECT c.nr_comanda,c.data,c.modalitate,c.stare_comanda,cl.id_client
FROM comenzi c, clienti cl
WHERE cl.id_client=c.id_client and extract(year from data)=2008;

30

Sa se realizeze o tabela virtuala care sa contina numai furnizorii din continentul Europa.
CREATE VIEW furnizori_v
AS
SELECT * FROM furnizori
WHERE id_tara IN ( SELECT id_tara FROM tari WHERE upper(continent)='EUROPA');

Sa se realizeze o tabela virtuala cu comenzile din 2008


CREATE VIEW comenzi_vw
AS
SELECT comenzi.*
FROM comenzi
WHERE to_char( 'YYYY',comenzi.data)='2009';

31

Sa se afiseze datele din tabela virtuala furnizori_v.


select * from furnizori_v;

Sa se stearga tabela virtuala furnizori_v


drop view furnizori_v;

Sa se creeze un index pt tabela clienti pe coloana nume_client.


CREATE INDEX cl_nume_idx ON clienti(nume_client);

Sa se stearga indexul cl_nume_idx.


DROP INDEX cl_nume_idx;

Sa se creeze o secventa pentru asigurarea unicitatii cheii primare din tabela comenzi.
CREATE SEQUENCE seq_nr_comanda
START WITH 1001
INCREMENT BY 1
MAXVALUE 20000 NOCYCLE;

32

Sa se modifice pasul de incrementare pt secventa seq_nr_comnda.


ALTER sequence SEQ_nr_comanda INCREMENT BY 2;

Sa se vizualizeze informatiile despre secventele utilizatorilor.


SELECT * FROM user_sequences;

Sa se stearga secventa seq_nr_comanda.


DROP SEQUENCE seq_nr_comanda;

Sa se creeze un sinonim pentru tabela produse


CREATE PUBLIC SYNONYM art_de_mobilier FOR PRODUSE;
Sa se creeze un sinonim pt tabela tari
CREATE PUBLIC SYNONYM tari_exportatoare FOR TARI ;
Sa se vizualizeze sinonimele.
SELECT * FROM user_synonyms;
Sa se stearga sinonimul creat.
DROP SYNONYM art_de_mobilier ;
Sa se stearga toate tabelele
DROP TABLE PRODUSE CASCADE CONSTRAINTS;
DROP TABLE LISTA_COMENZI CASCADE CONSTRAINTS;
DROP TABLE COMENZI CASCADE CONSTRAINTS;
DROP TABLE CLIENTI CASCADE CONSTRAINTS;
DROP TABLE FURNIZORI CASCADE CONSTRAINTS;
33

DROP TABLE TARI CASCADE CONSTRAINTS;

34

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