You are on page 1of 19

Baze de Date 2010 _ Intrebări orientative

MULTIPLE CHOICE

1. Normalizarea rezolva
a. Anomaliile de stergere, de actualizare si de creare
b. Anomalia de actualizare, de stergere, si de creare
c. Anomalia de inserare, de actualizare si de creare
d. Anomaliile de stergere, de actualizare si de inserare

2. O cheie primara
a. Poate fi compusa numai dintr-un singur atribut
b. Poate fi compusa din mai multe atribute
c. Poate fi compusa dintr-un singur atribut care are si valori NULL
d. Poate fi compusa din zero, unul sau mai multe atribute

3. Prima forma normala rezolva anomaliile cauzate de


a. Grupurile repetitive si atributele multivaloare
b. Dependentele partiale de cheia primara
c. Dependentele tranzitive
d. Relatiile de tip unu-la-mai-multi

4. A doua forma normala rezolva anomaliile cauzate de


a. Grupurile repetitive
b. Dependentele partiale de cheia primara
c. Grupurile repetitive si atributele multivaloare
d. Dependentele tranzitive

5. A treia forma normala rezolva anomaliile cauzate de


a. Dependentele partiale de cheia primara
b. Grupurile repetitive
c. Dependentele tranzitive
d. Atributele multivaloare

6. Relatia m:n devine in modelul relational


a. tabel asociativ cu cheia primara formata numai din doua chei externe pentru cele doua
tabele asociate
b. tabel asociativ cu cheia primara formata din doua chei externe pentru cele doua tabele
asociate plus eventuale coloane aditionale
c. chei externe
d. entitate independenta

7. Limbajul de definire a datelor (DDL - Data Definition Language) nu include urmatoarea instructiune
a. INSERT
b. CREATE
c. ALTER
d. DROP
8. Limbajul de manipulare a datelor (DML – Data Manipulation Language) nu include instructiunea
a. INSERT
b. UPDATE
c. DELETE
d. DROP

9. Sintaxa corecta pentru o restrictie NOT NULL este


a. nume_coloana REFERENCES NOT NULL
b. nume_coloana tip_de_date IS NOT NULL
c. nume_coloana tip_de_date NOT NULL
d. DEFAULT [NULL | NOT NULL]

10. Utilizarile valide ale instructiunii ALTER TABLE nu includ


a. Adaugarea coloanelor
b. Eliminarea unei chei primare
c. Redenumirea unui tabel
d. Adaugarea unei restrictii

11. Operatorul UNION


a. Include randurile duplicate in setul de rezultate
b. Combina seturile de rezultate a doua interogari intr-un singur set de rezultate si elimina
randurile duplicate din setul de rezultate
c. Combina doua interogari intr-o singura interogare de tip join
d. Este numit JOIN in unele implementari SQL

12. Care este varianta corecta pentru a crea tabelul CARTE, cu caracteristicile de mai jos (codc cheie
primara, coddom cheie secundara), indicand cheile la nivel de tabel?
(Tabelele DOMENIU_CARTE si CARTE sunt in relatia 1:M).
a. CREATE TABLE CARTE
(codc CHAR(5) PRIMARY KEY,
titlu VARCHAR2(30),
autor VARCHAR2(30),
pret NUMBER(8,2),
nrex NUMBER(3),
coddom CHAR(5) NOT NULL);
b. CREATE TABLE CARTE
(codc CHAR(5) PRIMARY KEY,
titlu VARCHAR2(30),
autor VARCHAR2(30),
pret NUMBER(8,2),
nrex NUMBER(3),
coddom CHAR(5) NOT NULL
REFERENCES DOMENIU(coddom));
c. CREATE TABLE CARTE
(codc CHAR(5),
titlu VARCHAR2(30),
autor VARCHAR2(30),
pret NUMBER(8,2),
nrex NUMBER(3),
coddom CHAR(5) NOT NULL,
PRIMARY KEY (codc),
FOREIGN KEY (coddom) REFERENCES DOMENIU (coddom));

