Proiect Baze de Date

Descărcați ca docx, pdf sau txt
Descărcați ca docx, pdf sau txt
Sunteți pe pagina 1din 50

PROIECT BAZE DE DATE

Crearea unei baze de date pentru firma de construcii de mobilier MOB.CR


Coordonator: Lect. univ. dr. Anda Belciu Student:Carabulea Roxana-Elena An II Seria A Grupa 1018 CSIE

2012-2013

I.Descrierea problemei Pentru buna funcionare a unei firme este necesar o baz de date care s in evidena tuturor activitilor care au loc n cadrul firmei respective. O baz de date este un ansamblu de colecii de date aflate n interdependen, mpreun cu dicionarul de date care conine descrierea datelor i a legturilor dintre ele, fapt ce asigur interdependena datelor fa de aplicaii. Activitatea firmei MOB.CR se desfoar astfel: furnizorii aprovizioneaz magazia cu materiale pe baza unor facturi, materialele sunt stocate n magazie i mai apoi vndute clienilor.n urma achiziionrii unui material, fiecare client va primi un bon. Pentru accesul rapid la informaiile legate de aceste activiti am realizat o baz de date.Am pus accentul pe subiectele mai importante ale procesului economic, ajungnd astfel la urmtoarele tabele: FurnizoriCR, FacturiCR, MagazieCR, BonuriCR, Coninut_facturCR, Coninut_bonCR, MaterialeCR. Legturile dintre tabele Asocierile dintre mulimile de entiti se stabilesc n funcie de modul n care se desfoar activitatea modelat. Pentru aceasta, n continuare sunt explicate legturile dintre tabele: a) ntre tabelele FurnizoriCR i FacturiCR exist o legtur 1 la m: un furnizor poate emite mai multe facturi, iar o factur poate fi emis de un singur furnizor. Cheia primar din tabela printe (cheia primar este Cod_furnizor, iar tabela printe este FurnizoriCR) se adaug n tabela copil (FacturiCR) ca i cheie extern(Cod_furnizor). Cele dou trebuie s fie de acelai tip. b) ntre tabelele FacturiCR i MaterialeCR exist o legtura de tip muli la muli: o factur poate conine mai multe materiale, iar un material poate fi inclus n mai multe facturi. De aceea se adaug o tabel suplimentar Coninut_facturCR care va conine cheile primare ale tabelelor iniiale care vor fi trecute ca i cheie secundar n tabela Coninut_facturCR. Cheia primar a acestei tabele va fi una compus din Nr_factur i Cod_material. c) ntre tabelele MagazieCR i BonuriCR exist o legtur de tip 1 la m: o magazie emite mai multe bonuri de consum, iar un bon poate fi emis de la o singur magazie. Cheia primar Cod_magazie din tabela printe MagazieCR va deveni cheie extern n tabela copil BonuriCR. d) ntre tabelele BonuriCR i Materiale CR exist o legtur de tip muli la muli: ntr-un bon de consum pot fi cuprinse mai multe materiale, iar un material poate fi pe mai multe bonuri. De aceea se introduce o tabel suplimentar Coninut_bonCR care va conine cheile primare ale tabelelor iniiale care vor fi trecute ca i chei externe n tabela Coninut_bonCR. Cheia primar a acestei tabele va fi una compus din Nr_bon i Cod_material. Pentru crearea i definirea tipului de date din tabel am folosit comenzile de definire a datelor (LDD): CREATE, ALTER i DROP.

II.Crearea tabelelor 1.Creai tabela FurnizoriCR conform machetei urmtoare:


Nume coloan Tipul restriciei Tip dat Lungime Cod_furnizorCR Primary key Number 5 Denumire_furnizorCR Char 50 Adres_furnizorCR Char 50 Email_furnizorCR Varchar2 30 BancaCR Char 30 ContCR Char 13

CREATE TABLE FurnizoriCR ( Cod_furnizorCR NUMBER(5) CONSTRAINT cod_fz_pk PRIMARY KEY, Denumire_furnizorCR CHAR(50) NOT NULL, Adresa_furnizorCR CHAR(50), Email_furnizorCR VARCHAR2(30) CONSTRAINT ck_mail UNIQUE, BancaCR CHAR(30), ContCR CHAR(13) );

Pentru cmpul Denumire_furnizorCR am adugat restricia NOT NULL, iar pentru cmpul Email_furnizorCR am adugat restricia UNIQUE.

