Sunteți pe pagina 1din 33

Academia de Studii Economice, Facultatea de Cibernetica, Statistica si Informatica Economica, 2010

-proiect-

Grupa 1040
Seria D
An II
Cuprins
Descrierea bazei de date............................................................................................................ 3

Schema conceptuala a bazei de date........................................................................................4

Operatii DDL............................................................................................................................... 5

CREATE TABLE...................................................................................................................... 5

ALTER TABLE......................................................................................................................... 7

DROP TABLE........................................................................................................................ 10

Operatii LMD............................................................................................................................. 11

INSERT.................................................................................................................................. 11

UPDATE................................................................................................................................ 16

DELETE................................................................................................................................. 18

Interogari................................................................................................................................... 20

SELECT................................................................................................................................. 20

Gestionarea altor obiecte ale bazei de date..............................................................................30

TABELE VIRTUALE (VIEW-uri).............................................................................................30

INDECSI................................................................................................................................ 31

SECVENTE........................................................................................................................... 31

SINONIME............................................................................................................................. 33

2
Descrierea bazei de date

Se realizeaza o aplicatie cu baze de date pentru evidenta desfasurarii activitatii


la nivelul bancilor comerciale ale unei tari.

In baza de date sunt inregistrate banci care au sau nu filiale raspandite in tara,
clientii bancilor ca si titulari de conturi si imprumuturi facute de catre acestia la filialele
bancilor respective si sunt monitorizate conturile si imprumuturile pentru a putea obtine
anumite informatii necesare utilizatorului.

Descrierea legaturilor:

- O banca poate avea mai multe filiale, dar o filiala poate fi a unei singure banci.
- O filiala poate avea deschise mai multe conturi, dar un cont nu poate fi deschis
decat la o banca.
- O filiala poate incheia mai multe contracte de imprumut, dar un imprumut poate fi
realizat doar de o filiala.
- Un titular poate detine mai multe conturi, dar un cont nu poate avea decat un
singur titular.
- Un titular poate face mai multe imprumuturi, dar un imprumut nu poate fi realizat
decat de un singur titular.
- De aici rezulta o legatura indirecta intre titulari si filialele la care se deschid conturi
sau se realizeaza imprumuturi, putand fi posibila realizarea de imprumuturi si
deschiderea de conturi la mai multe filiale in acelasi timp.

3
Schema conceptuala a bazei de date

4
Operatii DDL: CREATE TABLE, ALTER TABLE, DROP TABLE

CREATE TABLE
Sa se creeze tabelele de mai sus cu atributele definite anterior.

CREATE TABLE banci (

cod_banca VARCHAR2(7) PRIMARY KEY NOT NULL,

denumire VARCHAR2(35),

adresa VARCHAR2(30),

localitate VARCHAR2(20),

telefon VARCHAR2(15)

);

CREATE TABLE filiale (

cod_filiala VARCHAR2(10) PRIMARY KEY NOT NULL,

cod_banca VARCHAR2(7) NOT NULL REFERENCES banci (cod_banca),

den_filiala VARCHAR2(30),

adresa VARCHAR2(20),

localitate VARCHAR2(20),

telefon VARCHAR2(15)

);

5
CREATE TABLE titulari (

cod_titular NUMBER(10) PRIMARY KEY NOT NULL,

tip_titular VARCHAR2(15),

nume VARCHAR2(20),

prenume VARCHAR2(20),

cnp VARCHAR2(13),

adresa VARCHAR2(20),

localitate VARCHAR2(20),

telefon VARCHAR2(15),

email VARCHAR2(20)

);

CREATE TABLE conturi (

cod_cont VARCHAR2(24) PRIMARY KEY NOT NULL,

cod_filiala VARCHAR2(10) NOT NULL REFERENCES filiale (cod_filiala),

cod_titular NUMBER(10) NOT NULL REFERENCES titulari (cod_titular),

tip_cont VARCHAR2(10),

data_deschidere DATE,

sold NUMBER(7,2),

moneda VARCHAR2(3)

);

6
CREATE TABLE imprumuturi (

cod_imprumut NUMBER(10) NOT NULL,

cod_titular NUMBER(20) NOT NULL,

cod_filiala VARCHAR2(10) NOT NULL,

tip_imprumut VARCHAR2(15),

data_deschidere DATE,

suma NUMBER(8,2),

moneda VARCHAR2(3),

CONSTRAINT pk_titular PRIMARY KEY (cod_imprumut),

CONSTRAINT fk_titular FOREIGN KEY (cod_titular) REFERENCES titulari


(cod_titular),

CONSTRAINT fk_filiala FOREIGN KEY (cod_filiala) REFERENCES filiale


(cod_filiala)

);