13. Sa se creeze tabelul asociativ imprumuta, a carui structura este data mai jos(codc, codcit si dataim
fac parte din cheia primara). Sa se precizeze legatura cu tabelele carte si cititor.
a. IMPRUMUTA (
codc CHAR(5),
codcit CHAR(5),
dataim DATE DEFAULT SYSDATE,
datares DATE,
dataef DATE,
PRIMARY KEY (codc, codcit, dataim),
FOREIGN KEY (codc)
REFERENCES CARTE (codc),
FOREIGN KEY (codcit)
REFERENCES CITITOR(codcit));
b. IMPRUMUTA (
codc CHAR(5) PRIMARY KEY,
codcit CHAR(5) PRIMARY KEY,
dataim DATE DEFAULT SYSDATE PRIMARY KEY,
datares DATE,
dataef DATE,
FOREIGN KEY (codc)
REFERENCES CARTE (codc),
FOREIGN KEY (codcit)
REFERENCES CITITOR(codcit));
c. IMPRUMUTA (
codc CHAR(5) REFERENCES CARTE (codc),
codcit CHAR(5) REFERENCES CITITOR(codcit),
dataim DATE DEFAULT SYSDATE PRIMARY KEY,
datares DATE,
dataef DATE,
PRIMARY KEY (codc, codcit);

14. Sa se creeze tabelul CARTE_INFO(codc, titlu, autor) prin copiere din tabelul
CARTE(codc CHAR(5), titlu VARCHAR2(30), autor VARCHAR2(30),
pret NUMBER(8,2), nrex NUMBER(3), coddom CHAR(5))
selectand cartile care au coddom=’I’.
a. CREATE TABLE CARTEINFO
(codc CHAR(5),
titlu VARCHAR2(30),
autor VARCHAR2(30),
FROM CARTE
PRIMARY KEY (codc),
FOREIGN KEY (coddom)
REFERENCES DOMENIU (coddom));
b. CREATE TABLE CARTE_INFO
(codc CHAR(5) PRIMARY KEY,
titlu VARCHAR2(30),
autor VARCHAR2(30),
FROM CARTE
WHERE coddom = ’I’;
c. CREATE TABLE CARTE_INFO
AS SELECT codc, titlu, autor
FROM CARTE
WHERE coddom = ’I’;

15. Care este comanda corecta prin care se adauga constrangerea de cheie primara tabelului
IMPRUMUTA (cod_cititor, cod_carte, data_imprumut, data_restituire)?
a. ALTER TABLE IMPRUMUTA
ADD PRIMARY KEY cod_cititor, PRIMARY KEY cod_carte, PRIMARY KEY
data_imprumut;
b. ALTER TABLE IMPRUMUTA
ADD PRIMARY KEY cod_cititor, cod_carte, data_imprumut;
c. ALTER TABLE IMPRUMUTA
ADD CONSTRAINT cp PRIMARY KEY (cod_cititor, cod_carte, data_imprumut);
d. ALTER TABLE IMPRUMUTA
ADD CONSTRAINT PRIMARY KEY (cod_cititor, cod_carte, data_imprumut);

16. Sa se insereze in tabelul CARTE toate cartile din tabelul CARTE_INFO, presupunand ca tabelul
CARTE_INFO a fost deja creat.
a. CREATE TABLE CARTE
AS SELECT codc, titlu, autor
FROM CARTE_INFO;
b. INSERT INTO CARTE
SELECT
FROM CARTE_INFO;
c. CREATE TABLE CARTE
AS SELECT *
FROM CARTE_INFO;
d. INSERT INTO CARTE
SELECT *
FROM CARTE_INFO;

17. Pentru profesorii titulari, sa se maresca cumulul cu 10% si sa se rotunjeasca la 2 zecimale.


a. UPDATE PROF SET CUMUL = (CUMUL*1.1)
WHERE TITULAR=’Y’;
b. MODIFY PROF SET CUMUL = ROUND(CUMUL*1.1,2)
WHERE TITULAR=’Y’;
c. UPDATE PROF SET CUMUL = ROUND(CUMUL*1.1,2);
WHERE TITULAR=’Y’;
d. UPDATE PROF SET CUMUL = ROUND(CUMUL*1.1,2);

18. Sa se modifice pretul cartilor din biblioteca, care se gasesc intr-un numar de exemplare mai mic decat
media numarului de exemplare pe biblioteca. Noua valoare a pretului sa fie egala cu suma preturilor
cartilor scrise de ‘BARBU’.
a. UPDATE CARTE
SET pret = (SELECT SUM(pret)
FROM CARTE
WHERE autor = ’BARBU’)
WHERE nrex < (SELECT AVG(nrex)
FROM CARTE);
b. MODIFY CARTE
SET pret = (SELECT SUM(pret)
FROM carte
WHERE autor = ’BARBU’)
WHERE nrex < (SELECT AVG(nrex)
FROM CARTE);
c. UPDATE CARTE
pret = ( SUM(pret)
FROM carte
WHERE autor = ’BARBU’)
WHERE nrex < ( AVG(nrex) FROM CARTE);
d. UPDATE CARTE
pret = (SELECT SUM(pret)
FROM carte
WHERE autor = ’BARBU’ and
nrex < ( AVG(nrex) FROM CARTE);

19. O uniune (join) fara o clauza WHERE sau o clauza JOIN


a. Nu returneaza nici un rand din setul de rezultate
b. Reprezinta o uniune interna (inner join)
c. Are ca rezultat un produs cartezian
d. Reprezinta o uniune externa (outer join)

20. O uniune externa (outer join) nu


a. Poate fi scrisa in Oracle SQL folosind un simbol (+) in clauza FROM
b. Poate fi scrisa in Oracle SQL folosind un simbol (+) in clauza WHERE
c. Returneaza toate randurile din unul sau din ambele tabele
d. Poate fi catre stanga, catre dreapta sau completa

21. Sa se obtina pentru fiecare carte, codul sau si numarul de exemplare care nu au fost inca restituite.
a. SELECT codc
FROM IMPRUMUTA
WHERE dataef IS NULL
GROUP BY codc;
b. SELECT COUNT(*)
FROM IMPRUMUTA
GROUP BY codc;
c. SELECT codc, COUNT(*)
FROM IMPRUMUTA
WHERE dataef IS NULL
GROUP BY codc;
d. SELECT COUNT(*)
FROM IMPRUMUTA
WHERE dataef =0
GROUP BY codc;

22. Care este secventa corecta care afiseaza cate carti au fost imprumutate cel putin de doua ori?
a. SELECT COUNT(COUNT(codcarte))
FROM imprumuta
GROUP BY codcarte
HAVING COUNT(codcarte)>1;
b. SELECT COUNT(codcarte)
FROM imprumuta
GROUP BY codcarte
HAVING COUNT(codcarte)>1;
c. SELECT COUNT(COUNT(codcarte))
FROM imprumuta
WHERE COUNT(codcarte)>1;
d. SELECT COUNT(codcarte)
FROM imprumuta
ORDER BY codcarte
HAVING COUNT(codcarte)>1;

23. Care este secventa corecta care afiseaza pentru fiecare domeniu de carte, numarul cartilor din domeniu,
media preturilor si numarul total de exemplare?
a. SELECT codcarte, COUNT(*), AVG(pret)
FROM CARTE
GROUP BY codcarte;
b. SELECT coddomeniu, AVG(pret), SUM(nrex)
FROM CARTE
GROUP BY codcarte;
c. SELECT coddomeniu, COUNT(*), AVG(pret), SUM(nrex)
FROM CARTE
GROUP BY coddomeniu;
d. SELECT COUNT(*), AVG(pret), SUM(nrex)
FROM CARTE
ORDER BY codcarte;

24. Care este comanda corecta care pentru fiecare facultate, insereaza in tabelul TOTALURI(cod_fac,
nr_prof, total_sal_fac) numarul de profesori si suma salariilor pe care facultatea o plateste profesorilor
sai?
a. INSERT TO TOTALURI
SELECT COD_FAC, COUNT(*) , SUM(SALARIU)
FROM PROF
ORDER BY COD_FAC;
b. INSERT INTO TOTALURI
SELECT COD_FAC, COUNT(*) , SUM(SALARIU)
FROM PROF ;
c. INSERT INTO TOTALURI
SELECT COD_FAC, COUNT(*) , SUM(SALARIU)
FROM PROF
GROUP BY COD_FAC;
d. INSERT INTO TOTALURI
SELECT COD_FAC, SUM(COD_PROF), SUM(SALARIU)
FROM PROF
GROUP BY COD_FAC;

25. Sa se obtina titlurile si preturile cartilor mai scumpe decat cartea avand titlul “Baze de date”, al carui
autor este Popescu (self join).
a. SELECT x.titlu, x.pret
FROM carte x, y
WHERE x.pret < y.pret
AND y.titlu = ’Baze de date’
AND y.autor = ’Popescu’;
b. SELECT x.titlu, x.pret
FROM carte x, carte y
WHERE x.pret > y.pret
AND y.titlu = ’Baze de date’
AND y.autor = ’ Popescu’;
c. SELECT x.titlu, x.pret
FROM carte x, carte y
WHERE x.pret > y.pret
AND titlu = ’Baze de date’
AND autor = ’ Popescu’;
d. SELECT x.titlu, x.pret
FROM carte x, carte y
WHERE x.pret > y.pret
AND y.titlu = ’Baze de date’, y.autor = ’ Popescu’;

26. Pentru tabelele


PROFESORI(codp, nume, pren, salariu)
COPII (codc, codp, nume_c, virsta)
care este secventa corecta pentru a afisa profesorii care au copii?
a. SELECT a.nume, a.pren
FROM PROFESORI A
WHERE a.codp IN (SELECT DISTINCT codp
FROM COPII);
b. SELECT a.nume, a.pren
FROM PROFESORI A
WHERE a.codp IN DISTINCT codp
FROM COPII;
c. SELECT a.nume, a.pren
FROM PROFESORI A
WHERE a.codp IN COPII;

27. Pentru tabelele


PROFESORI(codp, nume, pren, salariu)
COPII (codc, codp, nume_c, virsta)
care este secventa corecta pentru a afisa profesorii fara copii?
a. SELECT a.nume, a.pren
FROM PROFESORI A
WHERE a.codp IS NOT (SELECT DISTINCT codp FROM COPII);
b. SELECT a.nume, a.pren
FROM PROFESORI A
WHERE a.codp NOT IN (SELECT DISTINCT codp FROM COPII);
c. SELECT a.nume, a.pren
FROM PROFESORI A
WHERE a.codp NOT IN SELECT codp FROM copii;

28. Se considera pentru actionarii unei firme, urmatoarele tabele


ACTIONARI(nume varchar2(20), cod_act number(5))
ACTIUNI (cod_act number(5), seriain number(8), seriasf number(8), valoare number(8))
(unde seriain si seriasf reprezinta seria de inceput, respectiv de sfarsit al intervalului de actiuni pe care
il are un actionar).
Care este secventa corecta care afiseaza pentru un actionar (introdus de la tastatura), intervalele
seriilor actiunilor sale?
a. SELECT a.seriain, a.seriasf, b.nume
FROM actiuni a, actionari b
WHERE a.cod_act=b.cod_act AND b.nume=‘&x’;
b. SELECT a.seriain, a.seriasf, b.nume
FROM actiuni , actionari
WHERE a.cod_act=b.cod_act AND nume=‘&x’;
c. SELECT a.seriain, a.seriasf, b.nume
FROM actiuni a, actionari b
WHERE a.cod_act=b.cod_act ;
d. SELECT a.seriain, a.seriasf, b.nume
FROM actiuni a, actionari b
WHERE a.cod_act=b.cod_act OR b.nume=‘&x’;

29. Se considera pentru actionarii unei firme, tabelul


ACTIUNI (cod_act number(5), seriain number(8), seriasf number(8), valoare number(8))
(unde seriain si seriasf reprezinta seria de inceput, respectiv de sfarsit al intervalului de actiuni pe care
il are un actionar).
Care este secventa corecta care afiseaza suma necesara firmei pentru plata tuturor
devidentelor (numarul de actiuni inmultit cu valoarea unei actiuni)?
a. SELECT SUM((seriain+seriasf)*valoare))
FROM ACTIUNI;
b. SELECT SUM((seriasf-seriasf)*valoare))
FROM ACTIUNI;
c. SELECT SUM((seriain-seriasf)*valoare))
FROM ACTIUNI;
d. SELECT SUM((seriasf-seriain+1)*valoare))
FROM ACTIUNI;

