+ All Categories
Home > Documents > Rezolvare Subiecte Baze de Date Neintensiv

Rezolvare Subiecte Baze de Date Neintensiv

Date post: 26-Jul-2015
Category:
Upload: ilukara
View: 512 times
Download: 9 times
Share this document with a friend
23
EXAMENUL DE ATESTAT PROFESIONAL LA INFORMATICĂ, 2010 MATEMATICĂ - INFORMATICĂ NEINTENSIV REZOLVAREA SUBIECTELOR PROBEI PRACTICE BAZE DE DATE - Oracle Subiectul nr.1 Să se creeze o tabelă cu structura: Cod_numeric_personal,Numele,Data_angajarii, Data_naşterii şi să se introducă 8 articole cu date care să corespundă cerinţelor următoare: a)Să se afişeze pe ecran toţi angajaţii cu o cevchime mai mare de 10 ani. b)Să se afişeze toate persoanele a căror zi de naştere se sărbătoreşte astăzi. Crearea structurii tabelului CREATE TABLE Angajati (Cod_numeric_personal VARCHAR(13) PRIMARY KEY, Numele VARCHAR(50) , Data_angajarii DATE, Data_nasterii DATE) Inserarea datelor in tabel INSERT INTO Angajati VALUES ('1500210384145','Popescu Ion', '12-04- 1998', '10-02-1950') INSERT INTO Angajati VALUES ('1581010384045','Preda Mihai', '12-10- 2005', '10-10-1958') INSERT INTO Angajati VALUES ('1800505384010','Deaconu Ana', '25-08- 2009', '05-05-1980') INSERT INTO Angajati VALUES ('1701212384510','Vasilescu Dorel', '01- 01-1998', '12-12-1970') INSERT INTO Angajati VALUES ('1651111384511','Bujor Adelina', '25- 04-1985', '11-11-1965') INSERT INTO Angajati VALUES ('1751111384523','Grigorescu Radu', '25- 04-2000', '11-11-1975') INSERT INTO Angajati VALUES ('1681111384525','Croitoru Andreea', '25-10-1989', '11-11-1968') INSERT INTO Angajati VALUES ('1800407384141','Voinea Mihaela', '25- 10-2006', '07-04-1980') Cerinţa a)
Transcript
Page 1: Rezolvare Subiecte Baze de Date Neintensiv

EXAMENUL DE ATESTAT PROFESIONAL LA INFORMATICĂ, 2010

MATEMATICĂ - INFORMATICĂ NEINTENSIV

REZOLVAREA SUBIECTELOR PROBEI PRACTICE

BAZE DE DATE - Oracle

Subiectul nr.1Să se creeze o tabelă cu structura: Cod_numeric_personal,Numele,Data_angajarii, Data_naşterii şi să se introducă 8 articole cu date care să corespundă cerinţelor următoare:

a)Să se afişeze pe ecran toţi angajaţii cu o cevchime mai mare de 10 ani.b)Să se afişeze toate persoanele a căror zi de naştere se sărbătoreşte astăzi.

Crearea structurii tabeluluiCREATE TABLE Angajati (Cod_numeric_personal VARCHAR(13) PRIMARY KEY, Numele VARCHAR(50) , Data_angajarii DATE, Data_nasterii DATE)

Inserarea datelor in tabelINSERT INTO Angajati VALUES ('1500210384145','Popescu Ion', '12-04-1998', '10-02-1950')INSERT INTO Angajati VALUES ('1581010384045','Preda Mihai', '12-10-2005', '10-10-1958')INSERT INTO Angajati VALUES ('1800505384010','Deaconu Ana', '25-08-2009', '05-05-1980')INSERT INTO Angajati VALUES ('1701212384510','Vasilescu Dorel', '01-01-1998', '12-12-1970')INSERT INTO Angajati VALUES ('1651111384511','Bujor Adelina', '25-04-1985', '11-11-1965')INSERT INTO Angajati VALUES ('1751111384523','Grigorescu Radu', '25-04-2000', '11-11-1975')INSERT INTO Angajati VALUES ('1681111384525','Croitoru Andreea', '25-10-1989', '11-11-1968')INSERT INTO Angajati VALUES ('1800407384141','Voinea Mihaela', '25-10-2006', '07-04-1980')

Cerinţa a) SELECT * FROM Angajati WHERE CURRENT_DATE - Data_angajarii>3650

Cerinţa b)SELECT * FROM Angajati WHERE (LAST_DAY(CURRENT_DATE)-CURRENT_DATE=LAST_DAY(Data_nasterii)-Data_nasterii) AND MOD(MONTHS_BETWEEN(CURRENT_DATE,Data_nasterii),12)=0

Subiectul nr.2Să se creeze o tabelă cu structura: Număr bilet, Oraş, Preţ, Număr_vagon şi să se introducă 8 articole. Cerinţe

a)Să se calculeze suma realizată în urma vânzării tuturor biletelor înregistrate în tabelă.b)Să se afişeze pe ecran numărul de bilete vândute cu destinaţia un anumit oraş X, citit de la tastatură.

Crearea structurii tabeluluiCREATE TABLE Bilete (numar_bilet NUMBER(10) PRIMARY KEY, oras VARCHAR(50) ,pret NUMBER(5,2), numar_vagon NUMBER(2,0))

Inserarea datelor in tabel

Page 2: Rezolvare Subiecte Baze de Date Neintensiv

INSERT INTO Bilete VALUES (1,'Bucuresti', 25, 2)INSERT INTO Bilete VALUES (2,'Sibiu', 45, 1)INSERT INTO Bilete VALUES (3,'Bucuresti', 28.50, 2)INSERT INTO Bilete VALUES (4,'Rm. Valcea', 17, 4)INSERT INTO Bilete VALUES (5,'Calimanesti', 20, 1)INSERT INTO Bilete VALUES (6,'Bucuresti', 30, 6)INSERT INTO Bilete VALUES (7,'Sibiu', 40, 6)INSERT INTO Bilete VALUES (8,'Rm. Valcea', 20.5, 4)

Cerinţa a) SELECT SUM(pret) "Vanzare totala"FROM Bilete

Cerinţa b)SELECT SUM(pret) "Vanzare totala"FROM BileteWHERE UPPER(oras)=UPPER(:Destinatie)

Subiectul nr.3Să se creeze o tabelă cu structura : Cod_casetă. Nume_film, Actor_principal, Tip. Să se introducă în tabelă minimum 8 articole , cu date care să corespundă următoarelor cerinţe:

a)Să se şteargă din tabelă toate filmele de tip HORROR.b)Să se listeze pe monitor toate filmele în care joacă actorul RICHARD GERE.

Crearea structurii tabeluluiCREATE TABLE Casete (cod_caseta NUMBER(10) PRIMARY KEY, nume_film VARCHAR(50) ,actor_principal VARCHAR2(50), tip VARCHAR2(30))

Inserarea datelor in tabelINSERT INTO Casete VALUES (1,'Morometii', 'Victor Rebegiuc', 'Drama')INSERT INTO Casete VALUES (2,'Toamna la New York', 'Richard Gere', 'Drama')INSERT INTO Casete VALUES (3,'Tacerea mieilor', 'Anthony Hopkins', 'Horror')INSERT INTO Casete VALUES (4,'The Shining', 'Jack Nicholson', 'Horror')INSERT INTO Casete VALUES (5,'Nea Marin miliardar', 'Amza Pellea', 'Comedie')INSERT INTO Casete VALUES (6,'Cavalerii mesei rotunde', 'Richard Gere', 'Aventura')INSERT INTO Casete VALUES (7,'Afaceri interne', 'Richard Gere', 'Aventura')INSERT INTO Casete VALUES (8,'Cel mai iubit dintre pamanteni', 'Stefan Iordache', 'Drama')

Cerinţa a) Afişarea filmelor Horror în vederea identificării înregistrărilor ce vor fi şterse:

SELECT * FROM CaseteWHERE UPPER(tip)='HORROR'

Ştergerea efectivă a filmelor HorrorDELETE FROM CaseteWHERE UPPER(tip)='HORROR'

Cerinţa b)SELECT * FROM CaseteWHERE UPPER(actor_principal)='RICHARD GERE'

Subiectul nr.4Să se creeze o tabelă cu următoarea structură:Cod_ furnizor, Cod_material, Nume_ material, Pret, Cantitate. Să se introducă în tabelă minimum 8 articole.Cerinţe:

Page 3: Rezolvare Subiecte Baze de Date Neintensiv

a)Să se afişeze toate ofertele pentru materialul X – dat de la tastatură, crescător, după preţul oferit.b)Să se afişeze preţul total al materialelor oferite de furnizorul Y- citit de la tastatură.

Datele introduse în tabelă trebuie să corespundă cerinţelor enunţate mai sus.

Crearea structurii tabeluluiCREATE TABLE Materiale (cod_material NUMBER(10), cod_furnizor NUMBER(10), nume_material VARCHAR(50) , pret NUMBER(8,2), cantitate NUMBER(5))Inserarea datelor in tabel

INSERT INTO Materiale VALUES (1,1,'Ciment sac 50 kg',20,100)INSERT INTO Materiale VALUES (2,1,'Var sac 50 kg',10,200)INSERT INTO Materiale VALUES (3,2,'Cuie 1kg',15,150)INSERT INTO Materiale VALUES (1,1,'Ciment sac 50 kg',20,400)INSERT INTO Materiale VALUES (2,1,'Var sac 50 kg',10,400)INSERT INTO Materiale VALUES (4,3,'Parchet laminat',40,50)INSERT INTO Materiale VALUES (4,3,'Parchet laminat cires',45,100)INSERT INTO Materiale VALUES (5,3,'Faianta mp',25,200)

Cerinţa a) SELECT * FROM MATERIALEWHERE cod_material=:xORDER BY pret desc

Cerinţa b)SELECT SUM(PRET)"Suma preturi" FROM MATERIALEWHERE cod_furnizor=:x

Subiectul nr.5Să se creeze o tabelă cu structura: Nume_muncitor, Cod_atelier, Număr_piese_produse şi să se introducă 8 articole (un articol –un muncitor, codul unui atelier este un număr de la 1 la 9; pot fi şi mai mulţi muncitori într-un atelier şi toţi au nume diferite ).Cerinţe:

a)Să se afişeze numărul atelierelor din tabelă.b)Să se afişeze numărul de piese produse de fiecare atelier.

Crearea structurii tabeluluiCREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5))

Inserarea datelor in tabelINSERT INTO Muncitori VALUES ('Popa Ion',1,100)INSERT INTO Muncitori VALUES ('Popa Mihai',1,200)INSERT INTO Muncitori VALUES (‘Deaconu Dorel',2,500)INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400)INSERT INTO Muncitori VALUES ('Popescu Victor',2,150)INSERT INTO Muncitori VALUES ('Enache Vasile',4,200)INSERT INTO Muncitori VALUES ('Albu Andrei',2,400)INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300)

Cerinţa a) SELECT COUNT(DISTINCT cod_atelier) "Numar de ateliere"FROM Muncitori

Cerinţa b)SELECT cod_atelier, SUM(numar_piese_produse) "Piese produse"FROM MuncitoriGROUP BY cod_atelier

Page 4: Rezolvare Subiecte Baze de Date Neintensiv

Subiectul nr.6Să se creeze o tabelă cu structura: Nume_muncitor, Cod_atelier, Număr_piese_produse şi să se introducă 8 articole (un articol –un muncitor, codul unui atelier este un număr de la

1 la 9; pot fi şi mai mulţi muncitori într-un atelier şi toţi au nume diferite ).Cerinţe:a)Să se afişeze codul atelierului din tabelă cu cei mai mulţi muncitori.b)Să se afişeze codul atelierului în care numărul de piese produse este mai mare decât o valoare introdusă de la tastatură.

Crearea structurii tabeluluiCREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5))

Inserarea datelor in tabelINSERT INTO Muncitori VALUES ('Popa Ion',1,100)INSERT INTO Muncitori VALUES ('Popa Mihai',1,200)INSERT INTO Muncitori VALUES (‘Deaconu Dorel',2,500)INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400)INSERT INTO Muncitori VALUES ('Popescu Victor',2,150)INSERT INTO Muncitori VALUES ('Enache Vasile',4,200)INSERT INTO Muncitori VALUES ('Albu Andrei',2,400)INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300)

Cerinţa a) SELECT cod_atelier, COUNT(*) "Numar maxim de muncitori"FROM MuncitoriGROUP BY cod_atelierHAVING COUNT(*)=(SELECT MAX(COUNT(*)) FROM Muncitori GROUP BY Cod_atelier)

Cerinţa b)SELECT cod_atelier, SUM(numar_piese_produse) "Piese produse de atelier"FROM MuncitoriGROUP BY cod_atelierHAVING SUM(numar_piese_produse)>:x