ALTER TABLE
1. Adaugati o restrictie de validare coloanei ‘tip_titular’ a tabelei ‘titulari’ astfel incat sa nu
poata fi posibila introducerea altei valori decat “persoana fizica” sau “persoana juridica”

ALTER TABLE titulari

7
ADD CONSTRAINT ck_titular CHECK ( LOWER(tip_titular) IN (‘persoana
fizica’, ‘persoana juridica’));

Verificarea se face prin consultarea tabelei USER_CONSTRAINTS:

SELECT CONSTRAINT_TYPE, CONSTRAINT_NAME, STATUS

FROM USER_CONSTRAINTS

WHERE TABLE_NAME = 'TITULARI';

2. Dezactivati restrictia CK_TITULAR.

ALTER TABLE titulari DISABLE CONSTRAINT ck_titular;

Verificarea se face prin consultarea tabelei USER_CONSTRAINTS:

SELECT CONSTRAINT_TYPE, CONSTRAINT_NAME, STATUS

FROM USER_CONSTRAINTS

WHERE TABLE_NAME = 'TITULARI';

3. Adaugati campul ‘perioada’ de tip NUMBER(3) tabelei ‘imprumuturi’.

ALTER TABLE imprumuturi

ADD (perioada NUMBER(3));

8
4. Sa se adauge o restrictie de integritate pentru validarea coloanei ‘email’ a tabelei
‘titulari’.

ALTER TABLE titulari

ADD CONSTRAINT ck_email CHECK ( email LIKE ‘%@%.%’);

5. Creati o noua tabela ‘banci_tara’ care sa contina toate bancile care nu au sediul central
in Bucuresti.

CREATE TABLE banci_tara

AS SELECT * FROM banci

WHERE UPPER(localitate) <> ‘BUCURESTI’;

6. Sa se redenumeasca tabela ‘banci_tara’ in ‘outside_bucuresti’.

ALTER TABLE banci_tara

RENAME TO outside_bucuresti;

7. Dezactivati coloana ‘telefon’ a tabelei ‘outside_telefon’.

ALTER TABLE outside_bucuresti SET UNUSED COLUMN telefon;

9
DROP TABLE
8. Sa se stearga tabela ‘outside_bucuresti’.

DROP TABLE outside_bucuresti;

10
Operatii LMD: INSERT, UPDATE, DELETE

INSERT
Sa se adauge inregistrari in tabelele create.

TABELA BANCI -> Contine 11 inregistrari

INSERT INTO banci VALUES ( ‘BCR’, ‘Banca Comerciala Romana’, ’Bd. Regina nr.
24’, ’Bucuresti’, ’0214195050’);

INSERT INTO banci VALUES ( ‘ING’, ‘ING Bank’, ‘Sos. Kiseleff nr. 12’,
’Bucuresti’, ’0314003120’);

INSERT INTO banci VALUES ( ‘TRANS’, ‘Banca Transilvania’, ‘Str. George


Enescu nr. 2’, ’Cluj-Napoca’, ’02214124411’);

INSERT INTO banci VALUES ( ‘ALPHA’, ‘Alpha Bank’, ‘Str. Calea Vitan nr. 3’,
’Bucuresti’, ’0216654359’);

INSERT INTO banci VALUES ( ‘BRD’, ‘Banca Romana pentru Dezvoltare’, ‘Str.
Horatiu nr. 20’, ’Bucuresti’, ’0214536721’);

INSERT INTO banci VALUES ( ‘VOLKS’, ‘VOLKSBANK ROMANIA’, ‘Str. Mihai Bravu
nr. 10’, ’Bucuresti’, ’0314441907’);

INSERT INTO banci VALUES ( ‘PROC’, ‘ProCredit Bank’, ‘Str. Dristorului nr.
56’, ’Bucuresti’, ’0315431132’);

INSERT INTO banci VALUES ( ‘CITY’, ‘City Bank’, ‘Str. Unirii nr. 41’,
’Bucuresti’, ’0217655454’);

INSERT INTO banci VALUES ( ‘BPST’, ‘BANC POST’, ‘Str. Banu nr. 41’,
’Bucuresti’, ’0316548876’);