30. Pentru tabelele


Angajat(cod_angajat, nume, pren, …..)
Are_functia (cod_angajat, cod_functie, salariu ,…..)
Functii(cod_functie, ……)
care este comanda corecta pentru a calcula suma salariilor angajatului ‘ENE ANA’, care cumuleaza
mai multe functii, in diferite compartimente?
a. SELECT COUNT(SALARIU) AS SALARIU_CUMULAT
FROM salariat, are_functia
WHERE s.cod_salariat=a.cod_salariat
AND NUME='ENE' AND PREN='ANA’;
b. SELECT Sum(SALARIU) AS SALARIU_CUMULAT
FROM salariat, are_functia
WHERE NUME='ENE' , PREN='ANA’;
c. SELECT Sum(SALARIU) AS SALARIU_CUMULAT
FROM salariat s, are_functia a
WHERE s.cod_salariat=a.cod_salariat
AND NUME='ENE' AND PREN='ANA’;

31. Care este comanda corecta care afiseaza daca exista angajati care nu lucreaza in departamentul
‘Contractari’ si al caror salariu coincide cu salariul unui angajat din departamentul ‘Contractari’?
a. SELECT nume, salariu, cod_depart
FROM salariati
WHERE salariu IN (SELECT salariu FROM salariati , department d
WHERE s.cod_depart = d.cod_depart AND nume_depart <> ‘Contractari’)
AND cod_depart= (SELECT cod_depart FROM department
WHERE nume_depart = ‘Contractari’);
b. SELECT nume, salariu, cod_depart
FROM salariati
WHERE salariu IS IN (SELECT salariu FROM salariati , department
WHERE s.cod_depart = d.cod_depart , nume_depart = ‘Contractari’)
AND cod_depart<> (SELECT cod_depart FROM department
WHERE nume_depart = ‘Contractari’);
c. SELECT nume, salariu, cod_depart
FROM salariati
WHERE (salariu) IN (SELECT salariu FROM salariati s, department d
WHERE s.cod_depart = d.cod_depart AND nume_depart = ‘Contractari’)
AND cod_depart<> (SELECT cod_depart FROM department
WHERE nume_depart = ‘Contractari’);