2.Creai tabela MagazieCR dup urmtoarea machet:


Nume coloan Tipul restriciei Tip dat Lungime Cod_magazieCR Primary key Number 5 Denumire_magazieCR Char 50 GestionarCR Char 20

CREATE TABLE MagazieCR ( Cod_magazieCR NUMBER(5) CONSTRAINT cod_magazie_pk PRIMARY KEY, Denumire_magazieCR CHAR(50) NOT NULL, GestionarCR CHAR(20) );

3.Creai tabela FacturiCR dup urmtoarea machet:


Nume Tipul restriciei Tip dat Lungime Numr_facturCR Primary key Number 5 Data_facturCR Date Cod_furnizorCR Foreign key Number 5

CREATE TABLE FacturiCR ( Numar_facturaCR NUMBER(5) CONSTRAINT Nr_fact_pk PRIMARY KEY, Data_facturaCR DATE, Cod_furnizorCR NUMBER(5) CONSTRAINT fk_cod_fz REFERENCES FurnizoriCR(Cod_furnizorCR) );

4.Creai tabela BonuriCR dup urmtoarea machet:


Nume Tipul restriciei Tip dat Lungime Numr_bonCR Primary key Number 3 Data_bonCR Date Cod_magazieCR Foreign key Number 5

CREATE TABLE BonuriCR ( Numar_bonCR NUMBER(3) CONSTRAINT nr_bon_pk PRIMARY KEY, Data_bonCR DATE, Cod_magazieCR NUMBER(5) CONSTRAINT cod_mag_fk REFERENCES MagazieCR(Cod_magazieCR) );

5.Creai tabela MaterialeCR dup urmtoarea machet:


Nume Tipul restriciei Tip dat Lungime Cod_materialeCR Primary key Number 5 Denumire_materialeCR Char 50 Unitate_de_masuraCR Number 3

CREATE TABLE MaterialeCR ( Cod_materialeCR NUMBER(5) CONSTRAINT cod_materiale_pk PRIMARY KEY, Denumire_materialeCR CHAR(50) NOT NULL, Unitate_de_masuraCR NUMBER(3) );

6.Creai tabela Coninut_facturCR dup urmtoarea machet:


Nume Tipul restriciei Tip dat Lungime Numr_facturCR Foreign Key Number 5 Cod_materialeCR Foreign Key Number 5 Cantitate_intratCR Number 5

CREATE TABLE Continut_facturaCR ( Numar_facturaCR NUMBER(5) CONSTRAINT fk_nr_fact REFERENCES FacturiCR(Numar_facturaCR), Cod_materialeCR NUMBER(5) CONSTRAINT fk_cod_mat REFERENCES MaterialeCR(Cod_materialeCR), Cantitate_intrataCR NUMBER(5) ); ALTER TABLE Continut_facturaCR ADD CONSTRAINT nr_fact_cod_mat_pr PRIMARY KEY(Numar_facturaCR, Cod_materialeCR);

Pentru acest tabel cheia primar va fi una compus din Numr_facturCR i Cod_materialCR.

7.Creai tabela Coninut_bonCR dup urmtoarea machet:


Nume Tipul restriciei Tip dat Lungime Numr_bonCR Foreign key Number 3 Cod_materialeCR Foreign key Number 5 Cantitate_ieitCR Number 5

CREATE TABLE Continut_bonCR ( Numar_bonCR NUMBER(3) CONSTRAINT fk_nr_bon REFERENCES BonuriCR(Numar_bonCR), Cod_materialeCR NUMBER(5) CONSTRAINT fk_cod_mat_1 REFERENCES MaterialeCR(Cod_materialeCR), Cantitate_iesitaCR NUMBER(5) ); ALTER TABLE Continut_bonCR ADD CONSTRAINT nr_bon_cod_mat_1_pk PRIMARY KEY(Numar_bonCR, Cod_materialeCR);

II.Aplicaii asupra tabelelor folosind comenzi de definire a datelor(DDL) Structura tabelelor poate fi modificat ulterior, lucru care se realizeaz cu ajutorul comenzii ALTER. n continuarea voi da exemple de cteva modificri pe care le-am efectuat asupra tabelelor. 1.Adugai coloana CNP n tabela FurnizoriCR avnd tipul Varchar2(13) i apoi tergeti-o. ALTER TABLE FurnizoriCR ADD (CNP VARCHAR2(13)); ALTER TABLE FurnizoriCR DROP COLUMN CNP;