INSERT INTO banci VALUES ( ‘OTP’, ‘OTP BANK’, ‘Str. Miliarilor nr. 103’,
’Iasi’, ’02413247766’);

INSERT INTO banci VALUES ( ‘RBS’, ‘RBS Romania’, ‘Bd. Unirii nr. 41’,
’Brasov’, ’02374347865’);

11
TABELA FILIALE -> Contine 10 inregistrari

INSERT INTO filiale VALUES ( ‘BCRVSGRD’, ‘BCR’, ‘BCR Gardului’, ‘Str.


Gardului nr.19’, ‘Vaslui’, ‘02295467687’);

INSERT INTO filiale VALUES ( ‘BCRBUCAMZ’, ‘BCR’, ‘BCR Amzei’, ‘Str. Amzei
nr.15’, ‘Bucuresti’, ‘0213143276’);

INSERT INTO filiale VALUES ( ‘BCRCTMAR’, ‘BCR’, ‘BCR Martirilor’, ‘Str.


Martirilor nr.4’, ‘Constanta’, ‘02266748855’);

INSERT INTO filiale VALUES ( ‘BRDCJCNS’, ‘BRD’, ‘BRD Cornisor’, ‘Str.


Cornisor nr.23’, ‘Cluj-Napoca’, ‘02213241165’);

INSERT INTO filiale VALUES ( ‘BRDSVMOL’, ‘BRD’, ‘BRD Moldovei’, ‘Bd.


Moldovei nr.4’, ‘Suceava’, ‘03221543321’);

INSERT INTO filiale VALUES ( ‘BRDGALDUN’, ‘BRD’, ‘BRD Dunarii’, ‘Str.


Dunarii nr.76’, ‘Galati’, ‘02135437766’);

INSERT INTO filiale VALUES ( ‘INGBUCUNI’, ‘ING’, ‘ING Bank Unirii’, ‘Bd.
Unirii nr.1’, ‘Bucuresti’, ‘0314215647’);

INSERT INTO filiale VALUES ( ‘BPSTCLPAN’, ‘BPST’, ‘BANC POST Panduri’, ‘Str.
Panduri nr.30’, ‘Calarasi’, ‘02425465434’);

INSERT INTO filiale VALUES ( ‘BPSTBUCUNR’, ‘BPST’, ‘BANC POST Unirii’, ‘Bd.
Unirii nr.10’, ‘Bucuresti’, ‘0316764443’);

INSERT INTO filiale VALUES ( ‘OTPARTAR’, ‘OTP’, ‘OTP BANK Tarnavelor’, ‘Bd.
Tarnavelor nr.3’, ‘Arad’, ‘02415643311’);

TABELA TITULARI -> Contine 11 inregistrari

INSERT INTO titulari VALUES ( 7865564, ‘persoana fizica’, ‘Enescu’,


‘Viorel’, ‘1771211345545’, ‘Str. Cismigiu nr. 23’, ‘Bucuresti’,
‘0750643433’, ‘enescuvio@yahoo.com’);

12
INSERT INTO titulari VALUES ( 446788, ‘persoana fizica’, ‘Popescu’, ‘Ion’,
‘1871218866345’, ‘Str. Unirii nr. 55’, ‘Bucuresti’, ‘0766633343’,
‘popion@yahoo.com’);

INSERT INTO titulari VALUES ( 423534, ‘persoana fizica’, ‘Dumitrescu’,


‘Silvia’, ‘2731211734545’, ‘Str. Popa Tatu nr. 4’, ‘Bucuresti’,
‘0765222433’, ‘silviadum@yahoo.com’);

INSERT INTO titulari VALUES ( 985645, ‘persoana fizica’, ‘Visan’, ‘Viorica’,


‘2771211555445’, ‘Str. Cismigiu nr. 15’, ‘Bucuresti’, ‘0733645111’,
‘visanvio@yahoo.com’);

INSERT INTO titulari VALUES ( 356676, ‘persoana fizica’, ‘Draghici’, ‘Jean’,


‘1871211762345’, ‘Str. Babes nr. 43’, ‘Bucuresti’, ‘0756688887’,
‘dragjean@yahoo.com’);

INSERT INTO titulari VALUES ( 657689, ‘persoana fizica’, ‘Dorea’, ‘Catalin’,


‘1721211762345’, ‘Str. Titu nr. 123’, ‘Bucuresti’, ‘0765412133’,
‘doreacat@yahoo.com’);