32. Care este comanda corecta care afiseaza numarul total de carti imprumutate si restituite pentru fiecare
cititor al unei biblioteci?
a. SELECT cod_cititor, COUNT()
FROM imprumuta
WHERE data_restituirii NOT NULL
GROUP BY cod_cititor;
b. SELECT cod_cititor, COUNT(*)
FROM imprumuta
WHERE data_restituirii IS NOT NULL;
c. SELECT cod_cititor, COUNT(*)
FROM imprumuta
GROUP BY cod_cititor;
d. SELECT cod_cititor, COUNT(*)
FROM imprumuta
WHERE data_restituirii IS NOT NULL
GROUP BY cod_cititor;

33. Care este comanda corecta care afiseaza numele salariatilor care castiga mai mult decat salariul mediu
pe companie, in ordine crescatoare a salariului?
a. SELECT nume
FROM salariati
WHERE salariu >AVG(salariu);
b. SELECT nume
FROM salariati
WHERE salariu > (SELECT AVG(salariu) FROM salariati)
ORDER BY salariu;
c. SELECT nume
FROM salariati
WHERE salariu > (SELECT AVG(salariu) FROM salariati
ORDER BY salariu);
d. SELECT nume
FROM salariati
WHERE salariu > (SELECT AVG(salariu) FROM salariati)
ORDER BY 1;

34. Care comanda listeaza numele tuturor angajatilor care au a treia litera din nume 'a'?
a. SELECT nume
FROM salariat
WHERE nume LIKE '__a$';
b. SELECT nume
FROM salariat
WHERE nume LIKE '%a%';
c. SELECT nume
FROM salariat
WHERE nume LIKE '__a%';

35. Care dintre urmatoarele comenzi intoarce numarul zilei din luna carespunzator datei curente?
a. SELECT TO_CHAR(SYSDATE,’DDD’)
FROM dual;
b. SELECT TO_CHAR(SYSDATE,’DAY’)
FROM dual;
c. SELECT TO_CHAR(SYSDATE,’D’)
FROM dual;
d. SELECT TO_CHAR(SYSDATE,’DD’)
FROM dual;