Subiectul nr.7Să se creeze o tabelă cu structura: Nume_muncitor, Cod_atelier, Număr_piese_produse şi să se introducă 8 articole (un articol –un muncitor, codul unui atelier este un număr de la 1 la 9 pot fi şi mai mulţi muncitori într-un atelier şi toţi au nume diferite ).Cerinţe

a)Se şterg articolele pentru care producţia unui muncitor este mai mică decât o valoare introdusă de la tastatură.Să se afişeze numele acestora şi codurile atelierelor din care făceau parte.b)Să se afişeze numărul atelierelor ce au rămas cu cel mult doi muncitori în urma ştergerii articolelor de la cerinţa a).

Crearea structurii tabeluluiCREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5))

Inserarea datelor in tabelINSERT INTO Muncitori VALUES ('Popa Ion',1,100)INSERT INTO Muncitori VALUES ('Popa Mihai',1,200)INSERT INTO Muncitori VALUES (‘Deaconu Dorel',2,500)INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400)INSERT INTO Muncitori VALUES ('Popescu Victor',2,150)INSERT INTO Muncitori VALUES ('Enache Vasile',4,200)

Page 5: Rezolvare Subiecte Baze de Date Neintensiv

INSERT INTO Muncitori VALUES ('Albu Andrei',2,400)INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300)

Cerinţa a) Pentru afişarea muncitorilor cu producţie mai mică decât x

SELECT nume_muncitor, cod_atelier FROM MuncitoriWHERE numar_piese_produse<:x

Pentru ştergerea acestoraDELETE FROM MuncitoriWHERE numar_piese_produse<:x

Cerinţa b)SELECT COUNT(*) "Nr. ateliere cu maximum 2 ang."FROM Muncitori WHERE cod_atelier IN (

SELECT cod_atelierFROM MuncitoriGROUP BY cod_atelierHAVING COUNT(*)<=2)

Subiectul nr.8Să se creeze o tabelă cu structura: Nume_muncitor, Cod_atelier,Număr_piese_produse, Salariu şi să se introducă 8 articole (un articol –un muncitor, codul unui atelier este un număr de la 1 la 9 pot fi şi mai mulţi muncitori într-un atelier şi toţi au nume diferite ).Cerinţe

a)Toţi muncitorii ce au produs un număr de piese mai mare cu cel puţin 10 % decât o valoare introdusă de la tastatură vor avea salariul majorat cu 10 %. Să se afişeze salariile acestora (după mărirea salariilor) şi codul atelierelor din care făceau parte.b) Să se afişeze suma totală necesară măririi salariilor de la cerinţa a) şi codul atelierului cu cei mai mulţi muncitori cu salarii mărite.

Crearea structurii tabeluluiCREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5), salariu NUMBER(6,2))

Inserarea datelor in tabelINSERT INTO Muncitori VALUES ('Popa Ion',1,100,1200)INSERT INTO Muncitori VALUES ('Popa Mihai',1,200, 1000)INSERT INTO Muncitori VALUES (‘Deaconu Dorel',2,500,1500)INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400,900)INSERT INTO Muncitori VALUES ('Popescu Victor',2,150,1300)INSERT INTO Muncitori VALUES ('Enache Vasile',4,200,1000)INSERT INTO Muncitori VALUES ('Albu Andrei',2,400,1300)INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300,1400)

Cerinţa a) Modificarea salariilor

UPDATE MuncitoriSET salariu=salariu*1.10WHERE numar_piese_produse>1.10*:x

Pentru afişarea muncitorilor cărora li s-a mărit salariulSELECT nume_muncitor, cod_atelier, salariuFROM Muncitori

Page 6: Rezolvare Subiecte Baze de Date Neintensiv

WHERE numar_piese_produse>1.10*:xCerinţa b)

Calculul sumei necesare maririiSELECT SUM(salariu-salariu/1.10) "Suma necesara maririi"FROM MuncitoriWHERE numar_piese_produse>1.10*:x

Codul atelierului cu cele mai multe salarii măriteSELECT cod_atelier FROM MuncitoriWHERE numar_piese_produse>1.10*:xgroup by cod_atelierhaving count(*)= ( SELECT max(count(*)) FROM Muncitori WHERE numar_piese_produse>1.10*:x group by cod_atelier)

Subiectul nr.9Să se creeze o tabelă cu structura: Nume_muncitor, Cod_atelier,Număr_piese_produse, Vărstă şi să se introducă 8 articole (un articol –un muncitor, codul unui atelier este un număr de la 1 la 9 pot fi şi mai mulţi muncitori într-un atelier şi toţi au nume diferite ).Cerinţe

a).Pentru a putea lucra în străinătate, un muncitor trebuie să aibă o vârstă cel mult egală cu o valoare introdusă de la tastatură şi să producă un număr de piese cel puţin egal cu o valoare introdusă de la tastatură.Să se afişeze numele celor ce îndeplinesc ambele condiţii şi atelierele în care lucrează aceştia.

b) Să se afişeze numărul mediu de piese produse de toţi cei selectaţi la prima cerinţă.

Crearea structurii tabeluluiCREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5), varsta NUMBER(2))

Inserarea datelor in tabelINSERT INTO Muncitori VALUES ('Popa Ion',1,100,30)INSERT INTO Muncitori VALUES ('Popa Mihai',1,200, 45)INSERT INTO Muncitori VALUES (‘Deaconu Dorel',2,500,35)INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400,42)INSERT INTO Muncitori VALUES ('Popescu Victor',2,150,55)INSERT INTO Muncitori VALUES ('Enache Vasile',4,200,80)INSERT INTO Muncitori VALUES ('Albu Andrei',2,400,33)INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300,49)

Cerinţa a) SELECT * FROM MuncitoriWHERE varsta<=:varsta and numar_piese_produse>=:nr_piese

Cerinţa b)SELECT AVG(numar_piese_produse) "Numar mediu piese"FROM MuncitoriWHERE varsta<=:varsta and numar_piese_produse>=:nr_piese

Page 7: Rezolvare Subiecte Baze de Date Neintensiv

Subiectul nr.10Să se creeze o tabelă cu structura: Nume_muncitor, Cod_atelier,Număr_piese_produse, Număr copii minori şi să se introducă 8 articole (un articol –un muncitor, codul unui atelier este un număr de la 1 la 9 pot fi şi mai mulţi muncitori într-un atelier şi toţi au nume diferite ).Cerinţe

a)Să se afişeze o listă cu muncitorii din fiecare atelier (codul atelierului şi apoi toţi muncitorii din acel atelier şi la fel pentru fiecare atelier).b)Să se afişeze numărul tuturor copiilor minori ai tutror muncitorilor din tabelă.