INSERT INTO titulari VALUES ( 876854, ‘persoana fizica’, ‘Florici’,


‘Dumitru’, ‘1881211762345’, ‘Str. Libera nr. 1’, ‘Constanta’, ‘0766645433’,
‘floricdumi@yahoo.com’);

INSERT INTO titulari VALUES ( 2342356, ‘persoana fizica’, ‘Mihnea’,


‘Silvia’, ‘2801105878677’, ‘Str. Ultim nr. 33’, ‘Cluj Napoca’, ‘0721545333’,
‘ciorneaioa@gmail.com’);

INSERT INTO titulari VALUES ( 7875756, ‘persoana fizica’, ‘Ciornea’,


‘Ioana’, ‘2801105878677’, ‘Intr. Mare nr. 54’, ‘Suceava’, ‘0755656545’,
‘ciorneaioa@gmail.com’);

INSERT INTO titulari VALUES ( 2354522, ‘persoana fizica’, ‘Sandu’, ‘Dorel’,


‘1801115234537’, ‘Str. Soarelui nr. 44’, ‘Calarasi’, ‘0721333112’,
‘sandudori@yahoo.com’);

INSERT INTO titulari VALUES ( 8787333, ‘persoana fizica’, ‘Ionescu’,


‘Paula’, ‘2861210654332’, ‘Str. Gricore nr. 2’, ‘Arad’, ‘0755444656’,
‘ionescupau@yahoo.com’);

13
TABELA CONTURI -> Contine 12 inregistrari

INSERT INTO conturi VALUES ( ‘RO60INGB6712392455215222’, ‘INGBUCUNI’,


446788, ‘curent’, TO_DATE(’30-05-2002’,’DD-MM-YYYY’), 724.43, ‘RON’);

INSERT INTO conturi VALUES ( ‘RO60INGB6502182275065166’, ‘INGBUCUNI’,


446788, ‘curent’, TO_DATE(’15-06-1998’,’DD-MM-YYYY’), 47.14, ‘RON’);

INSERT INTO conturi VALUES ( ‘RO60INGB6572252335115186’, ‘INGBUCUNI’,


423534, ‘depozit’, TO_DATE(’01-10-1999’,’DD-MM-YYYY’), 405.27, ‘RON’);

INSERT INTO conturi VALUES ( ‘RO51OTPB5661341554464923’, ‘OTPARTAR’,


8787333, ‘curent’, TO_DATE(’24-12-1997’,’DD-MM-YYYY’), 156.45, ‘RON’);

INSERT INTO conturi VALUES ( ‘RO59BPST8674354136615782’, ‘BPSTBUCUNR’,


985645, ‘curent’, TO_DATE(’11-10-2000’,’DD-MM-YYYY’), 300.45, ‘RON’);

INSERT INTO conturi VALUES ( ‘RO59BPST8744424196665804’, ‘BPSTBUCUNR’,


985645, ‘curent’, TO_DATE(’22-11-1996’,’DD-MM-YYYY’), 98.32, ‘RON’);

INSERT INTO conturi VALUES ( ‘RO59BPST8814494256715825’, ‘BPSTBUCUNR’,


985645, ‘curent’, TO_DATE(’19-06-2004’,’DD-MM-YYYY’), 710.00, ‘RON’);

INSERT INTO conturi VALUES ( ‘RO68BRDB7343022995665407’, ‘BRDGALDUN’,


6562227, ‘depozit’, TO_DATE(’17-12-2003’,’DD-MM-YYYY’), 510.30, ‘RON’);

INSERT INTO conturi VALUES ( ‘RO68BRDB7623303235865485’, ‘BRDGALDUN’,


6562227, ‘curent’, TO_DATE(’01-03-2000’,’DD-MM-YYYY’), 139.40, ‘RON’);

INSERT INTO conturi VALUES ( ‘RO68BRDB7763443355965522’, ‘BRDCJCNS’,


2342356, ‘curent’, TO_DATE(’15-03-1995’,’DD-MM-YYYY’), 860.50, ‘RON’);

INSERT INTO conturi VALUES ( ‘RO55BCRB6362042154965124’, ‘BCRCTMAR’, 876854,


‘curent’, TO_DATE(’22-07-1998’,’DD-MM-YYYY’), 347.32, ‘RON’);

INSERT INTO conturi VALUES ( ‘RO68BRDB7693373295915501’, ‘BRDGALDUN’,


356676, ‘curent’, TO_DATE(’21-12-2002’,’DD-MM-YYYY’), 392.62, ‘RON’);