36. Care este comanda care nu elimina simultan spatiile de la inceputul si sfarsitul coloanei nume?
a. SELECT TRIM(nume)
FROM salariat;
b. SELECT RTRIM(LTRIM(nume))
FROM salariat;
c. SELECT LTRIM(RTRIM(nume))
FROM salariat;
d. SELECT LTRIM(nume)
FROM salariat;

37. Care comanda care afiseaza numarul de angajati din fiecare departament?
a. SELECT cod_departament, COUNT(*)
FROM salariat;
b. SELECT cod_departament, SUM(cod_angajat)
FROM salariat
GROUP BY cod_departament;
c. SELECT cod_departament, COUNT(*)
FROM salariat
GROUP BY cod_departament;
d. SELECT cod_departament, COUNT()
FROM salariat
GROUP BY cod_departament;

38. Care este comanda corecta care afiseaza codul departamentelor pentru care salariul minim depaseste
5000?
a. SELECT cod_departament
FROM salariat
WHERE MIN(salariu)>5000
GROUP BY cod_departament;
b. SELECT cod_departament
FROM salariat
GROUP BY cod_departament
HAVING MIN(salariu)>5000;
c. SELECT cod_departament
FROM salariat
GROUP BY cod_departament
MIN(salariu)>5000;

39. Care este comanda corecta care afiseza:


- codurile departamentelor in care lucreaza cel putin un angajat, iar pentru fiecare
dintre acestea si pentru fiecare manager care lucreaza in departamentul respectiv numarul
de salariati;
- numarul de salariati pentru fiecare departament indiferent de manager;
- numarul de angajati subordonati unui manager indiferent de department;
- numarul total de angajati din companie?
a. SELECT cod_depart, cod_manager, COUNT(cod_angajat)
FROM salariati
GROUP BY CUBE (cod_depart, cod_manager);
b. SELECT cod_depart, cod_manager, COUNT(cod_angajat)
FROM salariati
GROUP BY cod_depart, cod_manager;
c. SELECT cod_depart, cod_manager, COUNT(cod_angajat)
FROM salariati
GROUP BY ROLLUP (cod_depart, cod_manager);

40. Care este comanda corecta care afiseaza:


- codurile departamentelor in care lucreaza cel putin un angajat, iar pentru fiecare dintre
acestea si pentru fiecare manager care lucreaza in departamentul respectiv numarul de
salariati;
- numarul de salariati pentru fiecare departament indiferent de manager;
- numarul total de angajati din companie?
a. SELECT cod_depart, cod_manager, COUNT(*)
FROM salariati
GROUP BY CUBE (cod_depart, cod_manager);
b. SELECT cod_depart, cod_manager, COUNT(*)
FROM salariati
GROUP BY cod_depart, cod_manager;
c. SELECT cod_depart, cod_manager, COUNT(*)
FROM salariati
GROUP BY ROLLUP (cod_depart, cod_manager);

41. Care este comanda corecta care afiseaza numarul total al cartilor imprumutate in anul 2009?
a. SELECT COUNT()
FROM imprumuta
WHERE TO_CHAR(data_imprumutului,’yyyy’)=2009;
b. SELECT COUNT(*)
FROM imprumuta
WHERE TO_CHAR(data_imprumutului,’yyyy’)=2009;
c. SELECT COUNT(*)
FROM imprumuta
WHERE data_imprumutului=2009;
d. SELECT COUNT(*)
FROM imprumuta
WHERE TO_CHAR(data_imprumutului,’yy’)=2009;
42. Care este comanda corecta care afiseaza numele si salariul angajatilor condusi direct de Ionescu
Mihai?
a. SELECT nume, salariu
FROM salariati
WHERE cod_sef != (SELECT cod_angajat FROM salariati
WHERE nume ='Ionescu' AND prenume ='Mihai' );
b. SELECT nume, salariu
FROM salariati
WHERE cod_sef = (SELECT cod_angajat FROM salariati
WHERE nume ='Ionescu', prenume ='Mihai' );
c. SELECT nume, salariu
FROM salariati
WHERE cod_sef = ‘Ionescu Mihai';
d. SELECT nume, salariu
FROM salariati
WHERE cod_sef = (SELECT cod_angajat FROM salariati
WHERE nume ='Ionescu' AND prenume ='Mihai' );

43. Care este comanda corecta care afiseaza numele salariatilor si numele departamentelor in care
lucreaza, inclusiv departamentele in care nu lucreaza salariati?
a. SELECT nume_salariat, nume_departament
FROM salariati s, departamente d
WHERE s.cod_departament = d.cod_departament;
b. SELECT nume_salariat, nume_departament
FROM salariati s, departamente d
WHERE s.cod_departament(+) = d.cod_departament;
c. SELECT nume_salariat, nume_departament
FROM salariati s, departamente d
WHERE s.cod_departament = d.cod_departament(+);
d. SELECT nume_salariat, nume_departament
FROM salariati s, departamente d
WHERE s.cod_departament(+) = d.cod_departament(+);