Crearea structurii tabeluluiCREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5), numar_copii_minori NUMBER(2))

Inserarea datelor in tabelINSERT INTO Muncitori VALUES ('Popa Ion',1,100,1)INSERT INTO Muncitori VALUES ('Popa Mihai',1,200, 2)INSERT INTO Muncitori VALUES (‘Deaconu Dorel',2,500,0)INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400,0)INSERT INTO Muncitori VALUES ('Popescu Victor',2,150,2)INSERT INTO Muncitori VALUES ('Enache Vasile',4,200,1)INSERT INTO Muncitori VALUES ('Albu Andrei',2,400,3)INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300,1)

Cerinţa a) SELECT cod_atelier, nume_muncitor FROM MuncitoriORDER BY cod_atelier, nume_muncitor

Cerinţa b)SELECT SUM(numar_copii_minori) "Numar total copii minori"FROM Muncitori

Subiectul nr.11Să se creeze o tabelă cu structura: Nume_muncitor, Cod_atelier,Număr_piese_produse, şi să se introducă 8 articole (un articol –un muncitor, codul unui atelier este un număr de la 1 la 9 pot fi şi mai mulţi muncitori într-un atelier şi toţi au nume diferite ).Cerinţe

a)Să se afişeze numărul mediu de piese produse de un muncitor (număr total de piese / număr muncitori).b)Să se afişeze numărul mediu de piese produse de un atelier )număr total piese / număr ateliere)

Crearea structurii tabeluluiCREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5))

Inserarea datelor in tabelINSERT INTO Muncitori VALUES ('Popa Ion',1,100)INSERT INTO Muncitori VALUES ('Popa Mihai',1,200)INSERT INTO Muncitori VALUES (‘Deaconu Dorel',2,500)INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400)INSERT INTO Muncitori VALUES ('Popescu Victor',2,150)INSERT INTO Muncitori VALUES ('Enache Vasile',4,200)INSERT INTO Muncitori VALUES ('Albu Andrei',2,400)INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300)

Page 8: Rezolvare Subiecte Baze de Date Neintensiv

Cerinţa a) SELECT AVG(numar_piese_produse) "Numar mediu piese "FROM Muncitori

Cerinţa b)SELECT SUM(numar_piese_produse)/COUNT(DISTINCT cod_atelier) "Numar mediu piese/atelier"FROM Muncitori

Subiectul nr.12Să se creeze o tabelă cu structura: Nume_muncitor, Cod_atelier,Număr_piese_produse, şi să se introducă 8 articole (un articol –un muncitor, codul unui atelier este un număr de la 1 la 9 pot fi şi mai mulţi muncitori într-un atelier şi toţi au nume diferite ).Cerinţe:

a) Să se şteargă articolele referitoare la muncitorii ce produc un număr de piese mai mic decât un număr introdus de la tastatură şi să se depună într-o tabelă nouă (cu structura Nume_muncitor, , Număr_piese), apoi să se sorteze alfabetic noua tabelă după câmpul Nume_ muncitor şi să se afişeze sortată.

b) Să se afişeze tabela iniţială, după transferul precizat la cerinţa a ).

Crearea structurii tabeluluiCREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5))

Inserarea datelor in tabelul iniţialINSERT INTO Muncitori VALUES ('Popa Ion',1,100)INSERT INTO Muncitori VALUES ('Popa Mihai',1,200)INSERT INTO Muncitori VALUES (‘Deaconu Dorel',2,500)INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400)INSERT INTO Muncitori VALUES ('Popescu Victor',2,150)INSERT INTO Muncitori VALUES ('Enache Vasile',4,200)INSERT INTO Muncitori VALUES ('Albu Andrei',2,400)INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300)

Cerinţa a) Crearea structurii tabelului Muncitori2 în care se vor copia muncitorii ce au realizat un număr de piese mai mic decât o valoare introdusă de la tastatură.

CREATE TABLE Muncitori2 (nume_muncitor VARCHAR(50) UNIQUE, numar_piese_produse NUMBER(5))

Copierea muncitorilor în al doilea tabelINSERT INTO Muncitori2SELECT nume_muncitor, numar_piese_produseFROM MuncitoriWHERE numar_piese_produse<:X

Ştergerea înregistrărilor copiate din tabelul iniţial DELETE FROM MuncitoriWHERE numar_piese_produse<:X

Afişarea muncitorilor din tabela nou creată sortată după numele muncitoruluiSELECT * FROM Muncitori2ORDER BY nume_muncitor

Cerinţa b)SELECT * FROM Muncitori

Page 9: Rezolvare Subiecte Baze de Date Neintensiv

Subiectul nr.13Să se creeze o tabelă cu structura:Nume_muncitor, Cod_atelier, Număr_piese_produse, şi să se introducă 8 articole (un articol –un muncitor, codul unui atelier este un număr de la 1 la 9 pot fi şi mai mulţi muncitori într-un atelier şi toţi au nume diferite ).Cerinţe:

a) Se citeşte de la tastatură un cod de atelier existent în tabelă.În acel atelier se angajează un muncitor nou pentru care se introduc date de la tastatură. Câmpul Număr_ piese se va completa cu valoarea 0. Să se afişeze apoi numărul minim necesar de piese pe care noul venit trebuie să le producă astfel încât producţia medie a acelui atelier să nu scadă.

b) Se citeşte de la tastatură un nume de muncitor şi un cod de atelier. Dacă muncitorul figurează în acel atelier din tabelă, atunci să i se schimbe codul atelierului său cu un alt cod introdus (existent în tabelă ) de la tastatură (se mută de la un atelier la altul). Dacă acel muncitor nu figurează în atelierul dat , atunci se va afisa un mesaj.

Crearea structurii tabeluluiCREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5))

Inserarea datelor in tabelINSERT INTO Muncitori VALUES ('Popa Ion',1,100)INSERT INTO Muncitori VALUES ('Popa Mihai',1,200)INSERT INTO Muncitori VALUES (‘Deaconu Dorel',2,500)INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400)INSERT INTO Muncitori VALUES ('Popescu Victor',2,150)INSERT INTO Muncitori VALUES ('Enache Vasile',4,200)INSERT INTO Muncitori VALUES ('Albu Andrei',2,400)INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300)

Cerinţa a) Adăugarea muncitorului

INSERT INTO MuncitoriVALUES (:nume, :atelier, 0)

Calculul valorii minime a numărului de pieseSELECT CEIL(AVG(numar_piese_produse))FROM MuncitoriWHERE cod_atelier=: atelier AND numar_piese_produse>0