14
TABELA IMPRUMUTURI -> Contine 12 inregistrari

INSERT INTO imprumuturi VALUES ( 87745553, 2342356, ‘BRDCJCNS’, ‘ipotecar’,


TO_DATE(’21-10-2002’,’DD-MM-YYYY’), 35000, ‘EUR’, 120);

INSERT INTO imprumuturi VALUES ( 56778995, 2342356, ‘BRDCJCNS’, ‘nevoi


personale’, TO_DATE(’04-05-2009’,’DD-MM-YYYY’), 14000, ‘EUR’, 60);

INSERT INTO imprumuturi VALUES ( 5456778421, 7875756, ‘BRDSVMOL’, ‘nevoi


personale’, TO_DATE(’30-03-2008’,’DD-MM-YYYY’), 7000, ‘EUR’, 48);

INSERT INTO imprumuturi VALUES ( 34354677, 8787333, ‘OTPARTAR’, ‘auto’,


TO_DATE(’27-06-2007’,’DD-MM-YYYY’), 7000, ‘EUR’, 72);

INSERT INTO imprumuturi VALUES ( 6778788, 7865564, ‘BPSTBUCUNR’, ‘ipotecar’,


TO_DATE(’12-03-2005’,’DD-MM-YYYY’), 46000, ‘EUR’, 120);

INSERT INTO imprumuturi VALUES ( 145656767, 446788, ‘BPSTBUCUNR’, ‘auto’,


TO_DATE(’10-12-2008’,’DD-MM-YYYY’), 12000, ‘EUR’, 60);

INSERT INTO imprumuturi VALUES ( 135346636, 446788, ‘INGBUCUNI’, ‘ipotecar’,


TO_DATE(’22-01-2007’,’DD-MM-YYYY’), 31000, ‘EUR’, 96);

INSERT INTO imprumuturi VALUES ( 35664343, 985645, ‘INGBUCUNI’, ‘nevoi


personale’, TO_DATE(’10-11-2008’,’DD-MM-YYYY’), 16500, ‘EUR’, 48);

INSERT INTO imprumuturi VALUES ( 345565235, 356676, ‘BCRVSGRD’, ‘nevoi


personale’, TO_DATE(’13-05-2009’,’DD-MM-YYYY’), 10000, ‘EUR’, 36);

INSERT INTO imprumuturi VALUES ( 24345563, 356676, ‘BCRVSGRD’, ‘ipotecar’,


TO_DATE(’18-09-2007’,’DD-MM-YYYY’), 42500, ‘EUR’, 120);

INSERT INTO imprumuturi VALUES ( 43453542, 356676, ‘INGBUCUNI’, ‘auto’,


TO_DATE(’28-07-2008’,’DD-MM-YYYY’), 17000, ‘EUR’, 48);

15
UPDATE
1. Sa se adauge 3% din soldul actual tuturor celor care au conturi deschise inainte de
12 martie 2000 la bancile ING si BRD.

UPDATE conturi SET sold = sold*1.03

WHERE data_deschidere < TO_DATE(’12-03-2000’,’DD-MM-YYYY’) AND

cod_filiala IN (

SELECT cod_filiala FROM filiale

WHERE cod_banca IN (‘ING’,’BRD’)

);

2. Cu ocazia zilei de 8 martie, bancile OTP Bank si BANCPOST ofera o crestere de


5% tuturor conturilor detinute de femei. Sa se realizeze aceasta modificare asupra
baza de date.

UPDATE conturi SET sold = sold*1.05

WHERE cod_filiala IN (

SELECT cod_filiala FROM filiale

WHERE cod_banca IN (‘ING’,’BRD’)

) AND cod_titular IN ( SELECT cod_titular FROM titulari

WHERE SUBSTR(cnp,1,1) = 2);

16
3. Sa se scada cu 10% valoarea imprumutului acordat titularilor care au incheiat
contractul de imprumut pe cel putin 90 de luni.

UPDATE imprumuturi SET suma = suma – 0.1*suma

WHERE perioada > 90;

4. Sa se mareasca cu 15% soldul acelor conturi care au soldul mai mic decat media
soldurilor tuturor conturilor curente.

UPDATE conturi SET sold = sold*1.15

WHERE sold < (SELECT AVG(sold) FROM conturi

WHERE tip_cont = ‘curent’);

17
5. Sa se modifice soldul contului detinut de titularul cu codul 423534 cu soldul contului
detinut de titularul cu codul 876854.

