Sunteți pe pagina 1din 17

PROIECT

BAZE DE DATE

Bitca Teodor Valentin

Grupa 1025, Seria A, An II

Definirea schemei bazei de date tabele (minim 4) cu legturi i alte


restrictii de integritate (CREATE TABLE), populate (INSERT).
create table furnizori(
cod_furniz varchar2(5),
nume_furniz varchar2(20),
tara_furniz varchar2(12),
constraint furnizori_pk primary key(cod_furniz));

create table produse(


cod_prod varchar2(5),
den_prod varchar2(35),
cod_furniz varchar2(5),
pret_intrare number(12,4),
pret_iesire number(12,4),
stoc number(12,4),
constraint produse_pk primary key(cod_prod),
constraint produse_furnizori_fk foreign key(cod_furniz) references furnizori);

create table clienti(


cod_client varchar2(5),
nume_client varchar2(30),
localit_client varchar2(15),
data_n date,
constraint clienti_pk primary key(cod_client));

create table comenzi(


cod_comanda varchar2(5),
cod_client varchar2(5),
data_comanda date,
data_livrare date,
constraint comenzi_pk primary key(cod_comanda),
constraint comenzi_clienti_fk foreign key(cod_client) references clienti);

create table rindc(


cod_comanda varchar2(5),
cod_prod varchar2(5),
nr_prod number(3) not null,
constraint rindc_pk primary key(cod_comanda,cod_prod),
constraint rindc_comenzi_fk foreign key(cod_comanda) references comenzi,
constraint rindc_produse_fk foreign key(cod_prod) references produse);

FURNIZORI
COD_FURNIZ

NUME_FURNIZ TARA_FURNIZ

PRODUSE
COD_PROD DEN_PROD COD_FURNIZ PRET_INTRARE PRET_IESIRE STOC

CLIENTI
COD_CLIENT NUME_CLIENT

LOCALIT_CLIENT DATA_N

COMENZI
COD_COMANDA

COD_CLIENT DATA_COMANDA

RINDC
COD_COMANDA

COD_PROD

NR_PROD

DATA_LIVRARE

1.

SQL> insert into furnizori values('RIH','Riho','Olanda');


SQL> insert into furnizori values('GRO','Grohe','Germania');
SQL> insert into furnizori values('LAU','Laufen','Elvetia');
SQL> insert into furnizori values('EUROC','Euroceramica','Cehia');
SQL> insert into furnizori values('KLU','Kludi','Germania');
SQL> insert into furnizori values('JIK','Jika','Cehia');

COD_F
----RIH
GRO
LAU
EUROC
KLU
JIK

NUME_FURNIZ
-------------------Riho
Grohe
Laufen
Euroceramica
Kludi
Jika

TARA_FURNIZ
--------------Olanda
Germania
Elvetia
Cehia
Germania
Cehia

2.
SQL>
insert into produse values('001','Baterie dus','KLU','156','179,4','200');
SQL>
insert into produse values('002','Baterie cada','GRO','130','149,5','150');
SQL>
insert into produse values('003','Cuier','GRO','30','34,5','100');

SQL>
insert into produse values('004','Policioara cristal','GRO','41','47,15','10');
SQL>
insert into produse values('005','Policioara','LAU','35','39,15','70');
SQL>
insert into produse values('006','Suport prosop','JIK','37','42,25','90');
SQL>
insert into produse values('007','Cabina dus','RIH','272','312,8','0');
SQL>
insert into produse values('008','Cada hidromasaj', 'LAU', '789', '907,35','0');
SQL>
insert into produse values('009','Picior chiuveta','KLU','120','138','40');
SQL>
insert into produse values('010','Dulap mic simplu', 'EUROC', '100','115','55');
COD_P DEN_PROD
-----------------001
Baterie dus

COD_F
------KLU

PRET_INTRARE
---------------156

PRET_IESIRE
-------------179,4

STOC
---------200

002

Baterie cada

GRO

130

149,5

003