Cerinţa b)UPDATE Muncitori SET cod_atelier=:atelier_nouWHERE (UPPER(nume_muncitor)=UPPER(:nume)) AND (cod_atelier=:atelier)

Subiectul nr.14Să se creeze o tabelă cu structura: Nume_muncitor, Cod_atelier,Număr_piese_produse, şi să se introducă 8 articole (un articol – un muncitor, codul unui atelier este un număr de la 1 la 9 pot fi şi mai mulţi muncitori într-un atelier şi toţi au nume diferite ).Cerinţe:

a) Muncitorul /muncitorii cu număr maxim de piese produse se va / vor transfera la alt loc de muncă.Să se afişeze in ordine alfabetică numele celor transferaţi.

b) Să se afişeze numărul mediu de piese produse de către cei rămaţi în vechile ateliere.

Crearea structurii tabelului

Page 10: Rezolvare Subiecte Baze de Date Neintensiv

CREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5))

Inserarea datelor in tabelul iniţialINSERT INTO Muncitori VALUES ('Popa Ion',1,100)INSERT INTO Muncitori VALUES ('Popa Mihai',1,200)INSERT INTO Muncitori VALUES (‘Deaconu Dorel',2,500)INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400)INSERT INTO Muncitori VALUES ('Popescu Victor',2,150)INSERT INTO Muncitori VALUES ('Enache Vasile',4,200)INSERT INTO Muncitori VALUES ('Albu Andrei',2,400)INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300)

Cerinţa a) Mutarea la un alt loc de muncă a muncitorilor cu număr maxim de piese e realizată prin completarea cu NULL a valorilor din coloana COD_ATELIER corespunzătoare acestora.

UPDATE Muncitori SET cod_atelier=NULLWHERE numar_piese_produse=(SELECT MAX(numar_piese_produse) FROM Muncitori)

Cerinţa b)SELECT AVG(numar_piese_produse) "Nr. mediu piese pt.cei ramasi"FROM MuncitoriWHERE cod_atelier IS NOT NULL

Subiectul nr.15Să se creeze o tabelă cu structura : Cod_material, Pret_unitar, Cantitate, Stoc_necesar şi să se introducă 8 articole (un articol - un produs dintr-un depozit;cantitate – existentul din depozit; stoc_necesar = cantitatea minima ncesara in depozit; valoarea unui produs = cantitatea * pret unitar).Cerinte:

a) Să se afişzeze codurile produselor pentru care cantitatea existentă este mai mică decât stocul necesar . Pentru fiecare dintre aceste produse se va afişa ce cantitate trebuie adaugată pentru a realiza o cantitate egală cu acel stoc_necesar.

b) Să se afişeze codurile produselor ce au cantitate mai mare cu cel puţin 20 % decât stoc_ necesar, în ordinea codurilor.

Crearea structurii tabeluluiCREATE TABLE Stoc ( cod_material NUMBER(10) PRIMARY KEY, pret_unitar NUMBER(10,2), cantitate NUMBER(10), stoc_necesar NUMBER(10))

Inserarea datelor in tabelINSERT INTO Stoc VALUES (1, 10.5, 200, 500)INSERT INTO Stoc VALUES (2, 18, 1000, 300)INSERT INTO Stoc VALUES (3, 25.9, 600, 1000)INSERT INTO Stoc VALUES (4, 80, 1500, 500)INSERT INTO Stoc VALUES (5, 36.5, 250, 600)INSERT INTO Stoc VALUES (6, 12.5, 50, 10)INSERT INTO Stoc VALUES (7, 100, 25, 22)INSERT INTO Stoc VALUES (8, 100, 130, 135)

Cerinţa a) SELECT cod_material, cantitate, stoc_necesar, stoc_necesar-cantitate "De aprovizionat"FROM StocWHERE cantitate<stoc_necesar

Page 11: Rezolvare Subiecte Baze de Date Neintensiv

Cerinţa b)SELECT * FROM StocWHERE cantitate>=1.20*stoc_necesarORDER BY cod_material

Subiectul nr.16Să se creeze o tabelă cu structura Cod materia, Pret unitar, Cantitate, Stoc necesar si să se introducă 8 articole (un articol- un produs dintr-un depozit, cantitate= existentul depozit , valoarea unui produs = cantitatea *preţ-unitar ). Cerinţe:

a)Se citesc de la tastatură un cod de material şi o cantitate . Dacă acel produs este în tabelă şi dacă se poate livra (cantitatea din depozit este cel puţin egală cu cea citită), atunci să se afişeze cantitatea rămasă în depozit pentru livrare. Dacă acea cantitate rămasă în depozit este mai mică decât stocul necesar, se va afişa un mesaj. Dacă nu există acel produs sau nu e în cantitatea dorită, se va afişa un alt mesaj.b)Se introduc de la tastatură un cod de material ( c) şi o cantitate (k) .Dacă acel cod corespunde unui produs existent , atunci se va mări pentru el cantitatea existentă în depozit cu valoarea k. Dacă nu există, atunci se va adăuga un nou articol avand câmpurile preţ_unitar şi stoc _necesar introduse de la tastatură.

Crearea structurii tabeluluiCREATE TABLE Stoc ( cod_material NUMBER(10) PRIMARY KEY, pret_unitar NUMBER(10,2), cantitate NUMBER(10), stoc_necesar NUMBER(10))

Inserarea datelor in tabelINSERT INTO Stoc VALUES (1, 10.5, 200, 500)INSERT INTO Stoc VALUES (2, 18, 1000, 300)INSERT INTO Stoc VALUES (3, 25.9, 600, 1000)INSERT INTO Stoc VALUES (4, 80, 1500, 500)INSERT INTO Stoc VALUES (5, 36.5, 250, 600)INSERT INTO Stoc VALUES (6, 12.5, 50, 10)INSERT INTO Stoc VALUES (7, 100, 25, 22)INSERT INTO Stoc VALUES (8, 100, 130, 135)

Notă! Deoarece rezolvarea cerinţelor folosind Oracle ar necesita cunoştinţe de PL/SQL, limbaj ce nu este inclus în programa de la neintensiv, se vor scrie comenzi SQL ce sunt aproximativ echivalente.

