BD PB 1 40 Cu Rezolvari

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

Subiecte pentru examenul de atestare profesională la disciplina informatică (baze de date).

Problemele 1-20 prof. Voinea Mirela


Problemele 21-40 prof. Neagu Violeta

Baza de date Presa


Conține următoarele tabele:
Reviste (idr number(3), titlu varchar2(30), pret number(5,2), categorie varchar2(30))

Abonati (ida number(4), nume varchar2(30), adresa varchar2(50))

Abonamente (idr number(3), ida number(4), data_ab date)

create table Reviste (idr number(3), titlu varchar2(30), pret number(5,2), categorie varchar2(30))

create table Abonati (ida number(4), nume varchar2(30), adresa varchar2(50))

create table Abonamente (idr number(3), ida number(4), data_ab date)

Următoarele opt probleme fac referire la baza de date Presa

Problema 1

a. Să se afișeze suma prețurilor revistelor.


b. Să se afișeze titlurile revistelor la care este abonat Popescu Ion.

SELECT SUM(pret) FROM reviste

SELECT titlu FROM reviste r, abonamente a, abonati b


WHERE a.ida=b.ida AND a.idr=r.idr AND UPPER(nume) LIKE 'POPESCU ION'

Problema 2

a. Afișați revistele în ordinea alfabetică a titlurilor.


b. Să se afișeze revistele care au prețul mai mic decât prețul mediu.

SELECT titlu, pret FROM reviste ORDER BY titlu

SELECT * FROM reviste WHERE pret<(SELECT AVG(pret) FROM reviste)


Problema 3

a. Care sunt revistele cu prețul minim?


b. Afișați numele abonaților la reviste din categoria SF.

SELECT titlu FROM reviste


WHERE pret=(SELECT MIN(pret) FROM reviste)

SELECT nume FROM reviste r, abonamente a, abonati b


WHERE a.ida=b.ida AND a.idr=r.idr AND UPPER(categorie) LIKE 'SF'

Problema 4

a. Afișați numele abonaților care stau pe strada Brăilei.


b. Să se afișeze numele abonaților și titlurile revistelor la care s-a făcut abonament în luna curentă.

SELECT nume FROM abonati WHERE adresa LIKE '%Brailei%'

SELECT titlu, nume FROM reviste r, abonamente a, abonati b


WHERE a.ida=b.ida AND a.idr=r.idr
AND EXTRACT (MONTH FROM data_ab)=EXTRACT (MONTH FROM SYSDATE)

Problema 5

a. Afișați titlurile revistelor care încep cu litera A.


b. Care este suma prețurilor revistelor la care s-a abonat Popescu Ion?

SELECT titlu FROM reviste WHERE titlu LIKE 'A%'

SELECT SUM(pret) FROM reviste r, abonamente a, abonati b


WHERE a.ida=b.ida AND a.idr=r.idr
AND UPPER(nume) LIKE 'POPESCU ION'

Problema 6

a. Afișați prețul mediu al revistelor din categoria Știință și tehnică.


b. Câți abonați au făcut abonamente în primele 6 luni din an?

SELECT AVG(pret) FROM reviste WHERE UPPER(categorie)='STIINTA SI TEHNICA'


SELECT COUNT(*) FROM reviste r, abonamente a, abonati b
WHERE a.ida=b.ida AND a.idr=r.idr
AND EXTRACT(MONTH FROM data_ab)<=6

Problema 7

a. Să se afișeze prețul mediu pentru fiecare categorie de reviste.


b. Să se afișeze, crescător după data la care s-a făcut abonamentul, toate abonamentele din baza de date.

SELECT AVG(pret), categorie FROM reviste GROUP BY categorie

SELECT * FROM reviste r, abonamente a, abonati b


WHERE a.ida=b.ida AND a.idr=r.idr ORDER BY data_ab

Problema 8