UPDATE conturi SET sold = ( SELECT sold FROM conturi

WHERE cod_titular = 876854)

WHERE cod_titular = 423534;

DELETE
1. Sa se creeze o noua tabela numita ‘banci_temp’ care va contine toate bancile cu
sediul central in bucuresti, dupa care se vor sterge bancile care nu au nici o filiala
inregstrata in tabela ‘filiale’.

CREATE TABLE banci_temp AS

SELECT * FROM banci WHERE

UPPER(localitate) = ‘BUCURESTI’;

18
DELETE FROM banci_temp

WHERE cod_banca NOT IN (SELECT cod_banca FROM filiale);

19
INTEROGARI
SELECT

1. Sa se afiseze titularii care au conturi la banca ING.

SELECT t.cod_titular, t.nume, t.prenume, c.cod_cont, f.den_filiala

FROM titulari t, conturi c, filiale f

WHERE t.cod_titular = c.cod_titular

AND c.cod_filiala = f.cod_filiala

AND f.cod_banca = ‘ING’;

2. Sa se afiseze doar imprumuturile de tipul ‘nevoi personale’.

SELECT i.cod_imprumut, t.nume, i.tip_imprumut, i.suma

FROM imprumuturi i, titulari t

WHERE i.cod_titular = t.cod_titular

AND i.tip_imprumut = ‘nevoi personale’;

3. Sa se afiseze titularii care au facut imprumuturi cat si cei care nu au un imprumut.

SELECT t.cod_titular, t.nume, COUNT(i.cod_imprumut) “NUMAR IMPRUMUTURI”

FROM imprumuturi i, titulari t

20
WHERE t.cod_titular = i.cod_titular(+)

GROUP BY t.cod_titular, t.nume;

4. Sa se afiseze conturile care au fost deschise dupa deschiderea contului


RO51OTPB5661341554464923.

SELECT cod_cont, cod_titular, data_deschidere, sold

FROM conturi

WHERE data_deschidere > (SELECT data_deschidere FROM conturi

WHERE cod_cont = ‘RO51OTPB5661341554464923’);

5. Sa se afiseze numele titularului, codul contlui, soldul initial si soldul marit cu 10% pentru
sumele cuprinse intre 50 si 400 RON si cu 20% pentru sumele cuprinse intre 400 si
800.

SELECT t.nume, t.prenume, c.cod_cont, c.sold “SOLD INITIAL”,

21
CASE

WHEN c.sold BETWEEN 50 AND 400 THEN c.sold*1.1

WHEN c.sold BETWEEN 400 AND 800 THEN c.sold*1.2

ELSE c.sold

END “SOLD MARIT”

FROM conturi c, titulari t

WHERE c.cod_titular = t.cod_titular;

6. Sa se afiseze numarul de luni pana la scadenta imprumuturilor ce se realizeaza pe o


perioada de 120 luni.

SELECT i.cod_imprumut, t.nume, t.prenume, i.data_deschidere, i.suma,

ROUND(MONTHS_BETWEEN(ADD_MONTHS(i.data_deschidere,120),SYSDATE),0)
nr_luni

FROM imprumuturi i, titulari t

WHERE i.cod_titular = t.cod_titular;

22
7. Sa se afiseze codul imprumutului ,numele celui care a facut imprumutul si suma pentru
imprumutul care are suma mai mica decat cea mai mare suma existenta in tabela
imprumuturi.

SELECT i.cod_imprumut, t.nume, i.suma

FROM imprumuturi i, titulari t

WHERE suma <ANY (SELECT suma FROM imprumuturi)

AND i.cod_titular = t.cod_titular;

8. Sa se selecteze suma afiseze codul, numele, prenumele si numarul de conturi ale


titularilor carora li se va acorda bonus astfel:
- daca detine un singur cont, bonusul va fi de 5 %
- daca detine 2 conturi, bonusul va fi de 10%
- daca detine mai mult de 3 conturi, bonusul va fi de 15%

SELECT c.cod_titular, t.nume, t.prenume, COUNT(c.cod_titular) “NUMAR


CONTURI”, ‘ 5%’ AS BONUS

FROM conturi c, titulari t

WHERE c.cod_titular = t.cod_titular

GROUP BY c.cod_titular, t.nume, t.prenume

HAVING COUNT(c.cod_titular) = 1

UNION

SELECT c.cod_titular, t.nume, t.prenume, COUNT(c.cod_titular) “NUMAR


CONTURI”, ‘ 10%’ AS BONUS

