SUBIECTE BAZE DE DATE – ORACLE
Se doreşte informatizarea activităţii la biblioteca şcolii. Pentru rezolvarea problemei se
utilizează baza de date BIBLIOTECA. Aceasta conţine următoarele tabele:
FISA
NL Number (4) - numărul legitimaţiei, cheie primară
NumeCititor Varchar2 (50) - numele şi prenumele cititorului
Adresa Varchar2 (50) - adresa cititorului
Telefon Varchar2 (10) - numărul de telefon
AI Varchar2 (8) - seria şi numărul cărţii/buletinului de identitate
DataI Date - data înscrierii
Tip Varchar2 (8) - tipul cititorului: elev, profesor
Clasa Varchar2 (3) - clasa (de forma 12A), numai pentru elevi
D Varchar2 (15) - disciplina, numai pentru profesori
CARTE
CotaCarte Number (4) - cota cărţii, cheie primară
Titlu Varchar2 (50) - titlul cărţii
Autor Varchar2 (50) - numele autorului/autorilor cărţii
Categorie Varchar2 (15) - categoria: informatică, economică, tehnică, beletristică
Editura Varchar2 (50) - numele editurii
Pret Number (7) - preţul cărţii
OPERATII – conţine câte o înregistrare pentru fiecare carte împrumutată
NL Number (4) - număr legitimaţie
CotaCarte Number (4) - cota cărţii
DataI Date - data împrumutului
Durata Number (2) - durata împrumutului, maxim 21 de zile
DataR Date - data returnării cărţii de către cititor
NrZile Number (3) - numărul zilelor de întârziere
Penalizari Number (3) - penalizări
NumeBiblio Varchar2 (20) - numele bibliotecarului de serviciu: Ionescu, Popescu
Pentru rezolvarea subiectelor se vor crea cele 3 tabele astfel:
Se creează tabela FISA cu comanda:
CREATE TABLE FISA (NL Number (4) primary key,NumeCititor Varchar2 (50),Adresa Varchar2
(50),Telefon Varchar2 (10), AI Varchar2 (8),DataI Date,Tip Varchar2 (8),Clasa Varchar2 (3), D
Varchar2 (15));
Se vizualizează structura tabelei FISA cu comanda:
DESCRIBE FISA;
1
Se populează tabela FISA cu date.
Se vizualizează tabela FISA cu comanda:
SELECT *
FROM FISA;
Se creează tabela CARTE cu comanda:
CREATE TABLE CARTE (CotaCarte Number (4)primary key, Titlu Varchar2 (50), Autor Varchar2
(50), Categorie Varchar2 (15), Editura Varchar2 (50), Pret Number (7));
Se vizualizează structura tabelei CARTE cu comanda:
DESCRIBE CARTE;
Se populează tabela CARTE cu date.
Se vizualizează tabela CARTE cu comanda:
SELECT *
FROM CARTE;
Se creează tabela OPERATII cu comanda:
2
CREATE TABLE OPERATII (NL Number (4), CotaCarte Number (4), Datal Date, Durata Number
(2), DataR Date, NrZil Number (3), Penalizari Number (3),NumeBiblio Varchar2 (20));
Se vizualizează structura tabelei OPERATII cu comanda:
DESCRIBE OPERATII;
Se populează tabela Operatii cu date.
Se vizualizează conţinutul tabela OPERATII cu comanda:
SELECT *
FROM OPERATII;
Subiectul 1.
a. Introduceţi câteva înregistrări (minim 5) în tabelul FISA.
Se vor introduce înregistrările prin comanda:
INSERT INTO fisa VALUES (16, 'POPA AMALIA','ARAD STR. BUCIUM NR.11', '0772341234',
'AR122334', '20-APR-08', 'ELEV', '9B', NULL);
Observaţie: Se va repeta comanda cu date diferite de 5 ori sau se pot introduce date de la tastaura
urmănd paşii:
SQL WORKSHOP → Object Browser →Clic pe numele tabelei FISA →Data →Insert row→Se
completează câmpurile cu datele dorite →Create sau Creat and Creat Another
b. Afişaţi cititorii în ordine alfabetică.
SELECT numecititor as "Cititori"
FROM fisa
ORDER BY numecititor;
Subiectul 2.
a. Introduceţi câteva înregistrări (minim 5) în tabelul CARTE.
INSERT INTO carte VALUES(129,'BUCURIA','OSHO','TEHNICA','PROEDITURA',19);
b. Afişaţi cărţile din bibliotecă, ordinate alfabetic după autor.
SELECT titlu, autor
3
FROM carte
ORDER BY autor;
Subiectul 3.
a. Afişaţi cărţile din bibliotecă împrumutate de fiecare profesor.
SELECT [Link], [Link]
FROM fisa f, carte c, operatii o
WHERE ([Link]=[Link]) AND ([Link]=[Link]) AND ([Link] like 'PROFESOR')
ORDER BY numecititor;
b. Afişaţi cărţile din bibliotecă în ordine alfabetică a editurilor.
SELECT titlu, autor, editura
FROM carte
ORDER by editura;
Subiectul 4.
a. Introduceţi câteva înregistrări în tabela OPERAŢII, referitoare la împrumutul unor cărţi.
INSERT INTO operatii VALUES (1, 111, '01-APR-08', 21, NULL, 58, 100, 'IONESCU');
.....
b. Afişaţi înregistrările din tabelul OPERATII în ordine crescătoare a datei împrumutului.
SELECT *
FROM operatii
ORDER BY DataI;
Subiectul 5.
a. Afişaţi cărţile din bibliotecă, grupate pe categorii.
SELECT titlu, categorie
FROM carte
ORDER BY categorie;
b. Afişaţi în ordine alfabetică elevii înscrişi la bibliotecă.
SELECT numecititor
FROM fisa
WHERE tip LIKE 'ELEV'
ORDER BY numecititor;
Subiectul 6.
a. Aflaţi lista cu cititorii care nu au restituit toate cărţile.
SELECT DISTINCT [Link]
FROM fisa f, operatii o
WHERE ([Link]=[Link]) AND (datar is null);
b. Afişaţi în ordine alfabetică elevii înscrişi la bibliotecă.
SELECT numecititor
FROM fisa
WHERE tip LIKE 'ELEV'
ORDER BY numecititor;
Subiectul 7.
a. Afişaţi cărţile nereturnate de un anumit cititor, al cărui număr de legitimaţie se precizează
vizualizând conţinutul tabelei.
4
SELECT [Link], [Link]
FROM fisa f, carte c, operatii o
WHERE ([Link]=[Link]) AND ([Link]=[Link]) AND([Link]=1) AND (datar is null);
b. Afişaţi toate înregistrările pentru care categoria cărţii este beletristică.
SELECT *
FROM carte
WHERE categorie LIKE 'BELETRISTICA';
Subiectul 8.
a. Afişaţi o listă cu numărul cărţilor nerestituite pentru fiecare cititor.
SELECT [Link], count(titlu) as "nr carti nerestituite"
FROM fisa f, carte c, operatii o
WHERE ([Link]=[Link]) AND ([Link]=[Link]) AND (datar is null)
GROUP BY numecititor;
b. În tabelul CARTE, înlocuiţi categoria beletristică cu categoria literatură.
UPDATE carte
SET categorie='LITERATURA'
WHERE categorie='BELETRISTICA';
Subiectul 9.
a. Afişaţi o listă cu cărţile din bibliotecă, grupate pe edituri.
SELECT *
FROM carte
ORDER BY editura;
b. Afişaţi elevii care au cărţi împrumutate şi nerestituite.
SELECT DISTINCT [Link]
FROM fisa f, carte c, operatii o
WHERE ([Link]=[Link]) AND ([Link]=[Link]) AND ([Link] like 'elev') AND (datar is null);
Subiectul 10.
a. Afişaţi o listă cu elevii înscrişi la bibliotecă, grupaţi pe clase.
SELECT *
FROM fisa
WHERE tip like 'elev'
ORDER BY clasa;
b. Căutaţi toate cărţile pentru care numele autorului începe cu litera A.
SELECT titlu, autor
FROM carte
WHERE autor like 'A%';
Subiectul 11.
a. Prelungiţi durata împrumutului cu 5 zile pentru un anumit cititor şi o anumită carte,
precizate vizualizând conţinutul tabelei.
UPDATE operatii
SET durata=durata+5
WHERE nl=10 AND cotacarte=122;
b. Căutaţi toţi cititorii pentru care numărul de telefon începe cu 0257.
SELECT numecititor, telefon
5
FROM fisa
WHERE telefon LIKE '0257%';
Subiectul 12.
a. Afişaţi o listă cu profesorii înscrişi la bibliotecă, grupaţi pe discipline.
SELECT numecititor, D as "DISCIPLINA"
FROM fisa
WHERE Tip='PROFESOR'
ORDER BY D;
b. Căutaţi toate editurile al căror nume începe cu litera A.
SELECT DISTINCT editura
FROM carte
WHERE editura LIKE 'A%';
Subiectul 13.
a. Afişaţi o listă cu cărţile nerestituite pentru fiecare cititor.
SELECT [Link] , [Link]
FROM fisa f, carte c, operatii o
WHERE ([Link]=[Link]) AND ([Link]=[Link]) AND (datar is null)
ORDER BY numecititor;
b. Afişaţi toate cărţile care nu fac parte din categoria informatica.
SELECT titlu, categorie
FROM carte
WHERE categorie NOT LIKE 'INFORMATICA';
Subiectul 14.
a. Afişaţi o listă care să cuprindă numărul legitimaţiei, numele şi prenumele, numărul de telefon,
cota cărţii împrumutate şi data împrumutului pentru cititorii din baza de date BIBLIOTECA.
SELECT [Link], [Link] as "numele si prenumele", [Link], [Link], [Link]
FROM fisa f, operatii o
WHERE [Link]=[Link];
b. Afişaţi cele mai scumpe 3 cărţi aflate în proprietatea bibliotecii.
SELECT rownum AS nr, titlu, pret
FROM (SELECT titlu, pret
FROM carte
ORDER BY pret desc)
WHERE rownum<=3;
Subiectul 15.
a. Afişaţi o listă care să conţină cota cărţii, autorul, titlul, editura pentru toate cărţile din baza de date
BIBLIOTECA.
SELECT cotacarte, autor, titlu, editura
FROM carte;
b. Afişaţi toate cărţile care au fost împrumutate de bibliotecarul Ionescu.
SELECT [Link]
FROM carte c, operatii o
WHERE ([Link]=[Link]) AND ([Link] LIKE 'IONESCU');
Subiectul 16.
6
a. Afişaţi o listă cu toate cărţile din baza de date BIBLIOTECA, grupate pe edituri.
SELECT titlu, autor, editura
FROM carte
ORDER BY editura;
b. Afişaţi cărţile care au fost împrumutate la data curentă.
SELECT [Link]
FROM carte c, operatii o
WHERE [Link]=[Link] AND datai=sysdate;
Subiectul 17.
a. Afişaţi o listă cu cititorii din baza de date BIBLIOTECA. Lista conţine numele şi
prenumele, adresa, tipul cititorului şi clasa acestuia.
SELECT numecititor AS "Numele si prenumele", adresa, tip, clasa
FROM fisa
b. Căutaţi cititorii al căror număr de telefon conţine secvenţa 123.
SELECT numecititor, telefon
FROM fisa
WHERE telefon LIKE '%123%';
Subiectul 18.
a. Realizaţi o interogare care să afişeze elevii din baza de date BIBLIOTECA, grupaţi pe clase.
SELECT numecititor, clasa
FROM fisa
WHERE tip LIKE 'ELEV'
ORDER BY clasa;
b. Afişaţi cărţile din categoria tehnică, ordonate alfabetic după titlu.
SELECT titlu
FROM carte c
WHERE categorie LIKE 'TEHNICA'
ORDER BY titlu;
Subiectul 19.
a. Realizaţi o interogare care să afişeze profesorii din baza de date BIBLIOTECA, grupaţi pe
discipline.
SELECT numecititor, D AS "Disciplina"
FROM fisa
WHERE Tip='PROFESOR'
ORDER BY D;
b. Afişaţi în ordinea crescătoare a numărului legitimaţiei cererile de împrumut din data curentă.
SELECT [Link], [Link], [Link]
FROM fisa f, carte c, operatii o
WHERE ([Link]=[Link]) AND ([Link]=[Link]) AND [Link] LIKE sysdate
ORDER BY nl;
Observaţie. Trebuie mai întâi introduse în tabela operaţii cărţi împrumutate cu datai=sysdate
Subiectul 20.
a. Realizaţi o interogare care să afişeze cărţile din baza de date BIBLIOTECA, grupate pe categorii.
SELECT titlu, autor, categorie
FROM carte
7
ORDER BY categorie;
b. Afişaţi, în ordinea alfabetică a autorului, cărţile care nu provin de la editura al cărui nume este
precizat, vizualizând conţinutul tabelei.
SELECT titlu, autor, editura
FROM carte
WHERE editura NOT LIKE 'Teora'
ORDER BY autor;
Subiectul 21.
a. Realizaţi o interogare care să permită afişarea cărţilor împrumutate şi nereturnate de către un
anumit cititor.
SELECT [Link], [Link]
FROM fisa f, carte c, operatii o
WHERE ([Link]=[Link]) AND ([Link]=[Link]) AND [Link] IS NULL AND ([Link]
LIKE 'POPA IOANA');
b. Afişaţi, în ordinea crescătoare a numărului legitimaţiei, elevii care nu se află în clasa
precizată, vizualizând conţinutul tabelei.
SELECT nl, numecititor, clasa
FROM fisa
WHERE clasa NOT LIKE '9B' AND tip LIKE 'ELEV'
ORDER BY nl;
Subiectul 22.
a. Scrieţi o comandă pentru împrumutarea unei cărţi
INSERT INTO OPERATII VALUES(1, 125, sysdate, 7, null,null, null, 'IONESCU');
b. Scrieţi o comandă pentru restituirea unei cărţi.
UPDATE operatii
SET datar=sysdate
WHERE nl=10 and cotacarte=123;
Observaţie. Pentru a vizualiza modificarile trebuie executata comanda:
SELECT *
FROM operatii;
înaite şi după executarea comenzii de mai sus.
Subiectul 23.
a. Scrieţi o comandă pentru introducerea datelor în tabelul CARTE.
INSERT INTO carte VALUES(1139,'Copii','Osho','TEHNICA','PROEDITURA',17);
b. Afişaţi autorul şi editura cărţilor cu titlul "Poezii", aflate în bibliotecă.
SELECT autor, editura
FROM carte
WHERE titlu LIKE 'POEZII';
Subiectul 24.
a. Realizaţi o interogare pentru afişarea editurilor de la care există cărţi în bibliotecă.
SELECT DISTINCT editura
FROM carte;
b. Afişaţi câţi cititori din categoria „elev" sunt înscrişi la bibliotecă.
SELECT COUNT(numecititor) as "Nr. elevi"
8
FROM fisa
WHERE Tip='ELEV';
Subiectul 25.
a. Realizaţi o interogare care să actualizeze numărul zilelor de întârziere.
UPDATE operatii
SET nrzile=sysdate-datai
WHERE datar is null
b. Afişaţi o listă cu numele editurilor existente în tabela BIBLIOTECA.
SELECT DISTINCT editura
FROM carte;
Subiectul 26.
a. Afişaţi numărul cărţilor împrumutate de către fiecare bibliotecar de serviciu.
SELECT [Link], count([Link]) AS "Nr carti imprumutate"
FROM carte c, operatii o
WHERE [Link]=[Link]
GROUP BY numebiblio;
b. Afişaţi cărţile al căror autor conţine şirul Mihai.
SELECT titlu, autor
FROM carte
WHERE autor LIKE '%Mihai% ;
Subiectul 27.
a. Afişaţi pentru fiecare editură numărul cărţilor existente în bibliotecă.
SELECT editura, count(titlu) AS "Nr cartilor existente"
FROM carte
GROUP BY editura;
b. Afişaţi câte cărţi au fost împrumutate într-o perioadă precizată de profesorul evaluator.
SELECT count(cotacarte) AS "Nr cartilor imprumutate"
FROM operatii
WHERE datai bETWEEN '01-Apr-08' aND '20-May-09'
Subiectul 28.
a. Afişaţi numărul cărţilor împrumutate de la o editură precizată, vizualizând conţinutul tabelei.
SELECT count([Link]) AS "Nr cartilor imprumutate"
FROM operatii o, carte c
WHERE [Link] IS NOT NULL AND [Link] LIKE 'ARVES' and [Link]=[Link];
b. Calculaţi valoarea totală a cărţilor din bibliotecă.
SELECT sum(pret) AS "valoare totala"
FROM carte;
Subiectul 29.
a. Afişaţi cărţile împrumutate de la o editură precizată, vizualizând conţinutul tabelei.
SELECT [Link] AS "carti imprumutate", editura
FROM operatii o, carte c
WHERE [Link] IS NOT NULL AND [Link] LIKE 'ARVES' and [Link]=[Link];
b. Afişaţi cititorii care a împrumutat cărţi într-o perioadă precizată de profesorul evaluator.
SELECT DISTINCT [Link] as "cititori"
FROM fisa f, operatii o
9
WHERE [Link] BETWEEN '01-Apr-08' and '20-may-09' and [Link]=[Link];
Subiectul 30.
a. Calculaţi şi apoi afişaţi penalizările în funcţie de numărul de zile de întârziere, astfel: 10, dacă
NrZile<=14 şi respectiv 20, dacă NrZile>14.
UPDATE operatii SET nrzile=sysdate-datai WHERE datar IS NULL;
UPDATE operatii SET penalizari=10 WHERE nrzile<=14 and datar IS NULL;
UPDATE operatii SET penalizari=20 WHERE nrzile>14 and datar IS NULL;
SELECT penalizari, nrzile
FROM operatii
WHERE datar IS NULL
ORDER BY nrzile;
b. Afişaţi cărţile aflate (împrumutate) la data curentă la cititori de mai mult de 21 zile (durata
maximă admisă pentru împrumut).
SELECT [Link], [Link], [Link] AS "Nr. de zile intarziere"
FROM carte c, operatii o, fisa f
WHERE [Link]>21 AND [Link]=[Link] AND [Link]=[Link];
Subiectul 31.
a. Afişaţi numărul cărţilor restituite de către fiecare cititor.
SELECT [Link], count([Link]) AS "nr carti restituite"
FROM operatii o, fisa f
WHERE [Link]=[Link] AND [Link] IS NOT NULL
GROUP BY numecititor;
b. Căutaţi cititorii din judeţul Arad (seria cărţii de identitate este AR).
SELECT numecititor
FROM fisa
WHERE AI like 'AR%';
Subiectul 32.
a. Afişaţi lista cititorilor care au împrumutat o anumită carte a cărei cotă este precizată de profesorul
evaluator.
SELECT [Link], [Link]
FROM fisa f, operatii o
WHERE [Link] IS NOT NULL AND [Link]=111 AND [Link]=[Link];
b. Căutaţi cărţile al căror autor conţine şirul ion.
SELECT titlu, autor
FROM carte
WHERE autor LIKE '%ION%';
Subiectul 33.
a. Realizaţi o interogare care afişează cărţile restituite, ordonate alfabetic după numele
autorilor.
SELECT [Link] as "carti restituite", autor
FROM carte c ,operatii o
WHERE [Link]=[Link] AND [Link] IS NOT NULL
ORDER BY autor;
10
b. Afişaţi cărţile care sunt împrumutate (şi nerestituite) la data curentă.
SELECT [Link]
FROM carte c ,operatii o
WHERE [Link]=[Link] AND [Link] IS NOT NULL AND [Link] IS NULL;
Subiectul 34.
a. Realizaţi o interogare care să permită afişarea numărului de legitimaţie şi a numelui şi
prenumelui cititorilor bibliotecii.
SELECT nl AS "Nr legitimatie", numecititor AS "Nume si prenume"
FROM fisa;
b. Căutaţi cărţile restituite la data curentă.
SELECT [Link], [Link]
FROM carte c, operatii o
WHERE [Link]=[Link] AND datar LIKE sysdate;
Observaţie. Trebuie introduse in tabela operatii carti returnate cu datar=sysdate
Subiectul 35.
a. Realizaţi o interogare care să afişeze cărţile din bibliotecă, în ordinea descrescătoare a
preţului.
SELECT titlu, pret
FROM carte ORDER BY pret DESC;
b. Afişaţi cititorii care s-au înscris la biblioteca după o data de 15 septembrie 2008.
SELECT numecititor
FROM fisa
WHERE datai>='15-sep-08';
Subiectul 36.
a. Realizaţi un raport care să afişeze editurile în ordine alfabetică.
SELECT DISTINCT editura
FROM carte
ORDER BY editura
b. Afişaţi în ordine alfabetică elevii dintr-o anumită clasă la alegere.
SELECT numecititor, clasa
FROM fisa
WHERE tip like 'ELEV' AND clasa LIKE '10B'
ORDER BY numecititor;
Subiectul 37.
a. Realizaţi o interogare care afişează elevii care au cărţi nerestituite.
SELECT DISTINCT [Link]
FROM fisa f, operatii o
WHERE tip LIKE 'ELEV' AND datar IS NULL AND [Link]=[Link];
b. Afişaţi în ordine alfabetică profesorii care predau informatică.
SELECT numecititor, D as "Disciplina"
FROM fisa
WHERE tip LIKE 'PROFESOR' AND D like 'INFORMATICA'
ORDER BY numecititor;
Subiectul 38.
a. Realizaţi o interogare care afişează cărţile nerestituite de profesori.
select [Link], [Link] as "carti nerestituite"
11
FROM fisa f, carte c, operatii o
WHERE tip LIKE 'PROFESOR' AND datar IS NULL AND [Link]=[Link] AND [Link]=[Link];
b. Afişaţi în ordine crescătoare a numărului legitimaţiei cititorii care au împrumutat cărţi de la
bibliotecarul Ionescu.
SELECT [Link], [Link]
FROM fisa f, operatii o
WHERE [Link]=[Link] AND numebiblio LIKE 'IONESCU'
ORDER BY nl;
Subiectul 39.
a. Realizaţi o interogare care afişează cărţile care sunt împrumutate.
SELECT [Link] AS "Carti imprumutate"
FROM carte c, operatii o
WHERE [Link] IS NULL AND [Link]=[Link];
b. Afişaţi cărţile care fac parte dintr-o anumită categorie precizată, în ordinea alfabetică a titlului.
SELECT titlu, categorie
FROM carte
WHERE categorie LIKE 'INFORMATICA' ORDER BY titlu;
Subiectul 40.
a. Afişaţi cărţile din bibliotecă în ordinea alfabetică a categoriei din care fac parte.
SELECT titlu, categorie
FROM carte ORDER BY categorie, titlu;
b. Afişaţi în ordine crescătoare a cotei cărţile unui anumit autor al cărui nume este precizat,
vizualizând conţinutul tabelei.
SELECT cotacarte, titlu, autor
FROM carte
WHERE autor LIKE 'MIHAI EMINESCU'
ORDER BY cotacarte ASC;
12