a. Să se afișeze revistele grupate pe categorii, iar cele din aceeași categorie – crescător după preț.
b. Să se afișeze numele persoanelor care au făcut abonament la aceeași categorie de reviste ca cele la
care s-a abonat Popescu Ion.

SELECT * FROM reviste ORDER BY categorie, pret

SELECT * FROM reviste r, abonamente a, abonati b


WHERE a.ida=b.ida AND a.idr=r.idr
AND categorie IN (SELECT categorie FROM reviste r, abonamente a, abonati b
WHERE a.ida=b.ida AND a.idr=r.idr AND UPPER(nume) LIKE 'POPESCU ION')
Tabela Angajati:
Angajati (id number(3), nume varchar2(30), data_nas date, data_ang date, salariu number(5))

create table Angajati (id number(3), nume varchar2(30), data_nas date, data_ang date, salariu
number(5))

Următoarele trei probleme fac referire la tabela Angajati:

Problema 9

a. Să se afișeze angajații cu un salariu peste medie.


b. Să se afișeze numele celui mai tânăr angajat.

SELECT nume, salariu FROM angajati


WHERE salariu>(SELECT AVG(salariu) FROM angajati)

SELECT nume FROM angajati


WHERE data_nas=(SELECT MAX(data_nas) FROM angajati)

Problema 10

a. Să se afișeze salariile mărite cu 10% pentru angajații care își serbează ziua de naștere în luna curentă.
b. Să se afișeze angajații în ordinea crescătoare a salariilor, iar cei cu același salariu – în ordine alfabetică.

SELECT nume, salariu*1.1 FROM angajati


WHERE EXTRACT(MONTH FROM data_nas)=EXTRACT(MONTH FROM SYSDATE)

SELECT nume, salariu FROM angajati ORDER BY salariu, nume

Problema 11

a. Să se afișeze numele și salariile angajaților care s-au angajat în aceeași lună cu luna de naștere.
b. Care este suma salariilor angajaților care au un salariu peste medie?

SELECT nume, salariu*1.1 FROM angajati


WHERE EXTRACT(MONTH FROM data_nas)=EXTRACT(MONTH FROM data_ang)

SELECT SUM(salariu) FROM angajati


WHERE salariu>(SELECT AVG(salariu) FROM angajati)
Baza de date Biblioteca
Conține următoarele tabele:
carti (id number(3), titlu varchar2(40), autor varchar2(30), editura varchar2(30), an_aparitie number(4), pret
number(5))

cititori (idc number(4), nume varchar2(10), data_n date, loc varchar2(20), mail varchar2(30) )

imprumut (id number(3), idc number(4), data_impr date)

Următoarele cinci probleme fac referire la baza de date Biblioteca

create table carti (id number(3), titlu varchar2(40), autor varchar2(30), editura varchar2(30), an_aparitie
number(4), pret number(5))

create table cititori (idc number(4), nume varchar2(10), data_n date, loc varchar2(20), mail varchar2(30) )

create table imprumut (id number(3), idc number(4), data_impr date)

Problema 12

a. Să se afișeze numele cititorilor care au împrumutat cărți în anul 2020.


b. Să se afișeze informațiile despre cărțile cu prețul mai mare decât prețul mediu.

SELECT nume FROM cititori c, imprumut i


WHERE c.idc=i.idc AND EXTRACT(YEAR FROM data_impr)=2020

SELECT titlu, autor, editura, pret FROM carti


WHERE pret>(SELECT AVG(pret) FROM carti)

Problema 13

a. Să se afișeze numărul de autori de carte (dacă un autor a scris mai multe cărți, se va număra o singură
dată).
b. Să se afișeze numele cititorilor care au împrumutat cea mai scumpă carte.

SELECT COUNT(DISTINCT autor) FROM carti

SELECT nume FROM carti c, cititori t, imprumut i


WHERE c.id=i.id AND t.idc=i.idc AND pret=(SELECT MAX(pret) FROM carti)