FROM conturi c, titulari t

WHERE c.cod_titular = t.cod_titular

23
GROUP BY c.cod_titular, t.nume, t.prenume

HAVING COUNT(c.cod_titular) = 2

UNION

SELECT c.cod_titular, t.nume, t.prenume, COUNT(c.cod_titular) “NUMAR


CONTURI”, ‘ 15%’ AS BONUS

FROM conturi c, titulari t

WHERE c.cod_titular = t.cod_titular

GROUP BY c.cod_titular, t.nume, t.prenume

HAVING COUNT(c.cod_titular) >= 3;

9. Sa se clasifice imprumuturile in functie de perioada pentru care s-a realizat imprumutul


astfel:
- daca imprumutul este facut pe 4 ani, atunci este pe termen scurt
- altfel, imprumutul este pe termen lung

DECODE(DENUMIRE,'ACUMULATOR',0.9*PRET_DE_VANZARE,'MOTOR',0.8*PRET_DE_VANZARE
,PRET_DE_VANZARE) "PRET REDUS"

SELECT cod_imprumut, suma, perioada,

DECODE(perioada, 48, ‘Termen scurt’, ‘Termen lung’) “CLASIFICARE”

FROM imprumuturi;

24
10. Sa se afiseze numele, prenumele si numarul de conturi deschise pentru titularii
care detin cel putin 2 conturi iar suma soldurilor acelor conturi sa fie mai mare de 1000
RON.

SELECT c.cod_titular, t.nume, t.prenume, COUNT(c.cod_cont) “NUMAR CONTURI”,

SUM(c.sold) “SUMA SOLDURI”

FROM titulari t, conturi c

WHERE t.cod_titular = c.cod_titular

GROUP BY (c.cod_titular, t.nume, t.prenume)

HAVING COUNT(c.cod_cont) >= 2

INTERSECT

SELECT c.cod_titular, t.nume, t.prenume, COUNT(c.cod_cont) “NUMAR CONTURI”,

SUM(c.sold) “SUMA SOLDURI”

FROM titulari t, conturi c

WHERE t.cod_titular = c.cod_titular

GROUP BY (c.cod_titular, t.nume, t.prenume)

HAVING SUM(c.sold) > 750;

11. Sa se afiseze titularii si numarul de conturi detinute astfel:


“NUME PRENUME este titularul a X conturi.”

25
SELECT t.nume||’ ‘||t.prenume||’ este titularul a ‘||COUNT(c.cod_cont)||’
conturi’ “TITULARI”

FROM titulari t, conturi c

WHERE t.cod_titular = c.cod_titular

GROUP BY (t.nume, t.prenume);

12. Sa se afiseze femeile care au imprumuturi si care sunt nascute in perioada


1980 – 1982.

SELECT cod_titular, nume, prenume, cnp

FROM titulari

WHERE SUBSTR(cnp,1,1) = 2

AND SUBSTR(cnp,2,2) BETWEEN 80 AND 82;

13. Sa se selecteze acele banci care nu au filiale inregistrate in tabela ‘filiale’.

SELECT cod_banca FROM banci

MINUS

SELECT cod_banca FROM filiale;

26
14. Sa se calculeze pentru fiecare cont dobanda anuala, reprezentand 14% din
valoarea soldului pentru solduri mai mari de 500 RON si 20% pentru solduri mai mici de
500 RON (se va folosi UNION).

SELECT c.cod_titular, c.cod_cont , t.nume, t.prenume, c.sold,


ROUND(c.sold*0.14,2) “DOBANDA”

FROM conturi c, titulari t

WHERE c.cod_titular = t.cod_titular

AND c.sold >= 500

UNION

SELECT c.cod_titular, c.cod_cont , t.nume, t.prenume, c.sold,


ROUND(c.sold*0.2,2) “DOBANDA”

FROM conturi c, titulari t

WHERE c.cod_titular = t.cod_titular

AND c.sold < 500;

15. Sa se selecteze imprumuturile facute intre 2005 si 2009, mai putin cele facute in
2008.

27
SELECT *

FROM imprumuturi

WHERE data_deschidere BETWEEN TO_DATE(’01-01-2005’,’DD-MM-YYYY’) AND


TO_DATE(’31-12-2009’,’DD-MM-YYYY’)

MINUS

SELECT *

FROM imprumuturi

WHERE data_deschidere BETWEEN TO_DATE(’01-01-2008’,’DD-MM-YYYY’) AND