Cerinţa a) SELECT cod_material, cantitate "Cantitate initiala", DECODE(SIGN(cantitate-:cantitate_livrata),1, 'Se poate livra', -1,'Nu se poate livra') "Stare livrare",DECODE(SIGN(cantitate-:cantitate_livrata),1, cantitate-:cantitate_livrata, -1,cantitate) "Cantitate ramasa", DECODE(SIGN(cantitate-:cantitate_livrata-stoc_necesar), -1, 'Necesita aprovizionare' , 1,'Stoc suficient') "Situatie stoc in urma livrarii", stoc_necesarFROM Stocwhere cod_material=:cod_mat

Cerinţa b)Modificarea stocului pentru materialul citit

UPDATE StocSET CANTITATE=CANTITATE+:cant_adaugata

Page 12: Rezolvare Subiecte Baze de Date Neintensiv

where cod_material=:cod_matAfişarea materialului căruia i s-a modificat stocul

SELECT * FROM StocWHERE cod_material=:cod_mat

Dacă interogarea anterioară nu afişează nici un material, se va scrie comanda de mai jos pentru adăugarea materialului dorit în tabela Stoc.

INSERT INTO StocVALUES (:cod_mat, :pret, :cantitate,:stoc_necesar)

Subiectul nr.17Să se creeze o tabelă cu structura: Nume _autor, Titlu, Nr_Exemplare_imprumutate, Data_imprumut şi să se introducă cel puţin 8 articole. Cerinte

a) Să se afişeze numele autorului cu cele mai multe titluri.b) Să se afişeze numele autorului cu cele mai puţine carţi solicitate pentru împrumut în

luna curentă.

Crearea structurii tabeluluiCREATE TABLE CARTI (nume_autor VARCHAR2(50), titlu VARCHAR(100), nr_exemplare_imprumutate NUMBER(3), data_imprumut DATE)

Inserarea datelor in tabelINSERT INTO CARTI VALUES ('Marin Preda', 'Viata ca o prada', 2,'21.04.2010')INSERT INTO CARTI VALUES ('Marin Preda', 'Morometii vol. I', 1,'20.02.2010')INSERT INTO CARTI VALUES ('Marin Preda', 'Morometii vol. II', 5,'02.05.2010')INSERT INTO CARTI VALUES ('I.L. Caragiale', 'O noapte furtunoasa', 1,'02.04.2010')INSERT INTO CARTI VALUES ('I.L. Caragiale', 'D-ale carnavalului', 2,'10.05.2010')INSERT INTO CARTI VALUES ('Mihai Eminescu', 'Poezii', 6,'12.05.2010')INSERT INTO CARTI VALUES ('Nichita Stanescu', 'Sensul iubirii', 2,'12.04.2010')INSERT INTO CARTI VALUES ('Nichita Stanescu', 'In dulcele stic clasic', 1,'01.05.2010')

Cerinţa a) SELECT nume_autor,count(DISTINCT titlu) "Numar volume"FROM CARTIGROUP BY nume_autor HAVING COUNT(*)= (SELECT MAX(COUNT(DISTINCT titlu)) FROM CARTI GROUP BY nume_autor )

Cerinţa b)SELECT nume_autor,SUM(nr_exemplare_imprumutate) "Numar minim pt luna curenta"FROM CARTIWHERE MONTHS_BETWEEN(LAST_DAY(CURRENT_DATE),DATA_IMPRUMUT)<1GROUP BY nume_autor HAVING SUM(nr_exemplare_imprumutate) = (SELECT MIN(SUM(nr_exemplare_imprumutate)) FROM CARTI GROUP BY nume_autor )

Subiectul nr.18Să se creeze o tabelă cu structura: Nume_angajat, Salariu, Numar _copii_minori, Numar_zile_ concediu_medical şi să se introducă cel puţin 8 articole. Un articol reprezintă un angajat din întreprindere.Cerinţe:

Page 13: Rezolvare Subiecte Baze de Date Neintensiv

a).Să se afişeze numele angajatului cu cele mai multe zile de concediu medical.b).Să se afişeze salariul mediu al celor ce au avut concediu medical şi care au cel puţin un copil minor.

Crearea structurii tabeluluiCREATE TABLE ANG_CONCEDII (nume_angajat VARCHAR2(50), salariu NUMBER(6,2), numar_copii_minori NUMBER(1), numar_zile_concediu_medical NUMBER(3))

Inserarea datelor in tabelINSERT INTO ANG_CONCEDII VALUES ('Popescu Darius', 1500, 2,0)INSERT INTO ANG_CONCEDII VALUES ('Bujor Adelina', 1200, 0,15)INSERT INTO ANG_CONCEDII VALUES ('Dinca Alexandru', 800, 1,30)INSERT INTO ANG_CONCEDII VALUES ('Eftimie Florin', 750, 2,10)INSERT INTO ANG_CONCEDII VALUES ('Dumitrescu Ion', 853, 0,25)INSERT INTO ANG_CONCEDII VALUES ('Tudor Vasile', 1254, 2,0)INSERT INTO ANG_CONCEDII VALUES ('Albu Diana', 987, 1,45)INSERT INTO ANG_CONCEDII VALUES ('Dumitrascu Viorel', 1350, 2,28)

Cerinţa a) SELECT nume_angajat, numar_zile_concediu_medicalFROM ang_concediiWHERE numar_zile_concediu_medical= (SELECT MAX(numar_zile_concediu_medical)FROM ang_concedii)

Cerinţa b)SELECT AVG(salariu) "Salariu mediu"FROM ang_concediiWHERE numar_zile_concediu_medical>0 AND numar_copii_minori>=1

Subiectul nr.19Să se creeze o tabelă cu structura: Nume_medic, Nume _pacient, Diagnostic, Data_consultului şi să se introducă cel puţin 8 articole. Un articol reprezintă un pacient dintr-o policlinică (un consult - un articol). Cerinţe

a) Să se afişeze numărul pacienţilor consultaţi în luna curentă de către un medic al cărui nume se introduce de la tastatură.

b) Să se afişeze diagnosticul cel mai frecvent pus în luna curentă.

Crearea structurii tabeluluiCREATE TABLE consultatii(nume_medic VARCHAR2(50), nume_pacient VARCHAR2(50), diagnostic VARCHAR2(50), data_consultului DATE)