2.Modificai tabela FurnizoriCR astfel nct cmpul Email_furnizorCR s fie de tipul [email protected] sau [email protected] etc. ALTER TABLE FurnizoriCR ADD CONSTRAINT verif_mail CHECK (Email_furnizorCR LIKE '%@%.%');

3. n tabela Coninut_facturCR adugai restricia de integritate verif_cantintrata astfel nct numerele introduse n cmpul Cantitate_intratCR s fie cuprinse ntre 10 i 500. ALTER TABLE Continut_facturaCR ADD (Cantitate_intrataCR BETWEEN 10 AND 500); CONSTRAINTS verif_cantintrata CHECK

4.n tabela FurnizoriCR redenumii cmpul Adresa_furnizorCR n Domiciliu_furnizorCR. ALTER TABLE FurnizoriCR RENAME COLUMN Adresa_furnizorCR TO Domiciliu_furnizorCR;

5. Modificai tabela MagazieCR astfel nct cmpul GestionarCR s fie de tipul CHAR(50). ALTER TABLE MagazieCR MODIFY (GestionarCR CHAR(50));

6. Dezactivai restricia de integritate verif_cantintrata. ALTER TABLE Continut_facturaCR DISABLE CONSTRAINT verif_cantintrata;

7. n tabela Magazie adugai cmpul Adresa_magazieCR de tip CHAR(50). ALTER TABLE MagazieCR ADD (adresa_magazieCR CHAR(50));

8. tergei cmpul adresa_magazieCR. ALTER TABLE MagazieCR DROP COLUMN adresa_magazieCR;

IV.Aplicaii folosind comenzi de manipulare a datelor(DML) 1.Inserai date n tabelul FurnizoriCR. INSERT INTO FurnizoriCR VALUES (1, 'Popescu Marcel', 'Bucuresti', '[email protected]', 'BCR', 398765); INSERT INTO FurnizoriCR VALUES(4, 'Mircea Daniela', 'Constanta', '[email protected]', 'BRD', 764321); INSERT INTO FurnizoriCR VALUES(11, 'Bucataru Mihaela', 'Baia-Mare', '[email protected]', 'BT', 237634); INSERT INTO FurnizoriCR VALUES(23, 'Pavel Cosmis', 'Iasi', '[email protected]', 'BCR', 567234); INSERT INTO FurnizoriCR VALUES(14, 'Popoiu Sorina', 'Timisoara', '[email protected]', 'BT', 956521); INSERT INTO FurnizoriCR VALUES(29, 'Dumitru Ion', 'Hunedoara', '[email protected]', 'BRD', 743199); INSERT INTO FurnizoriCR VALUES(12, 'Popa Flavia', 'Iasi', '[email protected]', 'BCR', 123456); INSERT INTO FurnizoriCR VALUES(13, 'Florescu Damian', 'Bucuresti', '[email protected]', 'BRD', 876256); INSERT INTO FurnizoriCR VALUES(22, 'Dimitrie Vasile', 'Baia Mare', '[email protected]', 'BT', 876321); INSERT INTO FurnizoriCR VALUES(24, 'Mardare Ionela', 'Constanta', '[email protected]', 'BCR', 590231);

2.Inserai date n tabelul MagazieCR ALTER TABLE MagazieCR ADD(Salariul_gestionarCR NUMBER(10)); ALTER TABLE MagazieCR ADD(Dataangajare_gestionarCR DATE); ALTER TABLE MagazieCR ADD(id_gestionarCR NUMBER(2));

INSERT INTO MagazieCR Values(2, 'Kappa', 'Popa Ion', 3000, to_date('17-06-1991', 'dd-mm-yyyy'), 1); INSERT INTO MagazieCR Values(11, 'Terra', 'Anton Mircea', 2100, to_date('02-11-1995', 'dd-mm-yyyy'), 2); INSERT INTO MagazieCR Values(13, 'Euro', 'Ilie Dan', 1900, to_date('23-01-2000', 'dd-mm-yyyy'), 3); INSERT INTO MagazieCR Values(15, 'Kondo', 'Marinescu Cristi', 2500, to_date('11-03-1994', 'dd-mm-yyyy'), 4); INSERT INTO MagazieCR Values(18, 'Main', 'Criscu Mihai', 1500, to_date('20-07-1999', 'dd-mm-yyyy'), 5); INSERT INTO MagazieCR Values(20, 'Cargo', 'Damian Cosmin', 1600, to_date('20-09-1994', 'dd-mm-yyyy'), 6); INSERT INTO MagazieCR Values(21, 'Dingo', 'Carpone Mircea', 2000, to_date('23-02-1994', 'dd-mm-yyyy'), 7); INSERT INTO MagazieCR Values(23, 'Marko', 'Cozma Aurel', 2300, to_date('14-05-1997', 'dd-mm-yyyy'), 8);