TO_DATE(’31-12-2008’,’DD-MM-YYYY’);

16. Sa se afiseze informatii despre imprumuturile care s-au realizat in anul in care s-
au realizat cele mai multe imprumuturi.

SELECT cod_imprumut, cod_titular, tip_imprumut, suma, EXTRACT(YEAR FROM


data_deschidere) AN

FROM imprumuturi

WHERE EXTRACT(YEAR FROM data_deschidere) IN

(SELECT EXTRACT(YEAR FROM data_deschidere)

28
FROM imprumuturi

GROUP BY EXTRACT(YEAR FROM data_deschidere)

HAVING COUNT(cod_imprumut) = (SELECT

MAX(COUNT(cod_imprumut))

FROM imprumuturi

GROUP BY EXTRACT(YEAR FROM data_deschidere)

);

29
Gestionarea altor obiecte ale bazei de date

TABELE VIRTUALE (VIEW-uri)


1. Sa se creeze un view care sa contina informatii despre titulari, conturile si
imprumuturile numai pentru acei titulari care au cel putin un cont si un imprumut
deschis. Numele tabelei viruale va fi ‘conturi_imprumuturi’.

CREATE VIEW conturi_imprumuturi AS

SELECT t.cod_titular, t.nume, t.prenume, c.cod_cont, c.tip_cont, c.sold,


i.cod_imprumut, i.tip_imprumut, i.suma, i.perioada

FROM titulari t, conturi c, imprumuturi i

WHERE t.cod_titular = c.cod_titular

AND c.cod_titular = i.cod_titular;

2. Sa se vizualizeze toate inregistrarile din tabela virtuala.

SELECT * FROM conturi_imprumuturi;

3. Sa se stearga tabela virtuala ‘conturi_imprumuturi’.

DROP VIEW conturi_imprumuturi;

30
INDECSI
1. Sa se creeze un index nou pe coloana ‘tip_titular’ din tabela ‘titulari’.

SQL> CREATE INDEX CONT_INDX ON titulari (tip_titular);

Index created.

2. Sa se stearga indexul CONT_INDX.

SQL> DROP INDEX CONT_INDX;

Index dropped.

SECVENTE
1. Sa se creeze o secventa care incepe de la 6354655 cu limita 9999999999 cu pasul
8772. Aceasta secventa va fi folosita pentru generarea de coduri unice pentru atributul
‘cod_imprumut’ al tabelei ‘imprumuturi’.

SQL> CREATE SEQUENCE SECVENTA_IMPRUMUTURI

2 START WITH 6354655

3 INCREMENT BY 8772

4 MAXVALUE 9999999999

5 NOCYCLE;

Sequence created.

2. Sa se adauge 3 noi inregistrari in tabela imprumuturi utilizand pentru introducerea


valorilor atributului ‘cod_imprumut’ secventa creata anterior.

INSERT INTO imprumuturi VALUES (SECVENTA_IMPRUMUTURI.NEXTVAL, 2342356,


‘BRDCJCNS’, ‘test’, NULL, 0, ‘EUR’, 0);

INSERT INTO imprumuturi VALUES (SECVENTA_IMPRUMUTURI.NEXTVAL, 2342356,


‘BRDCJCNS’, ‘test’, NULL, 0, ‘EUR’, 0);

INSERT INTO imprumuturi VALUES (SECVENTA_IMPRUMUTURI.NEXTVAL, 2342356,


‘BRDCJCNS’, ‘test’, NULL, 0, ‘EUR’, 0);

31
3. Sa se vizualizeze ultimul cod utilizat din secventa.

SELECT SECVENTA_IMPRUMUTURI.CURRVAL

FROM dual;

4. Sa se modifice valoarea cu care incrementeaza secventa de la 8772 la 10557.

ALTER SEQUENCE SECVENTA_IMPRUMUTURI

INCREMENT BY 10557;

5. Sa se stearga secventa SECVENTA_IMPRUMUTURI.

SQL> DROP SEQUENCE SECVENTA_IMPRUMUTURI;

Sequence dropped.

32
SINONIME
1. Sa se creeze un sinonim pentru tabela ‘filiale’.

SQL> CREATE SYNONYM AGENTII FOR FILIALE;

Synonym created.

2. Verificati daca sinonimul s-a creeat corect.

SELECT * FROM AGENTII;

3. Sa se stearga sinonimul AGENTII.

SQL> DROP SYNONYM AGENTII;

Synonym dropped.

33

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