44. Care este comanda corecta care listeaza numele functiilor salariatilor care lucreaza in departamentul
30, fara duplicate?
a. SELECT DISTINCT nume_functie
FROM salariati s, functii f
WHERE cod_functie=cod_functie
AND cod_departament= 30;
b. SELECT DISTINCT nume_functie
FROM salariati s, functii f
WHERE s.cod_functie=f.cod_functie
AND cod_departament= 30;
c. SELECT DISTINCT nume_functie
FROM salariati, functii
WHERE s.cod_functie=f.cod_functie
AND cod_departament= 30;
d. SELECT nume_functie
FROM salariati s, functii f
WHERE s.cod_functie=f.cod_functie
AND cod_departament= 30;
45. Care este comanda corecta care afiseaza toate functiile pe care nu lucreaza angajati?
a. SELECT cod_functie
FROM functii
WHERE cod_functie IN
(SELECT cod_functie FROM salariati WHERE cod_functie IS NOT NULL);
b. SELECT cod_functie
FROM functii
WHERE cod_functie NOT IN
(SELECT cod_functie FROM salariati WHERE cod_functie IS NULL);
c. SELECT cod_functie
FROM functii
WHERE cod_functie NOT IN
(SELECT cod_functie FROM salariati);
d. SELECT cod_functie
FROM functii
WHERE cod_functie NOT IN
(SELECT cod_functie FROM salariati WHERE cod_functie IS NOT NULL);

46. Care este comanda corecta care listeaza fara duplicate, codul operelor de arta (numeric), codul
(numeric) si numele artistilor (sir de caractere)?
a. SELECT cod_opera, cod_artist, null nume
FROM opera
UNION ALL
SELECT null, cod_artist, nume
FROM artist;
b. SELECT cod_opera, cod_artist, TO_CHAR(null) nume
FROM opera
UNION
SELECT TO_NUMBER(null), cod_artist, nume
FROM artist;
c. SELECT cod_opera, cod_artist, nume
FROM opera
UNION
SELECT cod_artist, nume
FROM artist;

47. Care este comanda corecta care obtine codurile cartilor care se gasesc in biblioteca in mai putin de 20
exemplare si care au fost împrumutate de cel putin trei ori?
a. SELECT codcarte FROM carte
WHERE nrex < 20
MINUS
SELECT codcarte FROM imprumuta
GROUP BY codcarte
HAVING COUNT(*) > 3;
b. SELECT codcarte FROM carte
WHERE nrex < 20
INTERSECT
SELECT codcarte FROM imprumuta
GROUP BY codcarte
HAVING COUNT(*) > 3;
c. SELECT codcarte FROM carte
WHERE nrex < 20
UNION
SELECT codcarte FROM imprumuta
GROUP BY codcarte
HAVING COUNT(*) > 3;

48. Care este comanda corecta care afiseaza informatii referitoare la operele de arta, artistii care le-au creat
si galeriile în care sunt expuse?
a. SELECT cod_opera, titlu, data_crearii, a.cod_artist, nume, prenume,
g.cod_galerie, nume_galerie, adresa
FROM opera o, galerie g, artist a
WHERE o.cod_artist = a.cod_artist;
b. SELECT cod_opera, titlu, data_crearii, a.cod_artist, nume, prenume,
g.cod_galerie, nume_galerie, adresa
FROM opera, galerie, artist
WHERE opera.cod_artist = artist.cod_artist
AND o.cod_galerie = g.cod_galerie;
c. SELECT cod_opera, titlu, data_crearii, a.cod_artist, nume, prenume,
g.cod_galerie, nume_galerie, adresa
FROM opera o, galerie g, artist a
WHERE o.cod_artist = a.cod_artist
AND o.cod_galerie = g.cod_galerie;

49. Care este comanda corecta care afiseaza informatii referitoare la titlul operelor de arta expuse în
galeriile având codul 20 sau 40, respectiv numele si prenumele artistilor care le-au realizat?
a. SELECT titlu, nume, prenume
FROM opera JOIN artist
WHERE cod_galerie IN (20, 40);
b. SELECT titlu, nume, prenume
FROM opera NATURAL JOIN artist
WHERE cod_galerie IN (20, 40);
c. SELECT titlu, nume, prenume
FROM opera NATURAL JOIN artist USING cod_artist
WHERE cod_galerie IN (20, 40);
d. SELECT titlu, nume, prenume
FROM opera JOIN artist ON (cod_artist)
WHERE cod_galerie IN (20, 40);

50. Care este comanda corecta care afiseaza informatii referitoare la artisti si operele acestora, inclusiv cei
care nu au opere expuse în cadrul muzeului?
a. SELECT nume, prenume, titlu
FROM opera o
RIGHT OUTER JOIN artist a ON (o.cod_artist = a.cod_artist);
b. SELECT nume, prenume, titlu
FROM opera o
LEFT OUTER JOIN artist a ON (o.cod_artist = a.cod_artist);
c. SELECT nume, prenume, titlu
FROM opera o, artist
WHERE o.cod_artist = a.cod_artist(+);
d. SELECT nume, prenume, titlu
FROM opera o
FULL OUTER JOIN artist a ON o.cod_artist = a.cod_artist;
51. Care este comanda corecta care afiseaza numele si prenumele artistilor, precum si titlurile operelor
create de acestia? Se vor afisa si artistii care nu au opere expuse în cadrul muzeului, precum si titlurile
operelor al caror autor este necunoscut.
a. SELECT nume, prenume, titlu
FROM opera o
RIGHT OUTER JOIN artist a ON (o.cod_artist = a.cod_artist);
b. SELECT nume, prenume, titlu
FROM opera o, artist a
WHERE o.cod_artist(+) = a.cod_artist(+);
c. SELECT nume, prenume, titlu
FROM opera o
FULL OUTER JOIN artist a ON (o.cod_artist = a.cod_artist);
d. SELECT nume, prenume, titlu
FROM opera o
LEFT OUTER JOIN artist a ON (o.cod_artist = a.cod_artist);