INSERT INTO MagazieCR Values(24, 'Alka', 'Chiciura Andrei', 3100, to_date('01-01-1992', 'dd-mm-yyyy'), 9); INSERT INTO MagazieCR Values(25, 'Blake', 'Gherea Flavian', 2650, to_date('07-09-2001', 'dd-mm-yyyy'), 10);

3.Inserai date n tabelul FacturiCR INSERT INTO FacturiCR VALUES(23, to_date('14-06-2009', 'dd-mm-yyyy'), 1); INSERT INTO FacturiCR VALUES(34, to_date('21-05-2008', 'dd-mm-yyyy'), 11); INSERT INTO FacturiCR VALUES(36, to_date('19-09-2010', 'dd-mm-yyyy'), 23);

INSERT INTO FacturiCR VALUES(46, to_date('23-10-2009', 'dd-mm-yyyy'), 12); INSERT INTO FacturiCR VALUES(15, to_date('18-01-2010', 'dd-mm-yyyy'), 13); INSERT INTO FacturiCR VALUES(14, to_date('15-06-2009', 'dd-mm-yyyy'), 22); INSERT INTO FacturiCR VALUES(16, to_date('07-07-2007', 'dd-mm-yyyy'), 11); INSERT INTO FacturiCR VALUES(19, to_date('24-05-2009', 'dd-mm-yyyy'), 24); INSERT INTO FacturiCR VALUES(21, to_date('19-06-2010', 'dd-mm-yyyy'), 22); INSERT INTO FacturiCR VALUES(30, to_date('10-10-2010', 'dd-mm-yyyy'), 23);

4.Inserai date n tabelul BonuriCR INSERT INTO BonuriCR VALUES(50, to_date('19-09-2010', 'dd-mm-yyyy'), 15); INSERT INTO BonuriCR VALUES(52, to_date('16-07-2011', 'dd-mm-yyyy'), 20); INSERT INTO BonuriCR VALUES(44, to_date('15-08-2009', 'dd-mm-yyyy'), 11); INSERT INTO BonuriCR VALUES(49, to_date('23-06-2010', 'dd-mm-yyyy'), 13); INSERT INTO BonuriCR VALUES(48, to_date('02-06-2011', 'dd-mm-yyyy'), 2); INSERT INTO BonuriCR VALUES(55, to_date('06-11-2011', 'dd-mm-yyyy'), 11); INSERT INTO BonuriCR VALUES(56, to_date('14-11-2009', 'dd-mm-yyyy'), 21); INSERT INTO BonuriCR VALUES(57, to_date('28-01-2010', 'dd-mm-yyyy'), 20); INSERT INTO BonuriCR VALUES(58, to_date('19-10-2011', 'dd-mm-yyyy'), 21); INSERT INTO BonuriCR VALUES(59, to_date('22.02.2009', 'dd-mm-yyyy'), 15);

5.Inserai date n tabelul MaterialeCR ALTER TABLE MaterialeCR MODIFY (unitate_de_masuraCR VARCHAR2(20)); INSERT INTO MaterialeCR Values(12345, 'Rigips', 'kg'); INSERT INTO MaterialeCR Values(25647, 'Folie aluminiu', 'mm'); INSERT INTO MaterialeCR Values(63219, 'Adeziv structurali', 'g'); INSERT INTO MaterialeCR Values(95412, 'Ciment', 'm^3'); INSERT INTO MaterialeCR Values(10762, 'Caramida', 'm^2');

INSERT INTO MaterialeCR Values(20978, 'Nisip', 'm^3'); INSERT INTO MaterialeCR Values(14523, 'BCA', 'm^2'); INSERT INTO MaterialeCR Values(25678, 'Boltzari', 'm^2'); INSERT INTO MaterialeCR VALUES(15402, 'Tigla acoperis', 'm^2'); INSERT INTO MaterialeCR Values(45609, 'Polistiren', 'mm');