Cuier

GRO

30

34,5

004

Policioara cristal

41

47,15

10

005

Policioara

LAU

35

39,15

70

006

Suport prosop

JIK

42,25

90

007

Cabina dus

RIH

272

312,8

008

Cada hidromasaj

LAU

789

907,35

009

Picior chiuveta

KLU

120

138

40

010

Dulap mic simplu

100

115

55

GRO

EUROC

37

150
100

3.
SQL>
insert into clienti values('1','Anghelmob SA','Iasi',to_date('11091959','ddmmyyyy'));

SQL>
insert into clienti values('2','Ilia SA','Brasov',to_date('20051967','ddmmyyyy'));
SQL>
insert into clienti values('3','Heraa SA','Bucuresti',to_date('07091977','ddmmyyyy'));
SQL>
insert into clienti values('4','Romdor SA','Focsani',to_date('19121964','ddmmyyyy'));

SQL>
insert
into
clienti
'ddmmyyyy'));

values

SQL>
insert
into
clienti
'ddmmyyyy'));

values('6','Toader

SQL>
insert
into
'ddmmyyyy'));

clienti

SQL>
insert
into
clienti
'ddmmyyyy'));
COD_C
----1
2
3
4
5
6
7
8

('5','Gavan

Constantin','Iasi',to_date('10021958',

Adelina','Bucuresti',to_date('17041978',

values('7','Badea

Bogdan','Calarasi',to_date('25061966',

values('8','Radulescu

Maria','Bucuresti',to_date('25081974',

NUME_CLIENT
----------------------Anghelmob SA
Ilia SA
Heraa SA
Romdor SA
Gavan Constantin
Toader Adelina
Badea Bogdan
Radulescu Maria

LOCALIT_CLIENT
---------------------Iasi
Brasov
Bucuresti
Focsani
Iasi
Bucuresti
Calarasi
Bucuresti

DATA_N
------------------11-09-1959
20-05-1967
07-09-1977
19-12-1964
10-02-1958
17-04-1978
25-06-1966
25-08-1974

4.
SQL>
insert into comenzi values('1','1',to_date ('240406','ddmmyy'), to_date('020506',
'ddmmyy'));
SQL>
insert into comenzi
'ddmmyy'));

values('2','5',to_date('190506','ddmmyy'),

to_date('280506',

SQL>
insert into comenzi
'ddmmyy'));

values('3','6',to_date('190506','ddmmyy'),

to_date('260506',

SQL>
insert into comenzi
'ddmmyy'));

values('4','3',to_date('210706','ddmmyy'),

to_date('300706',

SQL>
insert into comenzi
'ddmmyy'));

values('5','8',to_date('151006','ddmmyy'),

to_date('251006',

SQL>
insert into comenzi
'ddmmyy'));

values('6','6',to_date('171106','ddmmyy'),

to_date('201106',

COD_CO COD_C DATA_COMAN


----------------- -----------------1
1
24-04-2006
2
5
19-05-2006
3
6
19-05-2006
4
3
21-07-2006
5
8
15-10-2006
6
6
17-11-2006
5.

DATA_LIVRA
---------------02-05-2006
28-05-2006
26-05-2006
30-07-2006
25-10-2006
20-11-2006

SQL> insert into rindc values('1','003','7');


SQL> insert into rindc values('1','006','10');
SQL> insert into rindc values('2','010','6');
SQL> insert into rindc values('3','007','1');
SQL> insert into rindc values('4','005','9');
SQL> insert into rindc values('4','003','9');
SQL> insert into rindc values('5','007','7');
SQL> insert into rindc values('6','001','5');
COD_C COD_P NR_PROD
--------- --------- ------------1
003
7
1
006
10

2
3
4
4
5

010
007
005
003
007

6
1
9
9
7

5 exemple variate cu ALTER TABLE, pe coloane i pe restricii.


1. In tabela PRODUSE, sa se aloce pentru campul cod_prod
doar 3 caractere, in loc de 5
SQL>
alter table produse modify(cod_prod varchar2(3));

2. Sa se adauge in tabela FURNIZORI coloana cont_bancar


SQL>
alter table furnizori add(cont_bancar varchar2(5));

3. Sa se stearga din tabela


anterior(cont_bancar)

FURNIZORI

coloana

SQL>
alter table furnizori drop column cont_bacar;

4. Sa se dezactiveze cheia primara a tabelei RINDC


SQL>
alter table rindc disable constraint rindc_pk;

5. Sa se reactiveze cheia primara a tabelei RINDC


SQL>
alter table rindc enable constraint rindc_pk;

creata

5 exemple variate cu operaiile de actualizare a datelor (comenzile DML


UPDATE, DELETE, [MERGE] pentru nregistrari).
1. Sa se stearga din tabela PRODUSE produsele furnizate de
firma Kludi (cod KLU)
alter table rindc disable constraint rindc_produse_fk;
delete from produse where cod_furniz=KLU;
[alter table rindc enable constraint rindc_produse_fk;]
2. Sa se stearga clientii din Iasi si Focsani
alter table comenzi disable constraint comenzi_clienti_fk;
delete from clienti where localit_client in(`Iasi`,`Focsani`);
[alter table comenzi enable constraint comenzi_clienti_fk;]
3. Sa se mareasca preturile de iesire ale tuturor produselor cu
2%
update produse set pret_iesire=pret_iesire*1.02;
4. Sa se maresca stocul cu cate 5 produse pentru produsele
furnizate de Grohe (cod GRO)
update produse set stoc=stoc+5 where cod_furniz=GRO;
5. Sa se modifice localitatea clientului Toader Adelina in Iasi

update clienti set localit_client='Iasi'


where nume_client='Toader Adelina';

Minim 15 exemple cu interogri ct mai variate (SELECT):


Utilizarea operatorilor de comparatie
Utilizarea funciilor la nivel de rnd (upper, substr, decode, case,
nvl, to_date, to_char)
Utilizarea functiilor de grup si conditii asupra acestora
GROUP BY, HAVING
Join-uri (INNER, OUTER)
Utilizarea operatorilor UNION, MINUS, INTERSECT
Subcereri (cereri imbricate)
[Cereri ierarhice]

1. Sa se afiseze datele de livrare si localitatile in care trebuie


facute livrarile din lunile mai si iunie 2006 si sa se sorteze dupa
localitatea din care se afla clientul
SQL>
select data_livrare, localit_client from comenzi c, clienti cl
where c.cod_client=cl.cod_client
and c.data_comanda
between to_date('010506','ddmmyy') and to_date('300606','ddmmyy')
order by cl.localit_client;
DATA_LIVRA LOCALIT_CLIENT
---------------------------28-05-2006 Iasi
2. Sa se afiseze denumirea produselor si numele furnizorilor
pentru produsele cu pretul de intrare mai mare decat 100
SQL>

select den_prod, nume_furniz


from produse p, furnizori f
where p.cod_furniz=f.cod_furniz
and p.pret_intrare>100;
DEN_PROD
NUME_FURNIZ
----------------------------------- -------------------Cabina dus
Riho
Cada hidromasaj
Laufen

3. Sa se afiseze numele si codurile clientilor din Iasi


SQL>
select nume_client, cod_client
from clienti where localit_client='Iasi';
NUME_CLIENT
COD_C
------------------------------------Toader Adelina
6
4. Sa se afiseze comenzile care contin 2 produse diferite
SQL>
select cod_comanda
from rindc
group by cod_comanda
having count(*)=2;
COD_COMANDA
----1
4
5. Sa se calculeze valoarea comenzii 2 (pretul produsului al carui
cod corespunde comenzii 2)
SQL>
select pret_iesire*nr_prod as "val comanda2"
from produse p, rindc r
where p.cod_prod=r.cod_prod
and r.cod_comanda=2;

Val Comanda2
----------------------------703,8
6. Sa se calculeze de cate ori a fost comandat fiecare produs
SQL>
select cod_prod, count(*)
from rindc
group by cod_prod
order by cod_prod;

COD_P COUNT(*)
--------- ----------003
2
005
1
006
1
007
2
010
1
7. Sa se afiseze produsele care nu au fost comandate
SQL>
select den_prod
from rindc r , produse p
where r.cod_prod(+)=p.cod_prod
and r.cod_prod is null;
DEN_PROD
----------------------------------Policioara cristal
Cada hidromasaj
8. Sa se afiseze clientii nascuti in aprilie si data lor de nastere
SQL>
select nume_client, data_n
from clienti
where to_char(data_n,'mm')='04';
NUME_CLIENT
DATA_N
------------------------------ ---------Toader Adelina
17-04-1978

9. Sa se afiseze numarul de furnizori din fiecare tara


SQL>
select distinct(tara_furniz),count(*)
from furnizori
group by tara_furniz;
TARA_FURNIZ
-----------Cehia
Germania
Olanda
Elvetia

COUNT(*)
---------2
2
1
1

10. Sa se selecteze toate produsele fabricate in Germania


SQL>
select den_prod
from produse
where cod_furniz
in (select cod_furniz from furnizori where tara_furniz='Germania');
DEN_PROD
----------------------------------Cuier
Policioara cristal
11. Pentru fiecare comanda, sa se afiseze numele clientului si
localitatea in care trebuie livrata comanda
SQL>
select cod_comanda, nume_client, localit_client
from clienti cl, comenzi c
where cl.cod_client=c.cod_client
order by cod_comanda;
COD_C NUME_CLIENT
LOCALIT_CLIENT
----- ------------------------------ --------------3
Toader Adelina
Bucuresti
4
Heraa SA
Bucuresti
5
Radulescu Maria
Bucuresti
6
Toader Adelina
Bucuresti
12. Sa se afiseze produsele care au stocul 0

SQL>
select cod_prod as "Cod produs, den_prod as Denumire
from produse
where stoc='0';
13. Sa se afiseze stocul tuturor produselor comandate
SQL >
select distinct(p.cod_prod), p.den_prod, p.stoc
from produse p, rindc r
where r.cod_prod=p.cod_prod
order by cod_prod;

COD DEN_PROD
--- -------------------------------003 Cuier
005 Policioara
006 Suport prosop
007 Cabina dus
010 Dulap mic simplu

STOC
---------100
70
90
0
55

14. Sa se afiseze produsul cu cel mai mare pret de intrare


SQL>
select den_prod, pret_intrare
from produse
where pret_intrare=(select max(pret_intrare) from produse);
DEN_PROD
PRET_INTRARE
---------------------------------------------Cada hidromasaj
789

5 exemple cu gestiunea altor obiecte ale bazei de date: vederi (se pot
realiza view-uri cu cerintele de la punctul D), partiii, indeci , sinonime,
secvente.
1. Sa se realizeze o vedere care sa contina denumirea produselor,
preturile lor de iesire si furnizorii pentru fiecare produs
SQL>
create view v_produse as select den_prod,pret_iesire, nume_furniz
from produse p, furnizori f
where p.cod_furniz=f.cod_furniz;

DEN_PROD

PRET_IESIRE

NUME_FURNIZ

Cuier

35,19

Grohe

Policioara cristal

48,093

Grohe

Policioara

39,933

Laufen

Suport prosop

43,095

Jika

Cabina dus

319,056

Riho

Cada hidromasaj

925,497

Laufen

Dulap mic simplu

117,3

Euroceramica
row(s) 1 - 7 of 7

2. Sa se creeze un index la tabela PRODUSE


SQL>
create index i_produse
on produse (den_prod);
3. Sa se creeze un sinonim pentru tabela FURNIZORI
SQL>
create synonym furnizori2 for furnizori;
4. Sa se stearga sinonimul tabelei furnizori
SQL>
drop synonym firme;

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