Documente Academic
Documente Profesional
Documente Cultură
Rezolvare Subiecte Baze de Date Neintensiv
Rezolvare Subiecte Baze de Date Neintensiv
Subiectul nr.1
S se creeze o tabel cu structura: Cod_numeric_personal,Numele,Data_angajarii,
Data_naterii i s se introduc 8 articole cu date care s corespund cerinelor urmtoare:
a)S se afieze pe ecran toi angajaii cu o cevchime mai mare de 10 ani.
b)S se afieze toate persoanele a cror zi de natere se srbtorete astzi.
Cerina a)
SELECT * FROM Angajati
WHERE CURRENT_DATE - Data_angajarii>3650
Cerina 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.2
S se creeze o tabel cu structura: Numr bilet, Ora, Pre, Numr_vagon i s se
introduc 8 articole. Cerine
a)S se calculeze suma realizat n urma vnzrii tuturor biletelor nregistrate n
tabel.
b)S se afieze pe ecran numrul de bilete vndute cu destinaia un anumit ora X,
citit de la tastatur.
Crearea structurii tabelului
CREATE TABLE Bilete (numar_bilet NUMBER(10) PRIMARY KEY, oras
VARCHAR(50) ,
pret NUMBER(5,2), numar_vagon NUMBER(2,0))
Inserarea datelor in tabel
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)
Cerina a)
SELECT SUM(pret) "Vanzare totala"
FROM Bilete
Cerina b)
SELECT SUM(pret) "Vanzare totala"
FROM Bilete
WHERE UPPER(oras)=UPPER(:Destinatie)
Subiectul nr.3
S 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 urmtoarelor cerine:
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.
Subiectul nr.4
S se creeze o tabel cu urmtoarea structur:Cod_ furnizor, Cod_material, Nume_
material, Pret, Cantitate. S se introduc n tabel minimum 8 articole.
Cerine:
a)S se afieze toate ofertele pentru materialul X dat de la tastatur, cresctor,
dup preul oferit.
b)S se afieze preul total al materialelor oferite de furnizorul Y- citit de la tastatur.
Datele introduse n tabel trebuie s corespund cerinelor enunate mai sus.
Subiectul nr.5
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numr_piese_produse
i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1
la 9; pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine:
a)S se afieze numrul atelierelor din tabel.
b)S se afieze numrul de piese produse de fiecare atelier.
Crearea structurii tabelului
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 tabel
INSERT 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)
Cerina a)
SELECT COUNT(DISTINCT cod_atelier) "Numar de ateliere"
FROM Muncitori
Cerina b)
SELECT cod_atelier, SUM(numar_piese_produse) "Piese produse"
FROM Muncitori
GROUP BY cod_atelier
Subiectul nr.6
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numr_piese_produse
i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la
1 la 9; pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine:
a)S se afieze codul atelierului din tabel cu cei mai muli muncitori.
b)S se afieze codul atelierului n care numrul de piese produse este mai mare
dect o valoare introdus de la tastatur.
Cerina a)
SELECT cod_atelier, COUNT(*) "Numar maxim de muncitori"
FROM Muncitori
GROUP BY cod_atelier
HAVING COUNT(*)=(SELECT MAX(COUNT(*)) FROM Muncitori GROUP BY
Cod_atelier)
Cerina b)
SELECT cod_atelier, SUM(numar_piese_produse) "Piese produse de atelier"
FROM Muncitori
GROUP BY cod_atelier
HAVING SUM(numar_piese_produse)>:x
Subiectul nr.7
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numr_piese_produse
i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1
la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine
a)Se terg articolele pentru care producia unui muncitor este mai mic dect o
valoare introdus de la tastatur.S se afieze numele acestora i codurile
atelierelor din care fceau parte.
b)S se afieze numrul atelierelor ce au rmas cu cel mult doi muncitori n urma
tergerii articolelor de la cerina a).
Cerina a)
Pentru afiarea muncitorilor cu producie mai mic dect x
SELECT nume_muncitor, cod_atelier FROM Muncitori
WHERE numar_piese_produse<:x
Pentru tergerea acestora
DELETE FROM Muncitori
WHERE numar_piese_produse<:x
Cerina b)
SELECT COUNT(*) "Nr. ateliere cu maximum 2 ang."
FROM Muncitori WHERE cod_atelier IN (
SELECT cod_atelier
FROM Muncitori
GROUP BY cod_atelier
HAVING COUNT(*)<=2)
Subiectul nr.8
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier,Numr_piese_produse,
Salariu i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr
de la 1 la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).
Cerine
a)Toi muncitorii ce au produs un numr de piese mai mare cu cel puin 10 % dect o
valoare introdus de la tastatur vor avea salariul majorat cu 10 %. S se afieze
salariile acestora (dup mrirea salariilor) i codul atelierelor din care fceau parte.
b) S se afieze suma total necesar mririi salariilor de la cerina a) i codul
atelierului cu cei mai muli muncitori cu salarii mrite.
Subiectul nr.9
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier,Numr_piese_produse,
Vrst i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr
de la 1 la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine
a).Pentru a putea lucra n strintate, un muncitor trebuie s aib o vrst cel mult
egal cu o valoare introdus de la tastatur i s produc un numr de piese cel
puin egal cu o valoare introdus de la tastatur.S se afieze numele celor ce
ndeplinesc ambele condiii i atelierele n care lucreaz acetia.
b) S se afieze numrul mediu de piese produse de toi cei selectai la prima
cerin.
Cerina a)
SELECT * FROM Muncitori
WHERE varsta<=:varsta and numar_piese_produse>=:nr_piese
Cerina b)
SELECT AVG(numar_piese_produse) "Numar mediu piese"
FROM Muncitori
WHERE varsta<=:varsta and numar_piese_produse>=:nr_piese
Subiectul nr.10
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier,Numr_piese_produse,
Numr copii minori i s se introduc 8 articole (un articol un muncitor, codul unui atelier
este un numr de la 1 la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume
diferite ).Cerine
a)S se afieze o list cu muncitorii din fiecare atelier (codul atelierului i apoi toi
muncitorii din acel atelier i la fel pentru fiecare atelier).
b)S se afieze numrul tuturor copiilor minori ai tutror muncitorilor din tabel.
Cerina a)
SELECT cod_atelier, nume_muncitor FROM Muncitori
ORDER BY cod_atelier, nume_muncitor
Cerina b)
SELECT SUM(numar_copii_minori) "Numar total copii minori"
FROM Muncitori
Subiectul nr.11
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier,Numr_piese_produse,
i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1
la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine
a)S se afieze numrul mediu de piese produse de un muncitor (numr total de
piese / numr muncitori).
b)S se afieze numrul mediu de piese produse de un atelier )numr total
piese / numr ateliere)
Cerina a)
SELECT AVG(numar_piese_produse) "Numar mediu piese "
FROM Muncitori
Cerina b)
SELECT SUM(numar_piese_produse)/COUNT(DISTINCT cod_atelier) "Numar
mediu piese/atelier"
FROM Muncitori
Subiectul nr.12
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier,Numr_piese_produse,
i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1
la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine:
a) S se tearg articolele referitoare la muncitorii ce produc un numr de piese mai
mic dect un numr introdus de la tastatur i s se depun ntr-o tabel nou (cu
structura Nume_muncitor, , Numr_piese), apoi s se sorteze alfabetic noua
tabel dup cmpul Nume_ muncitor i s se afieze sortat.
b) S se afieze tabela iniial, dup transferul precizat la cerina a ).
Cerina a)
Crearea structurii tabelului Muncitori2 n care se vor copia muncitorii ce au realizat
un numr de piese mai mic dect o valoare introdus de la tastatur.
CREATE TABLE Muncitori2 (nume_muncitor VARCHAR(50) UNIQUE,
numar_piese_produse NUMBER(5))
Copierea muncitorilor n al doilea tabel
INSERT INTO Muncitori2
SELECT nume_muncitor, numar_piese_produse
FROM Muncitori
WHERE numar_piese_produse<:X
tergerea nregistrrilor copiate din tabelul iniial
DELETE FROM Muncitori
WHERE numar_piese_produse<:X
Afiarea muncitorilor din tabela nou creat sortat dup numele muncitorului
SELECT * FROM Muncitori2
ORDER BY nume_muncitor
Cerina b)
SELECT * FROM Muncitori
Subiectul nr.13
S se creeze o tabel cu structura:Nume_muncitor, Cod_atelier, Numr_piese_produse,
i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1
la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine:
a) Se citete 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. Cmpul
Numr_ piese se va completa cu valoarea 0. S se afieze apoi numrul minim
necesar de piese pe care noul venit trebuie s le produc astfel nct producia medie
a acelui atelier s nu scad.
b) Se citete 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 su 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.
Cerina a)
Adugarea muncitorului
INSERT INTO Muncitori
VALUES (:nume, :atelier, 0)
Calculul valorii minime a numrului de piese
SELECT CEIL(AVG(numar_piese_produse))
FROM Muncitori
WHERE cod_atelier=: atelier AND numar_piese_produse>0
Cerina b)
UPDATE Muncitori
SET cod_atelier=:atelier_nou
WHERE (UPPER(nume_muncitor)=UPPER(:nume)) AND (cod_atelier=:atelier)
Subiectul nr.14
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier,Numr_piese_produse,
i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1
la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine:
a) Muncitorul /muncitorii cu numr maxim de piese produse se va / vor transfera la alt
loc de munc.S se afieze in ordine alfabetic numele celor transferai.
b) S se afieze numrul mediu de piese produse de ctre cei rmai n vechile
ateliere.
Cerina a)
Mutarea la un alt loc de munc a muncitorilor cu numr maxim de piese e
realizat prin completarea cu NULL a valorilor din coloana COD_ATELIER
corespunztoare acestora.
UPDATE Muncitori
SET cod_atelier=NULL
WHERE numar_piese_produse=(SELECT MAX(numar_piese_produse) FROM
Muncitori)
Cerina b)
SELECT AVG(numar_piese_produse) "Nr. mediu piese pt.cei ramasi"
FROM Muncitori
WHERE cod_atelier IS NOT NULL
Subiectul nr.15
S 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 afizeze codurile produselor pentru care cantitatea existent este mai mic
dect stocul necesar . Pentru fiecare dintre aceste produse se va afia ce cantitate
trebuie adaugat pentru a realiza o cantitate egal cu acel stoc_necesar.
b) S se afieze codurile produselor ce au cantitate mai mare cu cel puin 20 % dect
stoc_ necesar, n ordinea codurilor.
Subiectul nr.16
S 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 ). Cerine:
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 puin egal cu cea citit),
atunci s se afieze cantitatea rmas n depozit pentru livrare. Dac acea cantitate
rmas n depozit este mai mic dect stocul necesar, se va afia un mesaj. Dac nu
exist acel produs sau nu e n cantitatea dorit, se va afia 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 mri pentru el cantitatea existent n
depozit cu valoarea k. Dac nu exist, atunci se va aduga un nou articol avand
cmpurile pre_unitar i stoc _necesar introduse de la tastatur.
Cerina 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_necesar
FROM Stoc
where cod_material=:cod_mat
Cerina b)
Modificarea stocului pentru materialul citit
UPDATE Stoc
SET CANTITATE=CANTITATE+:cant_adaugata
where cod_material=:cod_mat
Afiarea materialului cruia i s-a modificat stocul
SELECT * FROM Stoc
WHERE cod_material=:cod_mat
Subiectul nr.17
S se creeze o tabel cu structura: Nume _autor, Titlu, Nr_Exemplare_imprumutate,
Data_imprumut i s se introduc cel puin 8 articole. Cerinte
a) S se afieze numele autorului cu cele mai multe titluri.
b) S se afieze numele autorului cu cele mai puine cari solicitate pentru mprumut n
luna curent.
Subiectul nr.18
S se creeze o tabel cu structura: Nume_angajat, Salariu, Numar _copii_minori,
Numar_zile_ concediu_medical i s se introduc cel puin 8 articole. Un articol reprezint
un angajat din ntreprindere.Cerine:
a).S se afieze numele angajatului cu cele mai multe zile de concediu medical.
b).S se afieze salariul mediu al celor ce au avut concediu medical i care au cel
puin un copil minor.
Cerina a)
SELECT nume_angajat, numar_zile_concediu_medical
FROM ang_concedii
WHERE numar_zile_concediu_medical=
(SELECT MAX(numar_zile_concediu_medical)FROM ang_concedii)
Cerina b)
SELECT AVG(salariu) "Salariu mediu"
FROM ang_concedii
WHERE numar_zile_concediu_medical>0 AND numar_copii_minori>=1
Subiectul nr.19
S se creeze o tabel cu structura: Nume_medic, Nume _pacient, Diagnostic,
Data_consultului i s se introduc cel puin 8 articole. Un articol reprezint un pacient
dintr-o policlinic (un consult - un articol). Cerine
a) S se afieze numrul pacienilor consultai n luna curent de ctre un medic al crui
nume se introduce de la tastatur.
b) S se afieze diagnosticul cel mai frecvent pus n luna curent.
Cerina a)
SELECT COUNT(*)
FROM consultatii
WHERE UPPER(nume_medic)=UPPER(:medic) AND
ABS(MONTHS_BETWEEN(LAST_DAY(CURRENT_DATE),LAST_DAY(data_consult
ului)))<1
Cerina b)
SELECT diagnostic
FROM consultatii
WHERE
ABS(MONTHS_BETWEEN(LAST_DAY(CURRENT_DATE),LAST_DAY(data_consult
ului)))<1
GROUP BY diagnostic
HAVING COUNT(*) =
(SELECT MAX(COUNT(*))
FROM consultatii
WHERE
ABS(MONTHS_BETWEEN(LAST_DAY(CURRENT_DATE),LAST_DAY(data_consult
ului)))<1
GROUP BY diagnostic)
Subiectul nr.20
S se creeze o tabel cu structura: Nume _elev, Clasa, Promovat, n care s se introduc
cel puin 8 articole. Un articol reprezint un elev dintr-o clas a unei coli. Cerinte
a)S se afieze clasa cu cel mai mare procent de promovabilitate.
b)S se afieze numele elevilor nepromovai dintr-o clas introdus de la tastatur.
Subiectul nr.21
S se creeze o tabel cu urmtoarea structur : Cod_aliment, Den_aliment, Calorii, n
care s sec introduc minimum 8 articole . Cerine
a) S se adauge la sfritul tabelei 3 nregistrri noi.
b) S se afieze o list avnd cmpurile : den_aliment,calorii in ordinea
descrescatoare a caloriilor.
Subiectul nr.22
S se creeze , la nivel de ntreprindere , o tabel cu urmtoarea structur : Nume,
Cod_ pers, Adresa, Salariu, n care s se introduc minimum 8 articole. Cerine
a) S se modifice adresa angajatului al crui nume a fost introdus de la tastatur.
b) S se afieze salariu mediu pe ntreprindere.
Cerina a)
UPDATE angajati
SET adresa=:Adresa_noua
WHERE UPPER(nume)=UPPER(:Nume_angajat)
Cerina b)
SELECT AVG(salariu)
FROM angajati
Subiectul nr.23
S se creezeo tabel cu rezultatele sportivilor participanti la Campionatul European de Fotbal
n care s se introduc minimum 8 articole. Structura tabelei este urmtoarea :Nume
_sportiv, Tara, Goluri _ marcate. Cerine:
a) S se afieze numrul trilor participante.
b) S se afieze numele sportivilor, numrul de goluri marcate ale unei tri introduse
de la tastatur
Subiectul nr.24
Un depozit aprovizioneaz cu produse mai multe magazine. S se creeze o tabel cu
urmtoarea structur: Cod_produs, Data_ livrare, Pret_ unitar, Cantitate, Unitate_masura,
Cod_magazin, n care s se introduc minimum 8 articole. Cerine:
a)Pentru o data livrare Y (introdus de la tastatur) s se afieze 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 afieze valoarea total obinut prin vnzarea lui.
Cerina a)
SELECT cod_magazin, cod_produs
FROM livrari
WHERE data_livrare=:Data_livrarii
ORDER BY 1,2
Cerina b)
SELECT cod_produs, COUNT(*)"Numar solicitari", SUM(pret_unitar*cantitate)
"Valoarea incasata"
FROM livrari
WHERE data_livrare=:Data_livrarii
GROUP BY cod_produs
HAVING COUNT(*)= (SELECT MAX(COUNT(*))FROM livrari
WHERE data_livrare=:Data_livrarii
GROUP BY cod_produs)
Subiectul nr.25
Un magazin se aprovizioneaz cu produse de la mai multe depozite. Creai tabela cu
urmtoarea structur:Cod_ produs, Cantitate,Pret_unitar, Unitate_masura,
Cod_depozit, Data_aprovizionare, n care s introducei minimum 8 articole
.Cerine:
a) Pentru un produs dat, afiai cantitatea cu care s-a aprovizionat magazinul n luna X
(introdus de la tastatur).
b) Afiai valoarea total a mrfurilor transferate de la un depozit cu codul Z (introdus de
la tastatur)
Not
Dei rezolvrile au fost implementate efectiv n Oracle, iar comenzile scrise
par a returna rezultatele ateptate, este posibil ca, datorit volumului mare de
munc depus i timpului limitat avut la dispoziie, 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.