52. Care este comanda corecta care afiseaza titlul, codul artistului si valoarea operelor create de artistul
caruia îi apartine opera având codul 200 si care se afla expuse în aceeasi galerie cu operele al caror cod
este 100 sau 110? Se presupune ca o opera are un singur autor.
a. SELECT titlu, cod_artist, valoare
FROM opera
WHERE cod_artist != (SELECT MAX(cod_artist)
FROM opera WHERE cod_opera = 200)
AND cod_galerie IN (SELECT cod_galerie
FROM opera WHERE cod_opera IN (100, 110));
b. SELECT titlu, cod_artist, valoare
FROM opera
WHERE cod_artist = (SELECT cod_artist
FROM opera WHERE cod_opera = 200)
AND cod_galerie IN (SELECT cod_galerie
FROM opera WHERE cod_opera IN (100, 110));
c. SELECT titlu, cod_artist, valoare
FROM opera
WHERE cod_artist = (SELECT cod_artist
FROM opera WHERE cod_opera = 200)
AND cod_galerie NOT IN (SELECT cod_galerie
FROM opera WHERE cod_opera IN (100, 110));

53. Care este comanda corecta care afiseaza pentru fiecare artist titlul si valoarea celei mai ieftine opere de
arta expuse în muzeu?
a. SELECT titlu, cod_artist, valoare
FROM opera
WHERE valoare IN (SELECT MIN(valoare)
FROM opera
GROUP BY cod_artist);
b. SELECT titlu, cod_artist, valoare
FROM opera
WHERE valoare = (SELECT MIN(valoare)
FROM opera);
c. SELECT titlu, cod_artist, valoare
FROM opera
WHERE valoare = (SELECT MIN(valoare)
FROM opera
ORDER BY cod_artist);

54. Care este comanda corecta care afiseaza codul, numele si prenumele artistilor care au cel putin trei
opere de arta expuse în muzeu?
a. SELECT cod_artist, nume, prenume
FROM artist a
WHERE 3 <= (SELECT COUNT(*)
FROM opera);
b. SELECT cod_artist, nume, prenume
FROM artist a
WHERE 3 <= (SELECT COUNT(*)
FROM opera
WHERE cod_artist = a.cod_artist);
c. SELECT cod_artist, nume, prenume
FROM artist a
WHERE 3 <= (SELECT SUM(cod_opera)
FROM opera
WHERE cod_artist = a.cod_artist);

55. Care este comanda care sterge toti angajatii din departamentul 80 care nu au comision?
a. DELETE FROM angajati
WHERE comision IS NULL
OR cod_departament = 80;
b. DELETE FROM angajati
WHERE comision IS NULL
AND cod_departament = 80;
c. DELETE FROM angajati
WHERE comision = NULL
AND cod_departament = 80;

56. Care este comanda corecta care afiseaza:


- valoarea totala a operelor de arta ale unui autor, expuse în cadrul fiecarei galerii;
- valoarea totala a operelor din fiecare galerie, indiferent de autor;
- valoarea totala a operelor fiecarui autor, indiferent de galerie;
- valoarea totala a operelor.
a. SELECT cod_galerie, cod_artist, SUM(valoare)
FROM opera
GROUP BY cod_galerie, cod_artist;
b. SELECT cod_galerie, cod_artist, SUM(valoare)
FROM opera
GROUP BY ROLLUP(cod_galerie, cod_artist);
c. SELECT cod_galerie, cod_artist, SUM(valoare)
FROM opera
GROUP BY CUBE(cod_galerie, cod_artist);

57. Care este comanda corecta care afiseaza:


- valoarea totala a operelor de arta ale unui autor, expuse în cadrul fiecarei galerii;
- valoarea totala a operelor din fiecare galerie, indiferent de autor;
- valoarea totala a operelor.
a. SELECT cod_galerie, cod_artist, SUM(valoare)
FROM opera
GROUP BY cod_galerie, cod_artist;
b. SELECT cod_galerie, cod_artist, SUM(valoare)
FROM opera
GROUP BY ROLLUP(cod_galerie, cod_artist);
c. SELECT cod_galerie, cod_artist, SUM(valoare)
FROM opera
GROUP BY CUBE(cod_galerie, cod_artist);