Problema 14

a. Să se afișeze valoarea cărților apărute în anul 2000.


b. Să se afișeze cititorii din Galați care au împrumutat cărți de Mihai Eminescu.
SELECT SUM(pret) FROM carti WHERE an_aparitie=2000

SELECT nume FROM carti c, cititori t, imprumut i


WHERE c.id=i.id AND t.idc=i.idc AND UPPER(loc) LIKE '%GALATI%'
AND UPPER(autor)='MIHAI EMINESCU'

Problema 15

a. Să se afișeze numele cititorilor care au adresă de mail pe yahoo.ro.


b. Să se afișeze prețul cărților împrumutate de Popescu Ion.

SELECT nume FROM cititori WHERE mail LIKE ’%@yahoo.ro’

SELECT SUM(pret) FROM carti c, cititori t, imprumut i


WHERE c.id=i.id AND t.idc=i.idc AND UPPER(nume)='POPESCU ION'

Problema 16

a. Să se afișeze numele cititorilor, descrescător după data la care au împrumutat cărți.


b. Să se afișeze numele cititorilor care au împrumutat cărți în lunile de primăvară, toamnă și iarnă.

SELECT nume, data_impr FROM cititori c, imprumut i


WHERE c.idc=i.idc ORDER BY data_impr DESC

SELECT nume FROM cititori c, imprumut i


WHERE c.idc=i.idc AND NOT (EXTRACT(MONTH FROM data_impr) BETWEEN 6 AND 8)
Baza de date Magazin
Conține următoarele tabele:
Produse (idp number(3), denumire varchar2(30), pret number(5,2), cantitate number(4), categorie
varchar2(30))

Furnizori (idf number(4), nume varchar2(30), localitate varchar2(50))

Comenzi (idpnumber(3), idf number(4), data_com date)

create table Produse (idp number(3), denumire varchar2(30), pret number(5,2), cantitate number(4),
categorie varchar2(30))

create table Furnizori (idf number(4), nume varchar2(30), localitate varchar2(50))

create table Comenzi (idp number(3), idf number(4), data_com date)

Următoarele patru probleme fac referire la baza de date Magazin

Problema 17

a. Să se afișeze toți furnizorii care nu sunt din Galați.


b. Din ce localități sunt furnizorii pentru care azi s-au cumpărat produse din categoria sport?

SELECT * FROM furnizori WHERE UPPER(localitate) NOT LIKE '%GALATI%'

SELECT localitate, data_com FROM produse p, furnizori f, comenzi c


WHERE LOWER(categorie)='sport' AND p.idp=c.idp AND f.idf=c.idf
AND data_com=SYSDATE

Problema 18

a. Să se afișeze numărul de produse cu stoc>10.


b. Să se afișeze datele la care s-au comandat produse cu preț maxim.

Select COUNT (*) FROM produse WHERE cantitate>10

SELECT data_com FROM produse p, furnizori f, comenzi c


WHERE p.idp=c.idp AND f.idf=c.idf AND pret=(SELECT MAX(pret) FROM produse)

Problema 19

a. Să se afișeze prețul mediu al produselor din categoria sport.


b. Să se afișeze valoarea totală a produselor furnizate de firme din Galați.

SELECT AVG(pret) FROM produse WHERE LOWER(categorie)='sport'

SELECT SUM(pret*cantitate) FROM produse p, furnizori f, comenzi c


WHERE p.idp=c.idp AND f.idf=c.idf AND UPPER(localitate)='GALATI'

Problema 20

a. Să se afișeze valoarea totală a produselor care au prețul cuprins între 20 și 30 lei.


b. Să se afișeze produsele comandate în anul curent și furnizorii acestora.

SELECT SUM(pret*cantitate) FROM produse WHERE pret>=20 AND pret<=30

SELECT denumire, nume FROM produse p, furnizori f, comenzi c