Inserarea datelor in tabelul iniţialINSERT INTO consultatii VALUES ('Popescu Darius', 'Ionescu Vasile', 'Bronsita','21-05-2010')INSERT INTO consultatii VALUES ('Popescu Darius', 'Dragnea Relu', 'Insuficienta respiratorie','01-05-2010')INSERT INTO consultatii VALUES ('Dobre Andra', 'Voinea Alina', 'Bronsita','01-04-2010')INSERT INTO consultatii VALUES ('Dobre Andra', 'Hundrea Calin', 'Pneumonie','22-04-2010')INSERT INTO consultatii VALUES ('Dobre Andra', 'Bunescu Sorana', 'Insuficienta cardiaca','12-03-2010')INSERT INTO consultatii VALUES ('Vladulescu Daniel', 'Gheorghe Cristina', 'Insuficienta cardiaca','01-05-2010')INSERT INTO consultatii VALUES ('Dobre Andra', 'Bujor George', 'Insuficienta cardiaca','14-05-2010')INSERT INTO consultatii VALUES ('Vladulescu Daniel', 'Popescu Mihaela', 'Reumatism acut','10-05-2010')

Page 14: Rezolvare Subiecte Baze de Date Neintensiv

Cerinţa a) SELECT COUNT(*)FROM consultatiiWHERE UPPER(nume_medic)=UPPER(:medic) AND ABS(MONTHS_BETWEEN(LAST_DAY(CURRENT_DATE),LAST_DAY(data_consultului)))<1

Cerinţa b)SELECT diagnosticFROM consultatiiWHERE ABS(MONTHS_BETWEEN(LAST_DAY(CURRENT_DATE),LAST_DAY(data_consultului)))<1GROUP BY diagnosticHAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM consultatii WHERE ABS(MONTHS_BETWEEN(LAST_DAY(CURRENT_DATE),LAST_DAY(data_consultului)))<1 GROUP BY diagnostic)

Subiectul nr.20Să se creeze o tabelă cu structura: Nume _elev, Clasa, Promovat, în care să se introducă cel puţin 8 articole. Un articol reprezintă un elev dintr-o clasă a unei şcoli. Cerinte

a)Să se afişeze clasa cu cel mai mare procent de promovabilitate.b)Să se afişeze numele elevilor nepromovaţi dintr-o clasă introdusă de la tastatură.

Crearea structurii tabeluluiCREATE TABLE elevi (nume_elev VARCHAR2(50), clasa VARCHAR2(10), promovat NUMBER(1))

Inserarea datelor in tabelul iniţialINSERT INTO elevi VALUES('Popa Daniel','12A',1)INSERT INTO elevi VALUES('Popa Maria','12B',1)INSERT INTO elevi VALUES('Deaconu Ion','12A',0)INSERT INTO elevi VALUES('Deaconu Ana','12C',1)INSERT INTO elevi VALUES('Vlad Mihai','12B',0)INSERT INTO elevi VALUES('Croitoru Andrei','12A',0)INSERT INTO elevi VALUES('Jianu Dan','12C',1)INSERT INTO elevi VALUES('Jianu Angela','12B',1)

Cerinţa a) SELECT clasa, AVG(promovat) "Procent maxim de promovare"FROM eleviGROUP BY clasaHAVING AVG(promovat)=(SELECT MAX(AVG(promovat)) FROM elevi GROUP BY clasa)

Cerinţa b)SELECT *FROM eleviWHERE UPPER(clasa)=UPPER(:Clasa) and promovat=0ORDER BY nume_elev

Subiectul nr.21Să se creeze o tabelă cu următoarea structură : Cod_aliment, Den_aliment, Calorii, în care să sec introducă minimum 8 articole . Cerinţe

a) Să se adauge la sfârşitul tabelei 3 înregistrări noi.b) Să se afişeze o listă având câmpurile : den_aliment,calorii in ordinea descrescatoare a caloriilor.

Page 15: Rezolvare Subiecte Baze de Date Neintensiv

Crearea structurii tabeluluiCREATE TABLE alimente (cod_aliment NUMBER(10) PRIMARY KEY, den_aliment VARCHAR2(50), calorii NUMBER(5))

Inserarea datelor in tabelul iniţialINSERT INTO alimente VALUES(1,'Oua',100)INSERT INTO alimente VALUES(2,'Branza FETA',300)INSERT INTO alimente VALUES(3,'Branza degresata',50)INSERT INTO alimente VALUES(4,'Lapte 100 ml',80)INSERT INTO alimente VALUES(5,'Carne porc 100 g',500)INSERT INTO alimente VALUES(6,'Carne vita 100 g',400)INSERT INTO alimente VALUES(7,'File pangasius 100 g',150)INSERT INTO alimente VALUES(8,'File crap 100 g',180)

Cerinţa a) INSERT INTO alimente VALUES(9,'Pastrav 100 g',120)INSERT INTO alimente VALUES(10,'Unt 100 g',460)INSERT INTO alimente VALUES(11,'Paste 100 g',230)

Cerinţa b)SELECT den_aliment, caloriiFROM alimenteORDER BY calorii DESC

Subiectul nr.22

Să se creeze , la nivel de întreprindere , o tabelă cu următoarea structură : Nume, Cod_ pers, Adresa, Salariu, în care să se introducă minimum 8 articole. Cerinţe

a) Să se modifice adresa angajatului al cărui nume a fost introdus de la tastatură.b) Să se afişeze salariu mediu pe întreprindere.

Crearea structurii tabeluluiCREATE TABLE ANGAJATI2 (nume VARCHAR2(50), cod_pers NUMBER(10) PRIMARY KEY, adresa VARCHAR2(150), salariu NUMBER(8,2))

Inserarea datelor in tabelul iniţialINSERT INTO angajati2 VALUES('Dumitrescu Ionel',1, 'Strada Mihail Eminescu nr. 2',1200)INSERT INTO angajati2 VALUES('Popescu Dorel',2, 'Strada Mihail Eminescu nr. 25',1450)INSERT INTO angajati2 VALUES('Croitoru Madalina',3, 'Strada Nicolae Iorga nr. 4',890)INSERT INTO angajati2 VALUES('Ancutoiu Robert',4, 'Strada Calea lui Traian nr. 10',1500)INSERT INTO angajati2 VALUES('Andreescu Andrada',5, 'Strada Calea lui Traian nr. 2',1333)INSERT INTO angajati2 VALUES('Branescu Mihaela',6, 'Strada Aleea Teilor nr. 1',1458)INSERT INTO angajati2 VALUES('Voinea Mihai',7, 'Blv. Dem Radulescu nr. 4',2500)INSERT INTO angajati2 VALUES('Jianu Madalin',8, 'Blv. Carol nr. 2',1700)

Cerinţa a) UPDATE angajatiSET adresa=:Adresa_nouaWHERE UPPER(nume)=UPPER(:Nume_angajat)

Cerinţa b)SELECT AVG(salariu)FROM angajati

Page 16: Rezolvare Subiecte Baze de Date Neintensiv

