Documente Academic
Documente Profesional
Documente Cultură
Gestiunea unui
magazin de mobil
SCHEMA CONCEPTUALA
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);
10
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');
12
13
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;
16
Sa se elimine restrictia conform careia prenumele clientilor nu tb sa fie nul, din tabela CLIENTI.
alter table CLIENTI drop constraint PRENUME_NN;
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
19
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
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
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;
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;
26
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';
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');
31
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
34