WHERE p.idp=c.idp AND f.idf=c.idf AND EXTRACT (YEAR FROM data_com)=EXTRACT(YEAR FROM
SYSDATE)
Baza de date Cinema
Conține următoarele tabele:
Filme (idf number(3),nume varchar2(40),gen varchar2(20), buget number(9), anaparitie
number(4), limba varchar2(40))
Actori (ida number(3),nume varchar2(40),datanastere Date, tara varchar2(40))

Distribuție (idf number(3), ida number(3))

create table Filme (idf number(3),nume varchar2(40),gen varchar2(20), buget number(9), anaparitie
number(4), limba varchar2(40) )
create table Actori (ida number(3),nume varchar2(40),datanastere Date, tara varchar2(40))
create table Distributie (idf number(3), ida number(3))

Următoarele șapte probleme fac referire la baza de date Cinema

Problema 21

a. Să se afișeze filmele difuzate în limba engleză ordonate după gen iar în cadrul aceluiași gen vor fi
ordonate după buget descrescător
b. Să se afișeze în ordine alfabetică actorii care au jucat in filme în anul 2019

SELECT * FROM filme ORDER BY gen, buget DESC


WHERE limba='engleza'

SELECT a.nume
FROM filme f, actori a, distributie d
WHERE f.idf=d.idf AND a.ida=d.ida AND anaparitie=2019
ORDER BY a.nume

Problema 22

a. Să se determine câte filme apărute în 2019 sunt în baza de date


b. Să se afișeze în ordine alfabetică actorii americani care au jucat in filme

SELECT count(*) FROM filme WHERE anaparitie=2019

SELECT a.nume
FROM filme f, actori a, distributie d
WHERE f.idf=d.idf AND a.ida=d.ida AND tara='USA'
ORDER BY a.nume
Problema 23

a. Să se afișeze care a fost cel mai mare buget alocat pentru un film apărut în anul 2019
b. Să se afișeze ordonați după vârstă actorii care au jucat în filme apărute în anul 2018

SELECT MAX(buget) FROM filme WHERE anaparitie=2019

SELECT a.nume, datanastere


FROM filme f, actori a, distributie d
WHERE f.idf=d.idf AND a.ida=d.ida AND anaparitie=2018
ORDER BY datanastere DESC

Problema 24

a. Să se afișeze câți actori americani sunt în baza de date


b. Să se afișeze actorii născuți în 1980 care au jucat în filme

SELECT count(*) FROM actori WHERE tara='USA'

SELECT a.nume FROM filme f, actori a, distributie d


WHERE f.idf=d.idf AND a.ida=d.ida AND to_char(a.datanastere,'YYYY')=1980

Problema 25

a. Să se afișeze filmele ordonate crescător după anul apariției. Filmele apărute în același an se vor ordona
alfabetic după nume
b. Să se determine câți actori au jucat în filmele din 2019 difuzate în limba engleză

SELECT * FROM filme ORDER BY anaparitie, nume

SELECT COUNT(a.nume)
FROM filme f, actori a, distributie d
WHERE f.idf=d.idf AND a.ida=d.ida AND anaparitie=2019 AND limba='engleza'

Problema 26

a. Să se determine bugetul mediu pentru fiecare categorie de filme


b. Să se afișeze în ordine alfabetică actorii americani care au jucat in filme din seria Star Wars

SELECT gen, AVG(buget) FROM filme GROUP BY gen

SELECT a.nume
FROM filme f, actori a, distributie d
WHERE f.idf=d.idf AND a.ida=d.ida AND lower(f.nume) LIKE '%star wars%' AND tara='USA'
ORDER BY a.nume

Problema 27
a. Să se afișeze filmul/filmele care au avut cel mai mic buget în 2019
b. Să se afișeze cel mai tânăr actor care a fost distribuit în filmul Gravity

SELECT * FROM filme


WHERE buget=(SELECT min(buget) FROM filme WHERE anaparitie=2019)

SELECT nume FROM actori