6.Inserai date n tabelul Coninut_facturCR. INSERT INTO Continut_facturaCR VALUES(23, 12345, 150); INSERT INTO Continut_facturaCR VALUES(34, 25647, 200); INSERT INTO Continut_facturaCR VALUES(36, 63219, 50); INSERT INTO Continut_facturaCR VALUES(46, 95412, 170); INSERT INTO Continut_facturaCR VALUES(15, 10762, 100); INSERT INTO Continut_facturaCR VALUES(14, 20978, 120); INSERT INTO Continut_facturaCR VALUES(16, 14523, 130); INSERT INTO Continut_facturaCR VALUES(19, 25678, 80); INSERT INTO Continut_facturaCR VALUES(21, 15402, 60); INSERT INTO Continut_facturaCR VALUES(30, 45609, 75);

7.Inserai date n tabelul Coninut_bonCR. INSERT INTO Continut_bonCR VALUES(50, 12345, 148); INSERT INTO Continut_bonCR Values(52, 25647, 195); INSERT INTO Continut_bonCR VALUES(44, 63219, 47); INSERT INTO Continut_bonCR VALUES(49, 95412, 170 ); INSERT INTO Continut_bonCR VALUES(48, 10762, 99); INSERT INTO Continut_bonCR VALUES(55, 20978, 110); INSERT INTO Continut_bonCR VALUES(56, 14523, 125); INSERT INTO Continut_bonCR VALUES(57, 25678, 80); INSERT INTO Continut_bonCR VALUES(58, 15402, 55); INSERT INTO Continut_bonCR VALUES(59, 45609, 75);

8.S se mreasc cu 20% salariul gestionarilor al cror nume ncep cu litera C. UPDATE magazieCR SET salariul_gestionarCR=1.2*salariul_gestionarCR WHERE gestionarCR LIKE 'C%';

9.S se modifice domiciliul furnizorului cu cod 4 astfel nct s devin egal cu domiciliul furnizorului cu cod 22. UPDATE furnizoriCR SET domiciliu_furnizorCR=(SELECT cod_furnizorCR=22) WHERE cod_furnizorCR=4;

domiciliu_furnizorCR

FROM

furnizoriCR

WHERE

10.Creai tabela GestionariCR astfel nct s conin toate cmpurile din tabela FurnizoriCR. CREATE TABLE GestionariCR AS SELECT * FROM FurnizoriCR;

11.S se modifice salariul gestionarului de la magazia MAIN astfel nct s devin egal cu salariul gestionarului cu codul magaziei 13. UPDATE MagazieCR SET salariul_gestionarCR=(SELECT salariul_gestionarCR cod_magazieCR=13) WHERE UPPER(denumire_magazieCR)='MAIN';

FROM

MagazieCR

WHERE

12. S se mreasc salariul gestionarului care s-a angajat n anul 1991 la 3000. UPDATE magazieCR SET salariul_gestionarCR=3000 WHERE EXTRACT (year FROM dataangajare_gestionarCR)<=1991;

13.S se afieze numele i e-mail-ul furnizorului cu domiciliul n Bucureti i ordonai alfabetic dup nume. SELECT denumire_furnizorCR, email_furnizorCR FROM FurnizoriCR WHERE domiciliu_furnizorCR LIKE '%Bucuresti%' ORDER BY denumire_furnizorCR;

14. Creai tabela Furnizori_P astfel nct s conin toate cmpurile din tabela FurnizoriCR doar pentru furnizorii al cror nume ncepe cu litera P. CREATE TABLE Furnizori_P AS SELECT * FROM FurnizoriCR WHERE denumire_furnizorCR LIKE 'P%';

15.S se tearg furnizorii din tabela Furnizori_P care au codul minim. DELETE FROM Furnizori_P WHERE cod_furnizorCR=(SELECT MIN(cod_furnizorCR) FROM Furnizori_P);

16.S se afieze numele i domiciliul furnizorilor care nu au emis facturi. SELECT denumire_furnizorCR, domiciliu_furnizorCR FROM FurnizoriCR WHERE cod_furnizorCR NOT IN (SELECT cod_furnizorCR FROM FacturiCR);