58. Considerând galeriile al caror cod este mai mic decât 50, care este comanda corecta care calculeaza
media valorilor operelor:
- pentru fiecare galerie si, în cadrul acesteia, pentru fiecare artist;
- pentru fiecare artist si, în cadrul acestuia, pentru anii de achizitie corespunzatori.
a. SELECT cod_galerie, cod_artist,
TO_CHAR(data_achizitiei, 'yyyy') "an achizitie",
AVG(valoare) "Valoare medie"
FROM opera WHERE cod_galerie < 50
GROUP BY CUBE (cod_galerie, cod_artist, TO_CHAR(data_achizitiei, 'yyyy'));
b. SELECT cod_galerie, cod_artist,
TO_CHAR(data_achizitiei, 'yyyy') "an achizitie",
AVG(valoare) "Valoare medie"
FROM opera WHERE cod_galerie < 50
GROUP BY GROUPING SETS
((cod_galerie, cod_artist), (cod_artist, TO_CHAR(data_achizitiei, 'yyyy')));
c. SELECT cod_galerie, cod_artist,
TO_CHAR(data_achizitiei, 'yyyy') "an achizitie",
AVG(valoare) "Valoare medie"
FROM opera WHERE cod_galerie < 50
GROUP BY ROLLUP (cod_galerie, cod_artist, TO_CHAR(data_achizitiei, 'yyyy'));

59. Se da urmatoarea vizualizare


CREATE VIEW v_angajati
AS
SELECT cod_ang, nume, prenume, salariu, data_angajarii
FROM angajati
WITH READ ONLY;
Care dintre urmatoarele comenzi este corecta?
a. INSERT INTO v_angajati
VALUES (10, ‘Ion’, ‘Daniel’, 1000,’05/12/2009’);
b. DELETE FROM v_angajati
WHERE salariu > 1000;
c. SELECT *
FROM v_angajati;
d. UPDATE v_angajati
SET salariu = salariu + 500
WHERE cod_angajat = 10;

60. Se da urmatoarea vizualizare


CREATE VIEW v_angajati
AS
SELECT cod_ang, nume, prenume, salariu, cod_departament
FROM angajati
WHERE cod_departament = 30
WITH CHECK OPTION;
Care dintre urmatoarele comenzi este corecta?
a. INSERT INTO v_angajati
VALUES (10, ‘Ion’, ‘Daniel’, 1000, 505);
b. SELECT *
FROM v_angajati
WHERE salariu > 505;
c. UPDATE v_angajati
SET cod_departament= 505
WHERE cod_departament = 30;

61. Care este comanda corecta care obtine numele primilor trei angajati care au cele mai mari salarii?
a. SELECT nume
FROM angajati a
WHERE 3>(SELECT COUNT(*)
FROM angajati
WHERE salariu > a.salariu);
b. SELECT nume
FROM angajati a
WHERE COUNT(*) >(SELECT 3
FROM angajati
WHERE salariu > a.salariu);
c. SELECT nume
FROM angajati
WHERE 3>(SELECT COUNT(*)
FROM angajati);

62. Care este comanda corecta care obtine numele angajatilor care castiga salariul maxim in departamentul
in care lucreaza?
a. SELECT nume
FROM salariati s
WHERE salariu =(SELECT MIN(salariu)
FROM angajati );
b. SELECT nume
FROM salariati
WHERE salariu =(SELECT salariu
FROM salariati
WHERE salariu = MIN(salariu));
c. SELECT nume
FROM salariati s
WHERE salariu =(SELECT MIN(salariu)
FROM angajati
WHERE cod_departament=s.cod_departament);

63. Care este comanda corecta care obtine titlurile cartilor care momentan sunt imprumutate (inca nu au
fost restituite)? Dataef reprezinta data la care cititor a restituit efectiv cartea.
a. SELECT titlu
FROM carte
WHERE cod_carte IN
(SELECT DISTINCT cod_carte
FROM imprumuta
WHERE dataef IS NULL);
b. SELECT titlu
FROM carte
WHERE cod_carte NOT IN
(SELECT DISTINCT cod_carte
FROM imprumuta
WHERE dataef IS NULL);
c. SELECT titlu
FROM carte
WHERE cod_carte IN
(SELECT DISTINCT cod_carte
FROM imprumuta
WHERE dataef IS NOT NULL);

64. Care este comanda corecta care obtine numele cititorilor si titlurile cartilor imprumutate de acestia in
anul 2008?
a. SELECT nume, titlu
FROM cititor, carte, imprumuta
WHERE imprumuta.cod_carte= carte.cod_carte
AND TO_CHAR(data_imprumut,’yyyy’) = 2008;
b. SELECT nume, titlu
FROM cititor, carte, imprumuta
WHERE imprumuta.cod_carte= carte.cod_carte
AND imprumuta.cod_cititor= cititor.cod_cititor
AND TO_CHAR(data_imprumut,’yyyy’) = 2008;
c. SELECT nume, titlu
FROM cititor, carte, imprumuta
WHERE imprumuta.cod_carte= carte.cod_carte
AND imprumuta.cod_cititor= cititor.cod_cititor
AND TO_CHAR(data_imprumut,’2008’) = 2008;

65. Care este comanda corecta care afiseaza jobul pentru care salariul mediu este minim?
a. SELECT cod_job, AVG(salariu)
FROM angajati
GROUP BY cod_job
HAVING AVG(salariu)=(SELECT MIN(salariu)
FROM angajati
GROUP BY cod_job);
b. SELECT cod_job, AVG(salariu)
FROM angajati
GROUP BY cod_job
HAVING AVG(salariu)=(SELECT MIN(AVG(salariu))
FROM angajati
GROUP BY cod_job);
c. SELECT cod_job, AVG(salariu)
FROM angajati
GROUP BY cod_job
HAVING MIN(salariu)=(SELECT AVG(MIN(salariu))
FROM angajati
GROUP BY cod_job);