WHERE datanastere=(SELECT max(datanastere)
FROM filme f, actori a, distributie d
WHERE f.idf=d.idf AND a.ida=d.ida AND lower(f.nume)='gravity')

Baza de date Clinica


Conține următoarele tabele:
Pacienti (idp number(3), nume varchar2(40), afectiune varchar2(40))

Medicamente (idm number(3), denumire varchar2(50), categorie varchar2(20), pret number(8,2))

Tratamente (idp number(3), idm number(3))

create table Pacienti (idp number(3), nume varchar2(40), afectiune varchar2(40))

create table Medicamente (idm number(3), denumire varchar2(50), categorie varchar2(20), pret number(8,2))

create table Tratamente (idp number(3), idm number(3))

Următoarele șase probleme fac referire la baza de date Clinica

Problema 28

a. Să se afișeze în ordine alfabetică pacienții și afecțiunile lor


b. Să se determine costul tratamentului pentru pacientul Avram Ion.

SELECT nume, afectiune FROM pacienti ORDER BY nume

SELECT sum(pret) FROM pacienti p, tratamente t, medicamente m


WHERE p.idp=t.idp AND m.idm=t.idm AND lower(p.nume) like '%avram ion%'

Problema 29

a. Să se afișeze în ordine alfabetică denumirile medicamentelor și prețurile lor


b. Să se afișeze numele pacienților și denumirile medicamentelor care fac parte din tratamentul lor

SELECT denumire, pret FROM medicamente ORDER BY denumire


SELECT nume, denumire FROM pacienti p, tratamente t, medicamente m
WHERE p.idp=t.idp AND m.idm=t.idm

Problema 30

a. Să se afișeze prețul mediu pentru medicamentele din categoria analgezice


b. Să se afișeze pacienții și medicamentele lor din categoria antitermice

SELECT AVG(pret) FROM medicamente


WHERE lower(categorie) LIKE '%analgezic%'

SELECT nume, denumire FROM pacienti p, tratamente t, medicamente m


WHERE p.idp=t.idp AND m.idm=t.idm AND lower(categorie) LIKE '%antitermic%'

Problema 31

a. Să se afișeze medicamentele grupate pe categorii iar cele din aceeași categorie descrescător după preț
b. Să se afișeze numele pacienților care primesc analgezice

SELECT* FROM medicamente


ORDER BY categorie, pret DESC

SELECT nume FROM pacienti p, tratamente t, medicamente m


WHERE p.idp=t.idp AND m.idm=t.idm AND lower(categorie) LIKE '%analgezic%'

Problema 32

a. Să se afișeze prețul mediu pentru fiecare categorie de medicamente


b. Să se afișeze costul medicației fiecărui pacient

SELECT categorie, AVG(pret) FROM medicamente GROPUP BY categorie

SELECT nume, sum(pret) FROM pacienti p, tratamente t, medicamente m


WHERE p.idp=t.idp AND m.idm=t.idm GROUP BY nume

Problema 33

a. Să se afișeze medicamentele descrescător după preț. Medicamentele cu același preț vor fi ordonate
alfabetic.
b. Să se înlocuiască numele pacientului Avram Mihai cu Avramescu Mihai

SELECT denumire, pret FROM medicamente ORDER BY pret DESC, denumire

UPDATE pacienti SET nume = 'Avramescu Mihai' WHERE lower(nume)='%avram%mihai%'


Baza de date Închirieri_Auto
Conține următoarele tabele:
clienti (idc number(3), nume varchar2(40), adresa varchar2(40))

automobile (ida number(3), numar_inmatriculare varchar2(10), marca varchar2(20), an_fabricatie number(4) )

inchirieri (idc number(3), ida number(3),data_in Date, numar_zile number(3))

Următoarele șapte probleme fac referire la baza de date Închirieri_Auto

create table clienti (idc number(3), nume varchar2(40), adresa varchar2(40))