17. Introducei n tabela furnizoriCR o nou nregistrare care s conin datele urmtoare : 27 Carabulea Roxana , Constana, [email protected], BCR, 930227. Apoi tergei-o. INSERT INTO FurnizoriCR VALUES(27, 'Carabulea Roxana', 'Constanta', '[email protected]', 'BCR', 930227);

DELETE FROM furnizoriCR WHERE contCR=930227;

18.S se afieze numele, domiciliul furnizorilor i data emiterii facturii SELECT denumire_furnizorCR, domiciliu_furnizorCR, data_facturaCR FROM FurnizoriCR fu, FacturiCR fa WHERE fu.cod_furnizorCR=fa.cod_furnizorCR;

SAU SELECT denumire_furnizorCR, domiciliu_furnizorCR, data_facturaCR FROM FurnizoriCR NATURAL JOIN FacturiCR ;

19.S se afieze numele i salariul gestionarilor a cror nume incep cu litera C. SELECT gestionarCR, salariul_gestionarCR FROM MagazieCR WHERE UPPER(gestionarCR) LIKE 'C%';

20.S se afieze numele i salariul gestionarilor angajai n anul 1994. SELECT gestionarCR, salariul_gestionarCR FROM MagazieCR WHERE dataangajare_gestionarCR BETWEEN TO_DATE ('01-01-1994','dd-mm-yyyy') AND TO_DATE ('31-12-1994', 'dd-mm-yyyy');

SAU SELECT gestionarCR, salariul_gestionarCR FROM MagazieCR


WHERE EXTRACT (YEAR FROM dataangajare_gestionarCR)=1994;

21.Calculai valoarea total a salariilor gestionarilor. SELECT SUM(salariul_gestionarCr)Salariu_total FROM MagazieCR;

22.Calculai media salariilor gestionarilor cu 2 zecimale. SELECT ROUND(AVG (salariul_gestionarCR),2) Salariu_mediu FROM MagazieCR;

23.Afiai numrul total de gestionari, numele gestionarilor care au salariul ntre 1500 i 2000 i ordonai alfabetic dup nume. SELECT gestionarCR, COUNT(gestionarCR) Numar_gestionari FROM MagazieCR WHERE salariul_gestionarCR BETWEEN 1500 AND 2000 GROUP BY gestionarCR ORDER BY gestionarCR;

24.Afiai numrul total de gestionari, pentru fiecare din urmtoarele nivele: niv1 cei care au salariul ntre 1000 i 1999, niv2 salariul ntre 2000 i 2999 i nivelul 3 salariul ntre 3000 i 3999. SELECT 'niv1 sal' AS Niv_sal, COUNT(gestionarCR) Nr_gestionari FROM MagazieCR WHERE salariul_gestionarCR BETWEEN 1000 AND 1999

UNION SELECT 'niv2 sal' AS Niv_sal, COUNT(gestionarCR) Nr_gestionari FROM MagazieCR WHERE salariul_gestionarCR BETWEEN 2000 AND 2999 UNION SELECT 'niv3 sal' AS Niv_sal, COUNT(gestionarCR) Nr_gestionari FROM MagazieCR WHERE salariul_gestionarCR BETWEEN 3000 AND 3999;

25.Afiai numele gestionarului i data bonului i numrul gestionarilor care nu au bonuri emise. SELECT gestionarCR, data_bonCR, numar_bonCR FROM MagazieCR m, BonuriCR b WHERE m.cod_magazieCR=b.cod_magazieCR(+) ORDER BY data_bonCR;

SAU SELECT gestionarCR, data_bonCR, numar_bonCR FROM BonuriCR b RIGHT OUTER JOIN MagazieCR m ON (b.cod_magazieCR=m.cod_magazieCR) ORDER BY data_bonCR;

SAU SELECT gestionarCR, data_bonCR, numar_bonCR FROM MagazieCR m LEFT OUTER JOIN BonuriCR b ON (m.cod_magazieCR=b.cod_magazieCR) ORDER BY data_bonCR;

26.Afiai gestionarii cu salariul cuprins ntre 1500 i 3000. SELECT gestionarCR, salariul_gestionarCR FROM MagazieCR WHERE salariul_gestionarCR BETWEEN 1500 AND 3000;

27.Afiai furnizorii care aparin bncilor BRD sau BCR i ordonai invers-alfabetic dup nume. SELECT denumire_furnizorCR, bancaCR FROM FurnizoriCR WHERE BancaCR IN ('BCR','BRD') ORDER BY denumire_furnizorCR DESC;