Subiectul nr.23Să se creezeo tabelă cu rezultatele sportivilor participanti la Campionatul European de Fotbal în care să se introducă minimum 8 articole. Structura tabelei este următoarea :Nume _sportiv, Tara, Goluri _ marcate. Cerinţe:

a) Să se afişeze numărul tărilor participante.b) Să se afişeze numele sportivilor, numărul de goluri marcate ale unei tări introduse de la tastatură

Crearea structurii tabeluluiCREATE TABLE sportivi (nume_sportiv VARCHAR2(50), tara VARCHAR2(30), goluri_marcate NUMBER(2))

Inserarea datelor in tabelul iniţialINSERT INTO sportivi VALUES('Ruud van Nistelrooy','Olanda', 4)INSERT INTO sportivi VALUES('Milan Baros','Cehia', 5)INSERT INTO sportivi VALUES('Wayne Rooney','Anglia', 4)INSERT INTO sportivi VALUES('Frank Lampard','Anglia', 3)INSERT INTO sportivi VALUES('Zinedine Zidane','Franta', 3)INSERT INTO sportivi VALUES('Cristiano Ronaldo','Portugalia', 2)INSERT INTO sportivi VALUES('Thierry Henry','Franta', 2)INSERT INTO sportivi VALUES('Henrik Larsson','Suedia', 2)

Cerinţa a) SELECT COUNT(DISTINCT tara) "Numar tari participante"FROM sportivi

Cerinţa b)SELECT nume_sportiv, goluri_marcateFROM sportiviWHERE UPPER(tara)=UPPER(:Tara)

Subiectul nr.24Un depozit aprovizionează cu produse mai multe magazine. Să se creeze o tabelă cu următoarea structură: Cod_produs, Data_ livrare, Pret_ unitar, Cantitate, Unitate_masura, Cod_magazin, în care să se introducă minimum 8 articole. Cerinţe:

a)Pentru o data livrare Y (introdusă de la tastatură) să se afişeze toate codurile magazinelor şi produsele cu care au fost aprovizionate.b) Să se determine produsul cel mai solicitat în data_livrare X (introdusă de la tastatură) şi să se afişeze valoarea totală obţinută prin vânzarea lui.

Crearea structurii tabeluluiCREATE TABLE livrari (cod_produs NUMBER(10), data_livrare DATE, pret_unitar NUMBER(6,2), cantitate NUMBER(5), unitate_masura VARCHAR2(30), cod_magazin NUMBER(10))

Inserarea datelor in tabelul iniţialINSERT INTO livrari VALUES(1,'21-04-2010',7.50, 100, 'kg', 2)INSERT INTO livrari VALUES(1,'21-04-2010',7.50, 300, 'kg', 1)INSERT INTO livrari VALUES(2,'01-05-2010',5.70, 100, 'litru', 4)INSERT INTO livrari VALUES(2,'01-05-2010',5.70, 300, 'litru', 3)INSERT INTO livrari VALUES(2,'21-04-2010',5.70, 150, 'litru', 1)INSERT INTO livrari VALUES(3,'10-05-2010',60, 80, 'sac', 3)INSERT INTO livrari VALUES(3,'10-05-2010',60, 50, 'sac', 1)INSERT INTO livrari VALUES(4,'15-03-2010',2.50, 100, 'litru', 3)

Page 17: Rezolvare Subiecte Baze de Date Neintensiv

Cerinţa a) SELECT cod_magazin, cod_produsFROM livrariWHERE data_livrare=:Data_livrariiORDER BY 1,2

Cerinţa b)SELECT cod_produs, COUNT(*)"Numar solicitari", SUM(pret_unitar*cantitate) "Valoarea incasata"FROM livrariWHERE data_livrare=:Data_livrariiGROUP BY cod_produsHAVING COUNT(*)= (SELECT MAX(COUNT(*))FROM livrari WHERE data_livrare=:Data_livrarii GROUP BY cod_produs)

Subiectul nr.25Un magazin se aprovizionează cu produse de la mai multe depozite. Creaţi tabela cu următoarea structură:Cod_ produs, Cantitate,Pret_unitar, Unitate_masura, Cod_depozit, Data_aprovizionare, în care să introduceţi minimum 8 articole .Cerinţe:

a) Pentru un produs dat, afişaţi cantitatea cu care s-a aprovizionat magazinul în luna X (introdusă de la tastatură).

b) Afişaţi valoarea totală a mărfurilor transferate de la un depozit cu codul Z (introdus de la tastatură)

Crearea structurii tabeluluiCREATE TABLE aprovizionare (cod_produs NUMBER(10), cantitate NUMBER(5), pret_unitar NUMBER(6,2), unitate_masura VARCHAR2(30), cod_depozit NUMBER(10), data_aprovizionare DATE)

Inserarea datelor in tabelul iniţialINSERT INTO aprovizionare VALUES(1,50,7.50,'kg',100,'21-04-2010')INSERT INTO aprovizionare VALUES(1,150,7.50,'kg',200,'22-04-2010')INSERT INTO aprovizionare VALUES(2,400,5.50,'litru',200,'25-04-2010')INSERT INTO aprovizionare VALUES(3,800,4.50,'sac',200,'01-05-2010')INSERT INTO aprovizionare VALUES(4,1200,15.50,'sac',300,'01-04-2010')INSERT INTO aprovizionare VALUES(5,800,21,'litru',300,'23-04-2010')INSERT INTO aprovizionare VALUES(4,200,8.5,'litru',200,'05-05-2010')INSERT INTO aprovizionare VALUES(3,600,14.5,'litru',300,'15-05-2010')

Cerinţa a) SELECT SUM(cantitate) "Cantitatea aprovizionata"FROM aprovizionare WHERE cod_produs=:Codul_produsului AND to_number(to_char(data_aprovizionare,'mm'))=:Luna

Cerinţa b)SELECT SUM(cantitate*pret_unitar) "Valoarea marfurilor"FROM aprovizionareWHERE cod_depozit=:Codul_depozitului

Notă

Page 18: Rezolvare Subiecte Baze de Date Neintensiv

Deşi rezolvările au fost implementate efectiv în Oracle, iar comenzile scrise par a returna rezultatele aşteptate, este posibil ca, datorită volumului mare de muncă depus şi timpului limitat avut la dispoziţie, să se fi strecurat erori de sintaxă sau chiar erori logice. Rog colegii să-mi sesizeze aceste erori pentru a fi corectate şi pentru a putea republica documentul într-o formă mai bună.

Prof. Ochia Florin, Grup Şcolar Ferdinand IEmail : ochiaflorin @yahoo.com


Recommended