create table automobile (ida number(3), numar_inmatriculare varchar2(10), marca varchar2(20), an_fabricatie
number(4) )

create table inchirieri (idc number(3), ida number(3),data_in Date, numar_zile number(3))

Problema 34

a. Să se determine câte mașini sunt în baza de date


b. Să se afișeze numele clienților cu adresa de Galați care au închiriat mașini și mărcile mașinilor închiriate

SELECT count(*) FROM automobile

SELECT nume, marca


FROM clienti c, automobile a, inchirieri i
WHERE c.idc=i.idc AND a.ida=i.ida AND lower(adresa) LIKE '%galati%'

Problema 35

a. Să se afișeze alfabetic mărcile automobilelor. Mașinile cu aceeași marcă vor fi ordonate descrescător
după anul fabricației
b. Să se afișeze numele clienților, marcile mașinilor închiriate și numărul de zile închiriate. Datele vor fi
ordonate după numele clienților.

SELECT marca, an_fabricatie FROM automobile ORDER BY marca, an_fabricatie DESC

SELECT nume, marca, numar_zile


FROM clienti c, automobile a, inchirieri i
WHERE i.ida=a.ida AND i.idc=c.idc ORDER BY nume

Problema 36

a. Să se determine câte mașini înmatriculate în Galați sunt în baza de date


b. Să se afișeze numele clientului și marca pentru autoturismul închiriat care are numărul de
înmatriculare GL-05-GEO

SELECT COUNT(*) FROM automobile


WHERE UPPER(substr(numar_inmatriculare, 1,2))='GL'
SELECT nume, marca
FROM clienti c, automobile a, inchirieri i
WHERE i.ida=a.ida AND i.idc=c.idc AND UPPER(numar_inmatriculare) LIKE '%GL%05%GEO'

Problema 37

a. Să se afișeze datele mașinilor fabricate în 2019 ordonate alfabetic după marcă


b. Să se afișeze datele tuturor mașinilor inchiriate de Dima Ion: număr de înmatriculare, marca și numărul
de zile închiriate.

SELECT * FROM automobile


WHERE an_fabricatie = 2019 ORDER BY marca

SELECT numar_inmatriculare , marca, numar_zile


FROM clienti c, automobile a, inchirieri i
WHERE i.ida=a.ida AND i.idc=c.idc
AND lower(nume) LIKE '%dima%ion%'

Problema 38

a. Să se afișeze numărul de mașini din fiecare an de fabricație, ordonate după anul de fabricație
b. Să se actualizeze cu valoarea GL-03-IDA numărul numărul de înmatriculare pentru automobilul cu
numărul de înmatriculare GL-03-ADI.

SELECT an_fabricatie, COUNT(*) FROM automobile ORDER BY an_fabricatie, GROUP BY an_fabricatie

UPDATE automobile SET numar_inmatriculare = 'GL-03-IDA'


WHERE numar_inmatriculare = 'GL-03-ADI'

Problema 39

a. Să se determine câte zile au fost închiriate mașinile din baza de date


b. Să se elimine din baza de date autoturismul cu numărul de înmatriculare GL-03-ABC

SELECT SUM (numar_zile) FROM închirieri

DELETE FROM automobile


WHERE UPPER(numar_inmatriculare) LIKE '%GL%03%ABC'

Problema 40

a. Să se afișeze datele clienților ordonate după nume pentru clienții care au adresa în Galați sau Brăila
b. Să se afișeze clienții, numărul de înmatriculare și marca automobilului pentru închirieri care presupun
mai mult de 10 zile

SELECT * FROM clienti


WHERE lower(adresa) LIKE '%galati%' OR lower(adresa) LIKE '%braila%'
ORDER BY nume

SELECT nume, numar_inmatriculare , marca


FROM clienti c, automobile a, inchirieri i
WHERE i.ida=a.ida AND i.idc=c.idc AND numar_zile > 10

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