28.Afiai numele furnizorilor care au a doua liter o. SELECT denumire_furnizorCR FROM FurnizoriCR WHERE denumire_furnizorCR LIKE '_o%';

29. Afiai cantitatea total intrat, denumirea materialului i unitatea de msur pentru cantitatea total mai mare dect 100. SELECT denumire_materialeCR, unitate_de_masuraCR, SUM(cantitate_intrataCR) FROM continut_facturaCR cf, materialeCR m WHERE cf.cod_materialeCR=m.cod_materialeCR GROUP BY denumire_materialeCR, unitate_de_masuraCR HAVING SUM(cantitate_intrataCR)>100 ORDER BY denumire_materialeCR;

30.Calculai numrul de gestionari angajai nainte de 31.decembrie.2000 SELECT salariul_gestionarCR, gestionarCR, COUNT(gestionarCR) FROM MagazieCR WHERE dataangajare_gestionarCR<TO_DATE('31-12-2000', 'dd-mm-yyyy') GROUP BY salariul_gestionarCR, gestionarCR;

31.Calculai bonusul gestionarilor n funcie de salariul lor: -6% din salariul dac salariul >3000 -4% din salariul dac salariul ntre 2000 i 3000 -2% din salariul dac salariul ntre 1600 i 2000.Pentru celelalte bonus=0. SELECT gestionarCR, salariul_gestionarCR, CASE WHEN salariul_gestionarCR>3000 THEN 0.06*salariul_gestionarCR WHEN salariul_gestionarCR BETWEEN 2000 AND 3000 THEN 0.04*salariul_gestionarCR WHEN salariul_gestionarCR BETWEEN 1600 AND 2000 THEN 0.02*salariul_gestionarCR ELSE 0 END bonus FROM MagazieCR;

32.S se afieze gestionarii care au salariul ntre 1500 i 3000 fr cei care au salariul 1600 i 2000. SELECT gestionarCR, salariul_gestionarCR FROM MagazieCR WHERE salariul_gestionarCR BETWEEN 1500 AND 3000 MINUS SELECT gestionarCR, salariul_gestionarCR FROM MagazieCR WHERE salariul_gestionarCR IN (1600, 2000);

33.S se afieze furnizorii cu domiciliul n Bucureti i gestionarii care au salariul peste 2000. SELECT denumire_furnizorCR FROM FurnizoriCR WHERE domiciliu_furnizorCR LIKE 'Bucuresti' UNION SELECT gestionarCR FROM MagazieCR WHERE salariul_gestionarCR>2000;

34.S se afieze toi gestionarii angajai n 1994 cu salariul mai mare de 2000. SELECT * FROM magazieCR WHERE EXTRACT (YEAR FROM dataangajare_gestionarCR)=1994 INTERSECT SELECT * FROM magazieCR WHERE salariul_gestionarCR>2000;

35.S se afieze materialele al cror cod se termin cu cifra 2. SELECT * FROM MaterialeCR WHERE (SUBSTR(cod_materialeCR, length(cod_materialeCR),1))='2';

36.S se afieze ultima zi a lunii urmtoare de la data facturrii. SELECT data_facturaCR, LAST_DAY(add_months(data_facturaCR, 1)) AS Ultima_zi FROM FacturiCR;

37.S se afieze furnizorii care au acelai domiciliu cu furnizorul al crui cod este 4. SELECT * FROM FurnizoriCR WHERE domiciliu_furnizorCR=(SELECT domiciliu_furnizorCR FROM FurnizoriCR WHERE cod_furnizorCR=4);

38.S se afle numrul bncii din top la care au cont furnizorii n funcie de banca la care sunt nscrii.Dac banca este BCR atunci NR1.Dac banca este BRD atunci NR2.Dac banca este Raiffeisen Bank, atunci NR3.Pentru celelalte se consider c nu sunt n TOP3.

SELECT bancaCR, DECODE(UPPER(bancaCR), 'BCR', 'NR1', 'BRD', 'NR2', 'RaiffeisenBank', 'NR3', 'NOT IN TOP3')NrBanca FROM FurnizoriCR; SAU SELECT bancaCR, CASE WHEN UPPER(bancaCR)='BCR' THEN 'NR1' WHEN UPPER(bancaCR)='BRD' THEN 'NR2' WHEN UPPER(bancaCR)='RAIFFEISENBANK' THEN 'NR3' ELSE 'NOT IN TOP3' END NrBanca FROM FurnizoriCR;

39.S se afieze denumirea furnizorilor i gestionarii ca produs cartezian. SELECT f.denumire_furnizorCR, m.gestionarCR FROM furnizoriCR f, magazieCR m;

SAU SELECT f.denumire_furnizorCR, m.gestionarCR FROM furnizoriCR f CROSS JOIN magazieCR m;

40.S se realizeze o tabel virtual cu toi furnizorii care au domiciliul n Bucureti. CREATE VIEW tabv_buc AS SELECT * FROM FurnizoriCR WHERE LOWER(domiciliu_furnizorCR) LIKE 'Bucuresti';

Dac dorim s o tergem dup folosim: DROP VIEW tabv_buc; 41.S se realizeze o tabel virtual care s conin materialele care au ca unitate de msur m^2.Tabela virtual nu va putea fi actualizat.

CREATE VIEW tabv_mat_m2 AS SELECT * FROM MaterialeCR WHERE unitate_de_masuraCR LIKE 'm^2' WITH READ ONLY;

42.S se creeze un index pentru facilitarea accesului mai rapid la salariul gestionarilor magaziilor. CREATE INDEX idx_sal ON MagazieCR(salariul_gestionarCR);

43.S se creeze un index pentru facilitarea accesului mai rapid la cantitatea ieit de materiale pe baza bonurilor. CREATE INDEX idx_cant_out ON Continut_bonCR(cantitate_iesitaCR);

44.S se creeze un sinonim mag pentru tabela magazieCR, s se interogheze aceast tabel folosind sinonimul dat. CREATE SYNONYM mag FOR magazieCR; SELECT *FROM mag;

45. S se creeze un sinonim fur pentru tabela furnizoriCR, s se interogheze aceast tabel folosind sinonimul dat. CREATE SYNONYM fur FOR furnizoriCR; SELECT *FROM fur;

46.S se creeze o secven care s aib valoarea de nceput 150, s se incrementeze cu pasul 2, s aib valoarea maxim 250 i s nu cicleze. OBS: Secvena poate fi folosit pentru a aduga date n una sau mai multe tabele. CREATE SEQUENCE secv1 START WITH 150 INCREMENT BY 2 MAXVALUE 250 NOCYCLE;

47.S se creeze o secven care s aib valoarea de nceput 2500, s se incrementeze cu pasul 100, s aib valoarea maxim 6500 i s cicleze.

CREATE SEQUENCE secv2 START WITH 2500 INCREMENT BY 100 MAXVALUE 6500 CYCLE;

48. S se modifice pasul de incrementare pentru secvena anterioar de la ex 46 la 5: ALTER SEQUENCE secv1 INCREMENT BY 5;

49. Folosirea unui cluster a) creare cluster CREATE CLUSTER cod_furnizorCR_clus (cod_furnizorCR NUMBER(5,0));

b) creare index cluster CREATE INDEX cod_furnizorCR_clus_idx ON CLUSTER cod_furnizorCR_clus;

c) creare tabel n cluster CREATE TABLE furnizoriCR_2 (cod_furnizorCR NUMBER(5,0), denumire_furnizorCR CHAR(50)) CLUSTER cod_furnizorCR_clus (cod_furnizorCR);

50.Crearea unei tabele partiionate a) RANGE CREATE TABLE gest_partitie (codfurn NUMBER(4), den_furn NUMBER(3) NOT NULL, banca NUMBER(10), termenliv date) PARTITION BY RANGE (termenliv) (PARTITION GEST1 VALUES LESS THAN (to_date('07-jun-2010', 'dd-mon-yyyy')), PARTITION GEST2 VALUES LESS THAN (to_date('29-sep-2012', 'dd-mon-yyyy')), PARTITION GEST3 VALUES LESS THAN (to_date('06-dec-2013', 'dd-mon-yyyy')));

b) LIST CREATE TABLE maga_partitie (cod_mag NUMBER(3), denumire_mag VARCHAR2(15), nr_ore NUMBER(30)) PARTITION BY LIST (nr_ore) (PARTITION paart1 VALUES (5,7,9), PARTITION paart2 VALUES (10,15,18), PARTITION paart3 VALUES (20,25,28));

c) Inserare date n tabela partiionat INSERT INTO maga_partitie VALUES(3,'depozit',20);

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