SOLUTII - Baze de Date - Adunate

457
Arhitectura ANSI-SPARC pe 3 nivele pentru bazele de constă din: nivelul extern, nivelul conceptual si nivelul intern Arhitectura unui instrument OLAP este o arhitectura pe: 3 niveluri Arhitectura unui instrument OLAP include: un motor analitic pe post de server pentru aplicatiile desktop Arhitectura unui instrument OLAP include: una sau mai multe baze de date Arhitectura unui instrument OLAP include: uneltele utilizatorului final pentru operatii de raportare etc. si un motor analitic pe post de server pentru aplicatiile desktop Autorul conceptului de "data warehouse" (depozit de date) este: William Inmon Cardinalul relatiei rezultate din produsul cartezian de relatii este: mai mare decât cardinalul relatiei rezultate Cel mai simplu mod de vizualizare a datelor dintr-un depozit de date este reprezentat de: un cub n-dimensional CGI înseamnă: Common Gateway Interface Cunostintele sunt: informatii contextualizate Datele dintr-un sistem OLTP: ) sunt date dinamice, detaliate, incosistente, fragmentate, redundante constituie o sursă de date pentru depozitele de date Datele sunt: informatii primare Depozitele de date constituie baza informatională a: sistemelor de suport pentru decizii (DSS) Depozitele de date diferă fată de sistemele informatice clasice din punctul de vedere al ciclului de dezvoltare si de viată si diferă fată de sistemele OLTP din punctul de vedere al frecventei si tipului de tranzactii permise Fluxul de intrare a datelor în depozitul de date constă din operatii de: actualizare în loturi Forma normală Boyce-Codd este o variantă mai tare a: FN3 În algebra relatională există: operatii unare si binare Independenta fată de strategiile de acces la datele dintr-o bază de date este: Necesară Informatiile sunt: date validate, organizate si relationate Integritatea referentială a bazei de date se referă la: relatiile din baza de date Interogările de actiune sunt interogări de: actualizare, adăugare, stergere si creare de table Intr-o bază de date este necesară : si independenta fizică si independenta logică a datelor Intr-un depozit de date este necesar să existe: un sistem coerent de codificare si reprezentare a informatiilor un sistem consistent de unităti de măsură un sistem stabil de reprezentare fizică a datelor Mecanismul charge-back pentru utilizarea resurselor este o caracteristică a: ) depozitelor de date Metadatele care intră în componenta unui depozit de date pot fi: metadate administrative Metadatele care intră în componenta unui depozit de date pot fi: metadate pentru optimizare MIDI inseamnă:: Musical Instrument Digital Interface Modelul relational se bazează pe: ) noŃiunea matematică de submultime Nivelul conceptual; descrie datele si relatiile dintre ele, fără detalii de implementare Nivelul extern: reprezintă modurile diferite în care diferiti utilizatori ai bazei de date percep datele stocate în aceasta O bază de date este: c) un model al microuniversului la care se referă O bază de date este:= c) si (a) si (b) O bază de date multimedia este o bază de date care inglobează informatie de tip: text, grafic, sonor, animat, video

Transcript of SOLUTII - Baze de Date - Adunate

Page 1: SOLUTII - Baze de Date - Adunate

Arhitectura ANSI-SPARC pe 3 nivele pentru bazele de constă din: nivelul extern, nivelul conceptual si nivelul intern Arhitectura unui instrument OLAP este o arhitectura pe: 3 niveluri Arhitectura unui instrument OLAP include: un motor analitic pe post de server pentru aplicatiile desktop Arhitectura unui instrument OLAP include: una sau mai multe baze de date Arhitectura unui instrument OLAP include: uneltele utilizatorului final pentru operatii de raportare etc. si un motor analitic pe post de server pentru aplicatiile desktop Autorul conceptului de "data warehouse" (depozit de date) este: William Inmon Cardinalul relatiei rezultate din produsul cartezian de relatii este: mai mare decât cardinalul relatiei rezultate Cel mai simplu mod de vizualizare a datelor dintr-un depozit de date este reprezentat de: un cub n-dimensional CGI înseamnă: Common Gateway Interface Cunostintele sunt: informatii contextualizate Datele dintr-un sistem OLTP: ) sunt date dinamice, detaliate, incosistente, fragmentate, redundante constituie o sursă de date pentru depozitele de date Datele sunt: informatii primare Depozitele de date constituie baza informatională a: sistemelor de suport pentru decizii (DSS) Depozitele de date diferă fată de sistemele informatice clasice din punctul de vedere al ciclului de dezvoltare si de viată si diferă fată de sistemele OLTP din punctul de vedere al frecventei si tipului de tranzactii permise Fluxul de intrare a datelor în depozitul de date constă din operatii de: actualizare în loturi Forma normală Boyce-Codd este o variantă mai tare a: FN3 În algebra relatională există: operatii unare si binare Independenta fată de strategiile de acces la datele dintr-o bază de date este: Necesară Informatiile sunt: date validate, organizate si relationate Integritatea referentială a bazei de date se referă la: relatiile din baza de date Interogările de actiune sunt interogări de: actualizare, adăugare, stergere si creare de table Intr-o bază de date este necesară : si independenta fizică si independenta logică a datelor Intr-un depozit de date este necesar să existe: un sistem coerent de codificare si reprezentare a informatiilor un sistem consistent de unităti de măsură un sistem stabil de reprezentare fizică a datelor Mecanismul charge-back pentru utilizarea resurselor este o caracteristică a: ) depozitelor de date Metadatele care intră în componenta unui depozit de date pot fi: metadate administrative Metadatele care intră în componenta unui depozit de date pot fi: metadate pentru optimizare MIDI inseamnă:: Musical Instrument Digital Interface Modelul relational se bazează pe: ) noŃiunea matematică de submultime Nivelul conceptual; descrie datele si relatiile dintre ele, fără detalii de implementare Nivelul extern: reprezintă modurile diferite în care diferiti utilizatori ai bazei de date percep datele stocate în aceasta O bază de date este: c) un model al microuniversului la care se referă O bază de date este:= c) si (a) si (b) O bază de date multimedia este o bază de date care inglobează informatie de tip: text, grafic, sonor, animat, video

Page 2: SOLUTII - Baze de Date - Adunate

O cheie de acces: pentru depozitele de date cuprinde si o variabilă temporală O relatie este în FN2 dacă este în FN1 si dacă : ) oricare dintre atributele sale care nu fac parte din cheia primară este complet dependent functional de cheia primară O relatie este în FN3 dacă este în FN2 nici unul dintre atributele sale care nu fac parte din cheia primară nu este, prin tranzitivitate, dependent funcŃional de cheia primară OLTP înseamnă: on line transactional processing Operatiile de actualizare a depozitelor de date sunt: de tip adăugare Pentru optimizarea interogărilor pe baze de date relatioanle se recomandă: toate cele de mai sus Principalele activităti care compun asa-numitul out-flow din depozitele de date sunt: accesarea si livrarea datelor Printre componentele unui depozit de date se numără: componenta back-end Printre componentele unui depozit de date se numără: componenta front-end si managerul depozitului de date Printre componentele unui depozit de date se numără: componenta front-end si componenta back-end Printre componentele unui depozit de date se numără: datele detaliate si metadatele Printre componentele unui depozit de date se numără: datele operationale si metadatele; Printre componentele unui depozit de date se numără: datele sintetizate si metadatele Printre componentele unui depozit de date se numără: managerul depozitului de date Printre componentele unui depozit de date se numără: metadatele Printre componentele unui depozit de date se numără: unelte de dezvoltare a aplicatiilor Printre componentele unui depozit de date se numără: unelte pentru sisteme de informatii executive Printre componentele unui depozit de date se numără: uneltele de data mining si OLAP si uneltele de raportare si interogare Printre regulile cu care W. Inmon a definit depozitele de date se numără: depozitul de date si mediul operational trebuie să fie separate, depozitul de date conŃine date istorice referitoare la o lungă perioadă de timp Printre regulile cu care W. Inmon a definit depozitele de date se numără: datele din depozitul de date trebuie să fie integrate Printre regulile cu care W. Inmon a definit depozitele de date se numără: datele din depozitul de date sunt orientate spre obiect Procesul de ierarhizare si relocare a datelor intrate într un data warehouse down-flow Procesul de sintetizare, împachetare si distribuire a datelor intrate într un data warehouse poartă numele de up-flow Proiectarea bazei de date la nivel logic constă din realizarea: schemei externe si a schemei conceptuale a bazei de dateâ Redundanta datelor: este creată în mod intentionat în depozitele de date Reprezentarea fizică a datelor din baza de date este descrisă la nivelul: intern Rezolutia monitorului VGA este de 640x480 pixeli Schema clasică a unui depozit de date este: de tip stea Sistemele de gestiune a bazelor de date prerelationale sunt: sistemele ierahice si sistemele de tip retea Sistemele de gestiune a bazelor de date relationale comerciale sunt sistemele de gestiune care respectă: b) cele 12 reguli ale lui E.F. Codd Sistemele de gestiune post-relationale ale bazelor de date sunt ) sistemele orientate obiect si sistemele hibride; Transformările si circuitul datelor în depozitele de date sunt descrise prin următoarele tipuri de fluxuri:: in-flow, meta-flow, out-flow, down-flow, up-flow Un depozit de date este: o colectie tematică si integrată de date si o colectie de date nevolatilă dar dinamică în timp Un index se poate sterge cu clauza: DROP INDEX Un model de date este: o colectie de concepte care descriu structura bazei de date si un set de operatii de bază care descriu modul de lucru cu baza de date Un sistem de gestiune a bazei de date este o componentă: software

Page 3: SOLUTII - Baze de Date - Adunate

Un sistem de gestiune a bazei de date este: si (a) si (b) Valorificarea informatiei de date se din depozitele poate face prin analiza multidimensională Valorificarea informatiei din depozitele de date se poate face prin: mecanismul OLAP Valorificarea informatiei din depozitele de date se poate face prin: mecanismul OLAP si analiza multidimensională

Page 4: SOLUTII - Baze de Date - Adunate

1

Cap. 8 - Aplicarea controalelor de securitate folosind DCL 1. Legislatia referitoare la securitate

A. Impune utilizarea rolurilor in administrarea securitatii bazei de date B. Restrictioneaza utilizarea datelor personale C. Impune administratorilor de baze de date sa protejeze reteaua de calculatoare D. Impune plasarea identitatilor furate in internet E. Impune avertizarea fiecarei personae individuale care ar putea avea date compromise.

Raspuns B, E 2. Securitatea este necesara pentru ca:

A. Persoanele oneste fac greseli B. Controalele de securitae ale aplicatiilor nu sunt adecvate C. 80% dintre fraude sunt comise de hackeri din exterior D. Bazele de date conectate la internet sunt vulnerabile E. Controalele de securitate mentin onestitatea persoanelor

Raspuns A, B, D, E 3. Intre intrusii care incearca sa penetreze sistemele conectate la internet se numara

A. Auditori bancari B. Spioni ai concurentei C. Autori de jurnale web D. Hackeri E. Angajati nemultumiti

Raspuns B, D, E 4. Componentele care trebuie protejate sunt:

A. Statiile de lucru client B. Serverele C. Bazele de date D. Sistemele de operare E. Retelele

Raspuns A, B, C, D, E 5. In Microsoft SQL Server, un cont de acces (cont de utilizator)

A. Poate sa se conecteze la oricate baze de date B. Primeste automat privilegii de acces la baza de date C. Poate folosi autentificarea Windows D. Poate fi autentificat de Microsoft SQL Server E. Detine o schema a bazei de date

Raspuns A, C, D 6. In SQL Server , o baza de date

A. Este detinuta de un cont de acces B. Poate avea alocati unu sau mai multi utilizatori C. Poate obtine date de system (de exemplu, master) si date de utilizator (aplicatie). D. Poate avea attribute privilegii E. Exista o colectie logica de obiecte de baze de date

Raspuns B, C, E 7. In Oracle, un cont de utilizator

A. Se poate conecta la oricate baze de date B. Primeste automat privilegii la baze de date C. Poate folosi autentificarea sistemului de operare D. Poate fi autentificat de sistemul DBSM Oracle E. Detine o schema a bazei de date

Raspuns B, C, D, E

Page 5: SOLUTII - Baze de Date - Adunate

2

8. In Oracle, o baza de date A. Este detinuta de un utilizator B. Poate avea definite unul sau mai multe conturi de utilizator C. Poate contine date system (de exemplu, schema sistemului) si date de utilizator (aplicatie) D. Este acelasi lucru cu o schema E. Este gestionata de o instanta Oracle

Raspuns B, C, E 9. Privilegiile de system

A. Sunt acordate intr-o maniera similara Oracle, Sybase si Microsoft SQL Server B. Sunt specifice unui obiect al bazei de date C. Permit beneficiarului sa efectueze o serie de functii administrative pe server, cum ar fi

oprirea serverului D. Sunt anulate cu ajutorul instructiunii SQL REMOVE E. Variaza intre bazele de date provenite de la producatori diferiti

Raspuns A, C, E 10. Privilegiile de obiecte

A. Sunt acordate intr-o maniera sililara in Oracle, Sybase si Microsoft SQL Server B. Sunt specifice unui obiect al bazei de date C. Permit beneficiarului sa efectueze o serie de functii administrative pe server, cum ar fi oprirea

serverului D. Sunt anulate cu ajutorul instructiunii SQL REMOVE E. Sunt atribuite cu ajutorul instructiunii SQL GRANT

Raspuns A, B, E 11. Utilizarea clauzei WITH GRANT OPTION la atribuirea privilegiilor de obiecte

A. Permite beneficiarului sa acorde privilegiul altor utilizatori B. Acorda privilegiile DBA ale beneficiarului intregii baze de date C. Poate conduce la probleme de securitate D. Va fi revocata in cascada daca privilegiul este ulterior revocat E. Este o procedura recomandata pe scara larga pentru ca este comoda in utilizare

Raspuns A, C, D 12. Rolurile

A. Pot fi atribuite unui singur utilizator B. Pot fi partajate de mai multi utilizatori C. Pot exista inainte de existenta utilizatorilor D. Pot contine oricate privilegii de obiecte E. Pot contine un singur privilegiu de obiecte

Raspuns B, C, D 13. Posibilele dezavantaje ale utilizarii rolurilor pentru securitate sunt

A. Sunt mai dificil de administrat decat privilegiile individuale B. Sunt eliminate atunci cand este sters utilizatorul C. Sunt eliminate atunci cand sunt sterse privilegiile D. Pot fi atribuite fara a lua in considerare toate privilegiile continute E. Este necesara o perioada suplimentara de instruire pentru administratorii care trebuie sa le

foloseasca Raspuns D, E 14. Vizualizarile pot ajuta la implementarea politicii de securitate prin restrictionarea coloanelor dintr-un table la care are acces un utilizator

A. Restrictionarea coloanelor dintr-un tavel la care are acces un utilizator B. Restrictionarea bazelor de date la care are acces un utilizator C. Restrictionarea randurilor dintr-un table la care acces un utilizator D. Stocarea rezultatelor auditarii bazei de date E. Monitorizarea intrusilor la baza de date

Raspuns A, C

Page 6: SOLUTII - Baze de Date - Adunate

3

15. Rolurile sunt create in Microsoft SQL Server si Sybase Adaptive Server utilizand

A. Procedura memorata sp_create_role B. Procedura memorata sp_add_role C. Procedura memorata sp_addrole D. Instructiunea CREATE TABLE E. Instructiunea GRANT

Raspuns C 16. Rolurile sunt create in Oracle folosind

A. Procedura memorata sp_create_role B. Procedura memorata sp_add_role C. Procedura memorata sp_addrole D. Instructiunea CREATE ROLE E. Instructiunea GRANT

Raspuns D 17. Privilegiile de roluri sunt atribuite utilizatorilor de baze de date in Microsoft SQL Server si Sybase Adaptive Server folosind

A. Procedura memorata sp_create_role_member B. Procedura memorata sp_add_role_member C. Procedura memorata sp_addrolemember D. Instructiunea CREATE ROLE MEMBER E. Instructiunea GRANT

Raspuns C 18. Privilegiile de roluri sunt atribuite utilizatorilor de baze de date in Oracle folosind

A. Procedura memorata sp_create_role_member B. Procedura memorataq sp_add-role_member C. Procedura memorata sp_addrolemember D. Instructiunea CREATE ROLE MEMBER E. Instructiunea GRANT

Raspuns E 19. Scrieti instructiunea SQL pentru a acorda utilizarorilor manager_1 si manager_2 privilegiile SELECT, INSERT si DELETE pentru randurile din tabelul EMPLOYESS. Daca vreti sa tastati instructiunea, la inceput va trebui sa creati utilizatorii manager_1 si manager_1 Raspuns GRANT SELECT, INSERT, DELETE ON EMPLOYEE TO manager_1, manager_2< 20. Scrieti instructiunea SQL pentru a adauga privilegiile INSERT, UPDATE si DELETE ale utilizatorului clerk_127 la tabelul MOVIE. Daca vreti sa testati instructiunea, la inceput va trebui sa creati utilizatorul clerk_127 Raspuns REVOKE INSERT, UPDATE, DELETE ON MOVIE FROM clerk_127;

Page 7: SOLUTII - Baze de Date - Adunate

4

Cap. 9 - Mentinerea integritatii bazei de date cu ajutorul tranzactiilor

1. O tranzactie A. Poate fi procesata partial B. Nu poate fi procesata partial C. Schimba baza de date dintr-o stare consistenta in alta D. Este denumita uneori unitate de lucru E. Are proprietatile deschise de acronimul ACID

Raspuns B, C, D, E 2. Litera A din acronimul ACID provine de la

A. Automat B. Auxiliar C. Atomicitate D. Augumentat E. Administrare

Raspuns C 3. Litera C din acronimul ACID provine de la

A. Corelat B. Consistenta C. Codificare D. Calculat E. Consolidat

Raspuns B 4. Litera I din acronimul ACID provine de la

A. Integrare B. Instructiune C. Iconic D. Izolare E. Informatie

Raspuns D 5. Litera D de la acronimul ACID provine de la

A. Durabilitate B. Dedicatie C. Dualitate D. Date E. Distributie

Raspuns A 6. Procesul care anuleaza modificarile efectuate de o tranzactie esuata este numit

A. Inregistrarea tranzactiei B. Finalizare C. Refacere D. Recuperare E. Crearea unui punct de salvare

Raspuns C 7. Procesul care face permanente modificarile efectuate de o tranzactie este numit

A. Inregistrarea tranzactiei B. Finalizare C. Refacere D. Crearea unui punct de salvare E. Salvarea tranzactiei

Raspuns B

Page 8: SOLUTII - Baze de Date - Adunate

5

8. Suportul pentru tranzactii in bazele de date relationale include:

A. Identificarea inceputului fiecarei tranzactii B. Identificarea sfarsitului fiecarei tranzactii C. Managementul bazei de date dristibuite D. Salvari periodice ale bazei de date E. Jurnalul de tranzactii

Raspuns A, B, E 9. Microsoft SQL Server suporta urmatoarele moduri de tranzactii:

A. Finalizare automata B. Automat C. Durabil D. Explicit E. Implicit

Raspuns A, D, E 10. Oracle suporta urmatoarele moduri de tranzactii: Finalizare auiomata

A. Finalizarea automata B. Automat C. Durabil D. Explicit E. Implicit

Raspuns A, E 11. In modul implicit pentru tranzactii din Microsoft SQl Server, o tranzactie noua este initiata de

A. Conectarea la baza de date B. O instructiune COMMIT C. O instructiune ROLLBACK D. O Instructiune INSERT E. O instructiune SELECT

Raspuns D 12. In modul implicit pentru tranzactii in Oracle, o tranzactie noua este initiata de

A. Conectarea la baza de date B. O instructiune COMMIT C. O instructiune ROLLBACK D. O Instructiune INSERT E. O instructiune SELECT

Raspuns A, B, C 13. Instructiunile SQL utilizate pentru gestionarea tranzactiilor in Microsoft SQL Server si Sybase Adaptive Server

A. BEGIN TRANSACTION sunt

B. END TRANSACTION C. COMMIT D. ROLLBACK E. SET AUTOCOMMIT

Raspuns A, C, E 14. Instructiunile SQL utilizate pentru gestionarea tranzactiilor in Oracle

A. BEGIN TRANSACTION sunt

B. END TRANSACTION C. COMMIT D. ROLLBACK E. SET AUTOCOMMIT

Raspuns C, D, E

Page 9: SOLUTII - Baze de Date - Adunate

6

15. In My SQL, suportul pentru tranzactii

A. Se aplica doar motoarelor de stocare ISAM si MyISAM B. Se aplica doar motoarelor de stocare InnoDB si BDB C. Include modulele finalizare automata, implicit si explicit D. Include modurile finalizare automata si implicit E. Include modurile finalizare automata si explicit

Raspuns B, D 16. Instructiunile SQL utilizate pentru gestionarea tranzactiilor in DB2 UDB sunt

A. BEGIN TRANSACTION B. END TRANSACTION C. COMMIT D. ROLLBACK E. SAVE POINT

Raspuns C, D, E 17. Cantitatea de date afectata de o blocare (granularitatea blocarii) poate fi

A. O baza de date B. Un tabel C. Un rand D. O coloana E. Un bloc sau o pagina

Raspuns A, B, C, D, E 18. Probelma actualizarii concurente

A. Este o consecinta a partajarii simultane a datelor B. Nu poate aparea cand este activata (ON) optiunea AUTOCOMIT C. Este motivul pentru care trebuie asigurat suport pentru blocarea tranzactiilor D. Apare cand doi utilizatori ai bazei de date initiaza instructiuni SELECT care intra in conflict E. Apare cand doi utilizatori ai bazei de date efectueaza actualizari conflictuale acelorasi date

Raspuns A, C, E 19. O blocare

A. Este un element de control atasat datelor pentru a le rezerva in scopul actualizarii de catre utilizator B. Este anulata de obicei atunci cand are loc o operatie COMMIT sau ROLLBACK C. Are setat un interval de asteptare in sistemul DB2 si alte produse RDBMS D. Poate provoca aparitia unor conflicte atunci cand alti utilizatori incearca sa actualizeze datele blocate E. Poate avea niveluri si un protocol de extindere in unele produse RDBMS

Raspuns B, C, D, E 20. O interblocare

A. Este o blocare care a depasit intervalul de asteptare si din acest motiv nu mai este necesara B. Apare cand doi utilizatori ai bazei de date solicita simultar blocarea unor date blocate de

celalalt utilizator C. Poate, teoretic, sa plaseze doi sau mai multi utilizatori intr-o stare de asteptare finita D. Poate fi rezolvata prin detectarea interblocarilor in unele sisteme RDBMS E. Poate fi rezolvata prin intervale de asteptare a blocarii in unele sisteme EDBMS

Raspuns B, D, E

Page 10: SOLUTII - Baze de Date - Adunate

7

Capitolul 10 - Integrarea limbajului SQL in aplicatii

1. Un cursor este

A. Colectia de randuri returnate de o interograre la baza de date B. Un pointer(indicator) intr-un set de rezultate C. Acelasi lucru cu un set de rezultate D. Un buffer care pastreaza randurile extrase din baza de date E. O metoda de analiza a performantei instructiunilor SQL

Raspuns B

2. Un set de rezultate este: A. Colectia de randuri returnate de o interogare la baze de date B. Un pointer (indicator) intr-un cursor C. Acelasi lucru cu un cursor D. Un buffer care pastraza randurile extrase din baza de date E. O metoda de analiza a performantei instructiunilor SQL

Raspuns A 3. Inainte ca randurile sa poate fi extrase dintr-un cursor, cursor trebuie sa fie:

A. Declarat B. Finalizat C. Deschis D. Inchis E. Dezalocat F. Raspus A, C

4. Cursoanele sunt:

A. Destinate sa anuleze nepotrivirea dintre modul in care trateaza rezultatele unei interogari limbajele orientate pe obiecte si bazele de date relationale

B. Destinate sa anuleze nepotrivirea dintre modul in care trateaza rezultatele unei interogori limbajele procedurale si bazele de date relationale C. Incluse in limbajul Oracle PL/SQL D. Incluse in limbajul Sybase Transact-SQL E. Incluse in limbajul Microsoft Transact-SQL

Raspuns B, C, D, E 5. Numele cursorului este inclus in:

A. Instructiunea DECLARE CURSOR B. Instructiunea SELECT C. Instructiunea OPEN D. Instructiunea FETCH E. Instructiunea CLOSE

Raspuns A, C, D, E 6. Numele cursorului trebuie sa fie unic in

A. Un tabel B. Un rand C. Un set de rezultate D. O baza de tate E. Un program

Raspuns E 7. O instrctiune OPEN pentru cursor

A. Determina intodeauna rularea interogarii si completarea setului de rezultate cu date B. Pentru a determina rularea interogarii si plasarea unor date in setul de rezultate C. Trebuie sa inclusa o clauza INTO D. Trebuie sa includa numele cursorului E. Trebuie sa includa numele tabelului (tabelelor)

Raspuns B, D

Page 11: SOLUTII - Baze de Date - Adunate

8

8. ODBC este

A. O interfata API standars pentru conectarea la sistemele DBMS B. Independent de orice limbaj, sistem de operare sau sistem DBMS C. Un standard Micrososft D. Utilizat in programele Java E. Flexibil in tratarea limbajelor SQL proprietare

Raspuns A, B, E 9. JDBC este:

A. O interfata API standard pentru conectarea la sistemele DBMS B. Independent de orice limbaj, sistem de operare sau sistem DBMS C. Un standard Microsift D. Utilizat de programele java E. Flexibil in tratarea limbajelor SQL proprietate

Raspuns A, D, E 10. JSQL este

A. Un standard Sun Microsystems B. O metoda de inglobare a instructiunilor in java C. O extensie a unui standard ISO/ANSI D. O solutie middleware E. Independent de orice limbaj, sistem de operare sau sistem DBMS

Raspuns B, C 11. Solutiile middleware pentru conexiunile java

A. Folosesc metode java standard pentru a crea un sistem RDBMS B. Fac sistemul RDBMS sa arate la fel ca o baza de date orientata pe obiecte C. Ofera o metoda de inglobare a instructiunilor SQL in codul Java D. Sunt independente de orice limbaj, sistem de operare sau sistem DBMS E. Ruleaza de obicei intr-un server situat la distanta

Raspuns A, B, E 12. Microsoft .NET Frameworks include

A. Limbajul Transact-SQL B. Common Language Rutime (CLR) C. Common Gateway Interface (CGI) D. Framework Class Libraries (FCL) E. Infrastructura de suport pentru diferite specificatii de retea, limbaje de programare si platforme

Raspuns B, D, E 13. Limbajul SQL complet computational include instructiuni pentru

A. Scrierea de rapoarte B. Tratarea erorilor C. Cicluri D. Ramificari E. Procesarea cursorului

Raspuns B, C, D, E 14. O procedura de declansare este

A. Executata doar atunci cand este apelata B. Executata automat pe baza unui eveniment din baza de date C. Scrisa intr-un limbaj neprocedural D. Scrisa intr-un limbaj procedural E. Stocata in baza de date

Raspuns B, D, E

Page 12: SOLUTII - Baze de Date - Adunate

9

15. O procedura memorata este:

A. Executata doar atunci cand este apelata B. Executata automat pe baza unui eveniment din baza de date C. Scrisa intr-un limbaj neprocedural D. Scrisa intr-un limbaj procedural E. Stocata in baza de date

Raspuns A, D, E 16. Transact-SQL

A. Apare in Oracle si Microsoft SQL Server B. A aparut prima data in 1987 C. Include limbajul SQL standard insotit de extensii procedurale D. A fost dezvoltat in partenereriat de oracle si Sybase E. Este limbajul folosit pentru numeroase proceduri memorate oferite de Microsoft si sybase

Raspuns C, E 17. Elementele de limbaj incluse in Transact-SQL sunt

A. BEGIN si END pentru a incepe si incheia blocurile de instructiuni B. WHILE pentru repetarea instructiunilor C. Instructiunile SQL DDL, DQL, DML si DCL D. DECLARE pentru definirea variabilelor E. GOTO si EXIT pentru iesirea din cicluri

Raspuns A, B, C, D 18. PL/SQL

A. A fost cunoscut initial ca Ada B. A fost lansat prima data in 1991 C. A fost dezvoltat de CIA D. Nu include instruciuni SQL standard E. A aparut prima data in sistemul Oracle versiunea 6

Raspuns B, D, E 19. Elementele de limbaj incluse in PL/SQL sunt

A. DECLARE pentru definirea variabilelor B. WAITFOR pentru intarzierea executarilor instructiunilor C. EXCEPTION pentru tratarea exceptiilor D. FOR LOOP si WHILE pentru formarea ciclurilor E. instructiunea SELECT

Raspuns A, C, D 20. Elementele de limbaj incluse atat in PL/SQL, cat si in TRANSACT-SQL sunt

A. BACKUP si RESTORE pentru salvarea si restaurarea elementelor din baza de date B. IF…ELSE pentru executarea conditionata a instructiunilor C. NULL ca indicator care nu executa nici o actiune D. DECLARARE pentru definirea variabilelor E. RETURN pentru iesirea dintr-un bloc de instructiuni

Raspuns B, D, E

Page 13: SOLUTII - Baze de Date - Adunate

10

Cap.11 – Elemente de ajustare si performanta ale limbajului SQL

1. Cerintele pentru performanta

A. Ar trebui stabilite dupa ajustarea instructiunilor SQL B. Asigura o cale de identificare a instructiunilor ce necesita ajustare C. Sunt mai bune atunci cand contin criterii complexe D. Asigura o cale de a afla cand se incheie particularizarea unei interograri E. Sunt dezvoltate doar pentru a-I face pe auditori fericiti

Raspuns B, D 2. Criteriile si scrierile efectuate pe disc pot fi diminuate

A. Alocand buffere de capacitate suficienta B. Plasand toate fisierele bazei de dte pe o singura unitate de disc C. Introducand toata baza de date in memorie D. Adaugand indexuri pentru toate coloanele importante din tabel E. Dispersand fisierele pe toate unitatile de disc disponibile

Raspuns A, C, E 3. Sistemul calculatorului poate fi ajustat

A. Colectand date statistice ale bazei de date B. Aplicand actualizarile de securitate disponibile C. Selectand componente hardware rapide si fiabile D. Respectand recomandarile de ajustare ale sistemului SGBD E. Consultand un ghid de ajustare al sistemului de operare

Raspuns C, E 4. Un proiect eficient de tabel include

A. Folosirea tipului VARCHAR pentru toate de tip caracter cu lungime variabila B. Folosirea celui mai mic tip de data numerica posibil care retine valorile datelor C. Folosind proceduri de declansare oricand este posibil D. Folosind tipuri de date identice pentru cheile externe corespunzatoare E. Folosind tipuri de date identice pentru toate coloanele cu cheie primara

Raspuns B, D 5. Planul de executie a unei interogari

A. Descrie modul in care va rula sistemul DBMS o interogare B. Este stocat in zona de cache SQL C. este creat folosind utilitarul pentru planuri explicative al sistemului RDBMS D. Necesita un tabel de planuri pentru stocarea rezultatelor explicative E. Necesita folosirea unei proceduri memorate

Rezultat A, C, D 6. Optimizatorul de interogari

A. Creaza un plan de executie a interogarii in tabelul de planuri B. Determina cea mai buna cale de executie a unei instructiuni SQL C. Poate folosi date statistice adunate din baza de date D. Poate folosi reguli aplicate modului in care a fost scrisa instructiunea E. Poate fi bazat pe cost sau bazat pe reguli

Raspuns B, C, D, E 7. Pentru a scrie interogari proiectate corect, dezvoltatorul trebuie

A. Sa stie caracteristicile datelor din baza de date B. Sa potriveasca tipurile de date in predicate C. Sa foloseasca indicii cat mai des posibil D. Sa evite coloanele si tabelele care nu sunt necesare E. Sa maximizeze numarul de randuri din fiecare set de rezultate

Raspuns A, B, D

Page 14: SOLUTII - Baze de Date - Adunate

11

8. Scanarile unui tabel pot fi evitate A. Incluzand o clauza WHERE care refera o coloana indexata B. Folosind GROUP BY in loc de DISTINCT C. Asigurandu-va ca datele statistice sunt actualizate D. Configurand cel putin un predicat sa faca referire la coloana principala a unui index E. Evitand coloanele care nu sunt folositoare

Raspuns A, C, D 9. Un index nu poate fi folosit cand

A. Clauza WHERE face referire la a doua coloana a unui index B. Exista o clauza LIKE care face referire la un sir de comparatie care contine un caracter de inlocuire (cu exceptia primei pozitii a sirului) C. Operatorul NOT este folosit intr-un predicat D. O functie SQL este inclusa intr-o comparatie de coloane (exceptand cazul in care corespunde unui index bazat pe functii) E. Operatorul NOT EQUAL este folosit intr-un predicat.

Raspuns A, C, D, E 10. Aspectele privind folosirea indexurilor includ

A. Amplasarea de indexuri pentru toate coloanele actualizate frecvent B. Amplasarea de indexuri pentru coloanele cu cheie externa C. Evitarea suprapunerii indexurilor D. Crearea de indexuri pentru coloanele care au doar cateva valori posibile E. Evitarea indexurilor unice

Raspuns B, C 11. Aspectele de ajustare privitoare la MySQL include

A. Indexuri bazate pe functii B. Indexuri rezumat C. Indexuri organizate pe grupuri D. Optiunile motorului de stocare E. Indexuri bit-map

Raspuns B, D 12 Aspecte de ajustare privitoare la Oracle include

A. Indexuri bazate pe functii B. Indexuri rezumat C. Indexuri organizate pe grupuri D. Optiunile motorului de stocare E. Indexuri bit-map

Raspuns A, E 13. Aspectele de ajustare privitoare la Microsoft SQL Sercer include

A. Indexuri bazate pe functii B. Indexuri rezumat C. Indexuri organizate pe grupuri D. Optiunile motorului de stocare E. Indexuri bit-map

Raspuns C 14. Un plan explicativ in Oracle

A.Necesita folosirea unui tabel de planuri B. Contine o coloana PLAN_ID pentru o identificare unica C. Poate fi vizualizat folosind intrumentul Entreprinse Manager D. Poate fi vizualizat folosind limbajul SQL prin selectarea din tabelul de planuri E. Este creat folosind instructiunea CREATE_PLAN

Raspuns A, C, D 15. Un plan de executie In Microsoft SQL Server

A. Necesita folosirea unui tabel de planuri

Page 15: SOLUTII - Baze de Date - Adunate

12

B. Poate fi afisat folosind o optiune din utilitarul SQL Query Analyzer C. Afiseaza planul de executie intr-un format text D. Afiseaza planul de executie intr-un format grafic E. Poate fi vizualizat in SQL prin selectarea din tabelul de planuri

Raspuns B, D 16. La ajustarea instructiunii INSERT , ar trebui luata in consideratie

A. Intretinerea indexului B. Expansiunea randului C. Optiunea CASCADE D. Spatiul liber adecvat E. Rescrierile interogarilor

Raspuns A, D 17. La ajustarea interactiunii UPDATE, ar trebui luata in consideratie

A. Intretinerea indexului B. Expasnsiunea randului C. Optiunea CASCADE D. Spatiul liber adecvat E. Rescrierea interogarilor

Raspuns A, B 18. La ajustarea instructiunii DELETE, ar trebui sa die luata in consideratie

A. Intretinerea indexului B. Expansiunea randului C. Optiunea CASCADE D. Spatiul liber adecvat E. Rescrierile interogarilor

Raspuns A, C 19. Tipurile de date ar trebui sa corespunda

A. pentru toate coloanele cu cheie primara B. Intre cheia primara si coloanele corespunzatoare cu cheie secundara C. Intre cheia primara si coloanele corespunzatoare cu cheie externa D. Intre valorile din coloana si valorile literale comparate in predicate E. Pentru toate indexurile bazate pe functii

Raspuns C, D 20. Principala cauza a problemelor legate de performantele interogarilor este

A. un sistem de operare slab ajustat B. O instructiune SQL redactata neprofesionist C. Supraincarcarea procedurii de declansare D. Supraancarcarea intretinerii indexurilor E. Expansiunea randului

Raspuns B

©GMX

Page 16: SOLUTII - Baze de Date - Adunate

1

SISTEME DE GESTIUNE A BAZELOR DE DATE 2007-2008

1) O bază de date este: a) o colectie de date aflate în relatie unele cu altele si structurată astfel încât să poată servi unui anumit scop b) un set de date corelate si organizate în scopul prelucrării lor rapide si concomitente de către mai multe persoane. c) si (a) si (b) d) nici (a) nici (b) Raspuns C 2) O bază de date este: a) un tabel organizat pe coloane b) o listă organizată pe linii c) un model al microuniversului la care se referă Raspuns C 3) Datele sunt: a) informatii contextualizate b) cunostinte care au suferit prea putine prelucrari c) informatii primare Raspuns C 4) Informatiile sunt: a) date contextualizate b) date validate, organizate si relationate c) cunostinte care au suferit doar putine prelucrari Raspuns B 5) Cunostintele sunt: a) informatii contextualizate b) date contextualizate c) informatii validate, organizate si relationate Raspuns A 6) Un model de date este: a) o colectie de concepte care descriu tipurile de date din baza de date si un set de operatii de bază care descriu modul de interogare si actualizare a acestora b) o colectie de concepte care descriu structura bazei de date si un set de operatii de bază care descriu modul de lucru cu baza de date c) o colectie de concepte care descriu datele, informatiile si cunostintele înmagazinate în baza de date si un set de operatii de bază care descriu modul actualizare a acestora Raspuns B 7) Sistemele de gestiune a bazelor de date prerelationale sunt: a) sistemele grafice b) sistemele de fisiere c) sistemele ierahice si sistemele de tip retea Raspuns C 8) Sistemele de gestiune a bazelor de date relationale comerciale sunt sistemele de gestiune care respectă: a) cele 12 reguli ale lui Chuck Kelly b) cele 12 reguli ale lui E.F. Codd c) cele 12 reguli restrictii ale lui D.L. Childs Raspuns B

Page 17: SOLUTII - Baze de Date - Adunate

2

9) Modelul relational se bazează pe: a) notiunea matematică de relatie binară între multimi b) noŃiunea matematică de submultime a unui produs cartezian de mulŃimi c) noŃiunea matematică de relaŃie ternară între mulŃimi Raspuns B 10) Tabelul este reprezentarea conventională si comodă a: a) entitătilor b) entitătilor si a relatiilor n-m dintre entităti c) entitătilor si relatiilor 1-m dintre entităti d) entitătilor si relatiilor dintre entităti D sau B? Reamintim faptul că în modelul relaŃional, orice entitate si relaŃie dintre entităŃi este modelată matematic prin conceptul de relaŃie si reprezentată convenŃional printr-o tabelă Rezolvarea relatiilor n-m In acest caz, ne bazăm pe faptul că în modelul relaŃional nu numai entităŃile ci si relaŃiile dintre ele sunt relaŃii în sens matematic si, ca urmare, pot fi reprezentate prin tabele. 11) Sistemele de gestiune post-relationale ale bazelor de date sunt a) sistemele orientate obiect si sistemele hibride; b) sistemele obiect-relatioanle; c) sistemele orientate obiect; Raspuns A 12) Un sistem de gestiune a bazei de date este o componentă: a) software b) hardware c) si (a) si (b) Raspuns A 13) Un sistem de gestiune a bazei de date este: a) o interfată între baza de date si utilizatorii ei b) o interfaŃă între baza de date si administratorul ei c) si (a) si (b) Raspuns C 14) Intr-o bază de date este necesară : a) numai independenta fizică a datelor b) numai independenta logică a datelor c) si independenta fizică si independenta logică a datelor Raspuns C 15) Independenta fată de strategiile de acces la datele dintr-o bază de date este: a) necesară b) interzisă c) optională Raspuns A 16) Arhitectura ANSI-SPARC pe 3 nivele pentru bazele de constă din: a) nivelul extern, nivelul hibrid si nivelul intern b) nivelul fizic, nivelul conceptual si nivelul hibrid c) nivelul extern, nivelul conceptual si nivelul intern; Raspuns C

Page 18: SOLUTII - Baze de Date - Adunate

3

17) Reprezentarea fizică a datelor din baza de date este descrisă la nivelul: a) hibrid; b) intern; c) conceptual; Raspuns B 18) Nivelul extern: a) reprezintă modurile diferite în care diferiti utilizatori ai bazei de date percep datele stocate în aceasta b) reprezintă modul unic în care datele din baza de date sunt percepute de către proprietarul, administratorul si proiectantul bazei de date c) permite sistemului de operare să interogheze baza de date Raspuns A 19) Nivelul conceptual a) descrie datele si relatiile dintre ele, precum si modul de implementare a acestora la nivelul fizic b) descrie datele si relatiile dintre ele, fără detalii de implementare c) constă exclusiv din schema conceptuală a bazei de date Raspuns B 20) Proiectarea bazei de date la nivel logic constă din realizarea: a) schemei interne si a schemei conceptuale a bazei de date; b) schemei externe si a schemei conceptuale a bazei de date; c) schemei externe si a schemei interne a bazei de date; Raspuns B 21) Integritatea referentială a bazei de date se referă la: a) relatiile din baza de date b) entitătile din baza de date c) si la relatiile si la entitătile din baza de date Raspuns A 22) Forma normală Boyce-Codd este o variantă mai tare a: a) FN1 b) FN3 c) FN5 Raspuns B 23) O relatie este în FN2 dacă este în FN1 si dacă : a) oricare dintre atributele sale care nu fac parte din cheia primară este complet dependent functional de cheia primară b) oricare dintre atributele sale care nu fac parte din cheia primară ia câte o singură valoare pentru fiecare instantă a sa c) oricare dintre atributele sale care nu fac parte din cheia primară ia valoarea NULL Raspuns A 24) O relatie este în FN3 dacă a) este în FN1 si în FN2 simultan b) este în FN1 si nici unul dintre atributele sale care nu fac parte din cheia primară nu este, prin tranzitivitate, dependent functional de cheia primară c) este în FN2 nici unul dintre atributele sale care nu fac parte din cheia primară nu este, prin tranzitivitate, dependent funcŃional de cheia primară Raspuns C 25) Interogările de actiune sunt interogări de: a) creare de tabel, actualizare si adăugare b) actualizare, adăugare si stergere

Page 19: SOLUTII - Baze de Date - Adunate

4

c) actualizare, adăugare, stergere si creare de table Raspuns C 26) Un index se poate sterge cu clauza: a) DELETE INDEX b) DROP INDEX c) REMOVE INDEX Raspuns B 27) În algebra relatională există: a) numai operatii unare b) numai operatii binare c) operatii unare si binare Raspuns C 28) Cardinalul relatiei rezultate din produsul cartezian de relatii este: a) mai mare decât cardinalul relatiei rezultate din .θ-jonctiunea acelorasi relatii b) egal cu cardinalul relatiei rezultate din . θ-jonctiunea acelorasi relatii c) mai mic decât cardinalul relatiei rezultate din .-joncŃiunea acelorasi relatii Raspuns A? 29) Pentru optimizarea interogărilor pe baze de date relatioanle se recomandă: a) utilizarea clauzei WHERE în detrimentul clauzei HAVING pentru a filtra înregistrările returnate de clauza SELECT b) utilizarea cuvântului-cheie DISTINCT în detrimentul clauzei GROUP BY pentru a găsi o listă de înregistrări distincte c) toate cele de mai sus Raspuns C 30) Pentru optimizarea interogărilor pe baze de date relaŃioanle se recomandă: a) evitarea clauzei LEFT JOIN si a valorii NULL pentru atribute b) utilizarea cererilor imbricate c) toate cele de mai sus Raspuns C 31) Autorul conceptului de "data warehouse" (depozit de date) este: a) E.F. Codd b) William Inmon c) Earl Hadden Raspuns B 32) Un depozit de date este: a) o colectie tematică si integrată de date b) o colectie de date nevolatilă dar dinamică în timp c) si (a )si (b) Raspuns C 33) Depozitele de date constituie baza informatională a: a) sistemelor de management a informatiilor (MIS) b) sistemelor de suport pentru decizii (DSS) c) sistemelor de suport pentru management (MSS) Raspuns B 34) Redundanta datelor:

Page 20: SOLUTII - Baze de Date - Adunate

5

a) este creată în mod intentionat în depozitele de date b) este minimizată în bazele de date relationale c) este maximizată în bazele de date obiect-relationale d) este minimizată în depozitele de date Raspuns A 35) Intr-un depozit de date este necesar să existe: a) un sistem coerent de codificare si reprezentare a informatiilor b) un sistem consistent de unităti de măsură c) un sistem stabil de reprezentare fizică a datelor d) toate cele de mai sus Raspuns D 36) O cheie de acces: a) pentru bazele de date relationale este nemodificabilă pe întreaga perioadă de existentă a bazei de date; b) pentru bazele de date orientate obiect este o instantă a obiectului access key c) pentru depozitele de date cuprinde si o variabilă temporală; Raspuns C 37) Operatiile de actualizare a depozitelor de date sunt: a) de tip stergere b) de tip adăugare c) si (a) si (b) Raspuns B 38) OLTP înseamnă: a) on line timing and processing b) object linking and trigger parsing c) on line transactional processing Raspuns C 39) Datele dintr-un sistem OLTP: a) sunt date dinamice, detaliate, incosistente, fragmentate, redundante b) constituie o sursă de date pentru depozitele de date, c) si (a) si (b) d) nici (a) nici (b) Raspuns C 40) Printre regulile cu care W. Inmon a definit depozitele de date se numără: a) depozitul de date si mediul operational trebuie să fie separate, b) depozitul de date conŃine date istorice referitoare la o lungă perioadă de timp c) si (a) si (b) Raspuns C 41) Printre regulile cu care W. Inmon a definit depozitele de date se numără: a) datele din depozitul de date trebuie să fie de tip relational b) datele din depozitul de date trebuie să fie integrate, c) si (a) si (b) Raspuns B 42) Printre regulile cu care W. Inmon a definit depozitele de date se numără: a) sunt permise actualizari online b) datele din depozitul de date sunt orientate spre obiect c) si (a) si (b) Raspuns B

Page 21: SOLUTII - Baze de Date - Adunate

6

43) Depozitele de date: a) diferă fată de sistemele informatice clasice din punctul de vedere al ciclului de dezvoltare si de viată b) diferă fată de sistemele OLTP din punctul de vedere al frecventei si tipului de tranzactii permise c) si (a) si (b) Raspuns C 44) Mecanismul charge-back pentru utilizarea resurselor este o caracteristică a: a) sistemelor OLTP b) sistemelor de fisiere c) depozitelor de date Raspuns C 45) Printre componentele unui depozit de date se numără: a) datele operationale; b) metadatele; c) si (a) si (b) Raspuns C 46) Printre componentele unui depozit de date se numără: a) managerul depozitului de date; b) sistemul de intrari si iesiri; c) managerul read/write online Raspuns A 47) Printre componentele unui depozit de date se numără: a) componenta front-end; b) managerul depozitului de date; c) si (a) si (b) Raspuns C 48) Printre componentele unui depozit de date se numără: a) componenta front-end b) componenta back-end c) si (a) si (b) Raspuns C 49) Printre componentele unui depozit de date se numără: a) componenta front-line b) componenta back-end c) si (a) si (b) Raspuns B 50) Printre componentele unui depozit de date se numără: a) uneltele de data mining si OLAP b) uneltele de raportare si interogare c) si (a) si (b) Raspuns C 51) Printre componentele unui depozit de date se numără: a) uneltele de data mining si OLTP b) unelte de dezvoltare a aplicatiilor c) si (a) si (b) Raspuns B

Page 22: SOLUTII - Baze de Date - Adunate

7

52) Printre componentele unui depozit de date se numără: a) uneltele de OLAP si OLTP b) unelte pentru sisteme de informatii executive c) si (a) si (b) Raspuns B 53) Printre componentele unui depozit de date se numără: a) datele sintetizate b) metadatele c) si (a) si (b) Raspuns C 54) Printre componentele unui depozit de date se numără: a) datele detaliate b) metadatele c) si (a) si (b) Raspuns C 55) Printre componentele unui depozit de date se numără: a) macrodatele b) metadatele c) si (a) si (b) Raspuns B 56) Metadatele care intră în componenta unui depozit de date pot fi: a) metadate administrative b) metadate de actualizare c) metadate calendaristice Raspuns A 57) Metadatele care intră în componenta unui depozit de date pot fi: a) metadate pentru optimizare b) metadate pentru minimizarea timpului de scriere în depozit c) metadate fragmentate Raspuns A 58) Valorificarea informatiei din depozitele de date se poate face prin: a) analiza multirelatională b) mecanismul OLAP c) mecanismul OLTP Raspuns B 59) Valorificarea informatiei din depozitele de date se poate face prin: a) analiza multidimensională b) analiza multirelatională c) mecanismul OLTP Raspuns A 60) Valorificarea informatiei din depozitele de date se poate face prin: a) mecanismul OLAP b) analiza multidimensională c) si (a) si (b) Raspuns C 61) Arhitectura unui instrument OLAP este o arhitectura pe:

Page 23: SOLUTII - Baze de Date - Adunate

8

a) 3 niveluri b) 2 niveluri c) 4 niveluri Raspuns A 62) Arhitectura unui instrument OLAP include: a) una sau mai multe baze de date b) o componenta OLTP c) metadate pentru optimizare Raspuns A 63) Arhitectura unui instrument OLAP include: a) un manager pentru datele sintetizate b) un motor analitic pe post de server pentru aplicatiile desktop c) metadate pentru optimizare Raspuns B 64) Arhitectura unui instrument OLAP include: a) uneltele utilizatorului final pentru operatii de raportare etc. b) un motor analitic pe post de server pentru aplicatiile desktop c) si (a) si (b) Raspuns C 65) Fluxul de intrare a datelor în depozitul de date constă din operatii de: a) stergere b) actualizare în loturi c) suprascriere Raspuns B 66) Procesul de sintetizare, împachetare si distribuire a datelor intrate într un data warehouse poartă numele de: a) up-flow b) in-flow c) down-flow Raspuns A 67) Procesul de ierarhizare si relocare a datelor intrate într un data warehouse poartă numele de: a) up-flow b) in-flow c) down-flow Raspuns C 8) Principalele activităti care compun asa-numitul out-flow din depozitele de date sunt: a) integrarea si interogarea datelor b) accesarea si livrarea datelor c) sintetizarea si abstractizarea datelor Raspuns B 69) Transformările si circuitul datelor în depozitele de date sunt descrise prin următoarele tipuri de fluxuri:: a) in-flow, up-flow, out-flow, meta-flow, alfa-flow, beta-flow; b) out-flow, up-flow, beta-flow, down-flow, in-flow; c) in-flow, meta-flow, out-flow, down-flow, up-flow Raspuns C 70) Schema clasică a unui depozit de date este:

Page 24: SOLUTII - Baze de Date - Adunate

9

a) de tip retea b) de tip stea c) de tip ierarhic Raspuns B 71) Cel mai simplu mod de vizualizare a datelor dintr-un depozit de date este reprezentat de: a) un cub n-dimensional; b) o stea; c) si (a) si (b) Raspuns A 72) O bază de date multimedia este o bază de date care inglobează informatie de tip: a) text, sunet, grafic; b) sunet, imagini fixe si video c) text, grafic, sonor, animat, video; Raspuns C 73) MIDI inseamnă:: a) Microsoft Interchange Digital Interface b) Musical Instrument Digital Interface c) Musical Interface for Digital Interchange Raspuns B 74) Rezolutia monitorului VGA este de : a) 640x480 pixeli; b) 800×600 pixeli; c) 1024×768 pixeli; Raspuns A 75) CGI înseamnă: a) Common Graphical Interface b) Common Gateway Interface; c) Common Graphical Interchange; Raspuns B

Page 25: SOLUTII - Baze de Date - Adunate

1

1. Creati tabelul salariat_*** având următoarea structură:

Nume Caracteristici Tip cod_ang NOT NULL NUMBER(4) nume VARCHAR2(25) prenume VARCHAR2(25) functia VARCHAR2(20) sef NUMBER(4) data_angajarii Valoare implicită data curentă DATE

varsta NUMBER(2) email CHAR(50) salariu

Valoare implicită 0 NUMBER(9,2)

2. Afisati structura tabelului creat anterior. DESCRIBE salariat; 3. Se dau următoarele valori: COD_ANG

NUME PRENUME FUNCTIA SEF DATA_ANG VARSTA EMAIL SALARIU

1 ..... ..... director null ........ 30 ..... 5500 2 ..... ..... fuctionar 1 ..... 25 ..... 0 3 ..... ..... economist 1 ..... 45 ..... 3000 4 ..... ..... functionar 1 ..... 35 ..... 1000 4. Inserati în tabelul salariat_*** prima înregistrare din tabelul de mai sus fără să precizati lista de coloane în comanda INSERT. INSERT INTO salariat VALUES ( 1, '.....', '.....', 'director', null ,’' , 30, '.....', 5500 ); 5. Inserati a doua înregistrare folosind o listă de coloane din care excludeti data_angajarii si salariul care au valori implicite. Observati apoi rezultatul. COD_ANG NUME PRENUME FUNCTIA SEF DATA_ANG VARSTA EMAIL SALARIU 2 ..... ..... fuctionar 1 ..... 25 ..... 0 INSERT INTO salariat (cod_ang, nume, prenume, functia, sef, varsta, email) VALUES (2, '...', '...', 'functionar', 1, 25, '...' ); 6. Inserati înregistrările 3 si 4. INSERT INTO salariat (cod_ang, nume, prenume, functia, sef, varsta, email, salariu) VALUES (3, '...', '...', 'economist', 1, 45, '...', 3000 ); INSERT INTO salariat (cod_ang, nume, prenume, functia, sef, varsta, email, salariu) VALUES (4, '...', '...', 'functionar', 1, 35, '...', 1000 ); 7. Creati tabelul functionar_*** care să contină functionarii din tabelul salariat_***, având următoarele coloane: codul, numele, salariul anual si data angajării. Verificati cum a fost creat tabelul si ce date contine. CREATE TABLE functionar AS SELECT cod_ang, nume, prenume, salariu, data_angajarii FROM salariat WHERE functia = 'functionar'; DESCRIBE functionar; SELECT * FROM functionar; 8. Adăugati o nouă coloană tabelului salariat_*** care să contină data nasterii. ALTER TABLE salariat ADD (datan DATE); 9. Modificati dimensiunea coloanei nume la 30 si pe cea a salariului la 12 cu 3 zecimale.

Page 26: SOLUTII - Baze de Date - Adunate

2

ALTER TABLE salariat MODIFY (nume VARCHAR2(30), salariu NUMBER(12,3)); 10. Modificati tipul coloanei email la VARCHAR2. ALTER TABLE salariat MODIFY (email VARCHAR2(50)); 11. Modificati valoarea implicită a coloanei data_angajarii la data sistemului + o zi. ALTER TABLE salariat MODIFY (data_angajarii DATE DEFAULT SYSDATE + 1); 12. Eliminati coloana varsta din tabelul salariat_***. ALTER TABLE salariat DROP COLUMN varsta; 13. Redenumiti tabelul functionar_*** cu funct_***. RENAME functionar to funct; 14. Recreati tabelul functionar_*** utilizând tabelul funct_***.. CREATE TABLE functionar AS SELECT cod_ang, nume, prenume, salariu, data_angajarii FROM funct; 15. Eliminati tabelul funct_***. DROP TABLE funct; 16. Stergeti si apoi creati din nou tabelul salariat_*** cu următoarea structură. NUME TIP CONSTRÂNGERE cod_ang NUMBER(4) Cheie primară nume VARCHAR2(25) NOT NULL prenume VARCHAR2(25) data_nasterii DATE data_nasterii<data_angajarii functia VARCHAR2(9) NOT NULL sef

NUMBER(4) Referă ca si cheie externă cod_ang din acelasi tabel

data_angajarii DATE email VARCHAR2(20) unic salariu cod_dept NUMBER(4)

NUMBER(12,3) > 0

cod_dept

NUMBER(4) CombinaŃia NUME + PRENUME să fie unică

Observatie: Constrângerile de tip CHECK se pot implementa la nivel de coloană doar dacă nu referă o altă coloană a tabelului. DROP TABLE salariat; CREATE TABLE salariat ( cod_ang NUMBER(4) PRIMARY KEY, nume VARCHAR2(25) NOT NULL, prenume VARCHAR2(25), data_nasterii DATE, functia VARCHAR2(9) NOT NULL, sef NUMBER(4) REFERENCES salariat (cod_ang), data_angajarii DATE DEFAULT SYSDATE, email VARCHAR2(20) UNIQUE, salariu NUMBER(9,2) CHECK (salariu > 0), cod_dep NUMBER(4), CONSTRAINT const_c CHECK (data_angajarii > data_nasterii), CONSTRAINT const_u UNIQUE (nume, prenume, data_nasterii)); 17. Stergeti tabelul salariat_***, iar apoi recreati-l implementând toate constrângerile la nivel de tabel. Observatie: Constrângerea de tip NOT NULL se poate declara doar la nivel de coloană. DROP TABLE salariat; CREATE TABLE salariat (

Page 27: SOLUTII - Baze de Date - Adunate

3

cod_ang NUMBER(4), nume VARCHAR2(25) NOT NULL, prenume VARCHAR2(25), data_nasterii DATE, functia VARCHAR2(9) NOT NULL, sef NUMBER(4), data_angajarii DATE DEFAULT SYSDATE, email VARCHAR2(20), salariu NUMBER(9,2), cod_dep NUMBER(4), CONSTRAINT ccp PRIMARY KEY (cod_ang), CONSTRAINT cce FOREIGN KEY (sef) REFERENCES salariat (cod_ang), CONSTRAINT cu1 UNIQUE (email), CONSTRAINT cc1 CHECK (data_angajarii > data_nasterii), CONSTRAINT cc2 CHECK (salariu > 0), CONSTRAINT cu2 UNIQUE (nume,prenume,data_nasterii)); 18. Creati tabelul departament_*** care să aibă următoarea structură. NUME TIP CONSTRÂNGERI COD_DEP NUMBER(4) Cheie primară NUME VARCHAR2(20) Not null ORAS VARCHAR2(25) CREATE TABLE departament ( cod_dep NUMBER(4) PRIMARY KEY, nume VARCHAR2(20) NOT NULL, oras VARCHAR2(25)); Adăugarea constrângerilor ulterior creării tabelului, eliminarea, activarea sau dezactivarea constrângerilor (ALTER TABLE) - adaugă constrângeri ALTER TABLE nume_tabel ADD [CONSTRAINT nume_constr] tip_constr (coloana); - elimină constrângeri ALTER TABLE nume_tabel DROP [CONSTRAINT nume_constr] tip_constr (coloana); - activare/dezactivare constrângere ALTER TABLE nume_tabel MODIFY CONSTRAINT nume_constr ENABLE|DISABLE; sau ALTER TABLE nume_tabel ENABLE| DISABLE nume_constr; 19. Inserati o nouă înregistrare în salariat_*** de forma: cod nume prenume data_n functia sef data_ang email salariu cod_dep 2 N2 P2 11-JUN-1960 economist 1 Sysdate E2 2000 10 INSERT INTO salariat VALUES ( 2, 'N2' , 'P2' , '11-06-1960' , 'ECONOMIST', 1, SYSDATE, 'E2', 2000, 10 ); /*EROARE la linia 1: ORA-02291: constrângere de integritate (SCOTT.CCE) violata - cheia parinte negasita Ce observati? Introduceti înregistrarea dar specificând valoarea NULL pentru coloana sef. INSERT INTO salariat VALUES ( 2, 'N2' , 'P2' , '11-06-1960' , 'ECONOMIST', Null, SYSDATE, 'E2', 2000, 10 ); /*1 înregistrare creatã.*/ 20. Încercati să adăugati o constrângere de cheie externă pe cod_dep din salariat_***. Ce observati? ALTER TABLE salariat ADD CONSTRAINT cce2 FOREIGN KEY (cod_dep) REFERENCES departament (cod_dep); /*EROARE la linia 2: ORA-02298: (SCOTT.CCE2) nu a putut fi validata - nu au fost gasite cheile parinte 21. Inserati o nouă înregistrare în departament_***. Apoi adăugati constrângerea de cheie externă definită anterior. cod_dep nume Loc 10 Economic Bucuresti

Page 28: SOLUTII - Baze de Date - Adunate

4

INSERT INTO departament VALUES ( 10, 'Ecomomic', 'Bucuresti' ); Adaugam constrangerea de la ex.20: ALTER TABLE salariat ADD CONSTRAINT cce2 FOREIGN KEY (cod_dep) REFERENCES departament (cod_dep); 22. Inserati noi înregistrări în salariat_***, respectiv în departament_***. Care trebuie să fie ordinea de inserare? cod nume prenume data_n functia sef data_ang email salariu cod_dep

3

N3 P3 11-JUN- 1967

jurist 2 Sysdate E3

2500 20

cod_dep

nume loc

20 Juridic Constanta INSERT INTO departament VALUES ( 20, 'Juridic', 'Constanta' ); INSERT INTO salariat VALUES ( 3, ’N3’, ’P3 ’, ’11-06-1967’, ’JURIST ’, 2, ’’, ’E3’, 2500, 20 ); 23. Stergeti departamentul 20 din tabelul departament_***. Ce observati? DELETE FROM departament WHERE cod_dep=20; /*EROARE la linia 1: ORA-02292: constrângerea de integritate (SCOTT.CCE2) violata – gasita înregistrarea copil 24. Stergeti constrângerea cce2_***. Recreati această constrângere adăugând optiunea ON DELETE CASCADE. ALTER TABLE salariat DROP CONSTRAINT cce2; ALTER TABLE salariat ADD CONSTRAINT cce2 FOREIGN KEY (cod_dep) REFERENCES departament (cod_dep) ON DELETE CASCADE; 25. Stergeti departamentul 20 din tabelul departament_***. Ce observati în tabelul salariat_***? Anulati modificările. DELETE FROM departament WHERE cod_dep=20; ROLLBACK; 26. Stergeti constrângerea cce2_***. Recreati această constrângere adăugând optiunea ON DELETE SET NULL. ALTER TABLE salariat DROP CONSTRAINT cce2; ALTER TABLE salariat ADD CONSTRAINT cce2 FOREIGN KEY (cod_dep) REFERENCES departament (cod_dep) ON DELETE SET NULL; 27. Încercati să stergeti departamentul 10 din tabelul departament_***. Ce observati? DELETE FROM departament WHERE cod_dep=10; /*1 înregistrare stearsã. Verificam continutul tabelului departament SELECT * FROM departament; Consultarea dictionarului datelor Informatii despre tabelele create se găsesc în vizualizările :

Page 29: SOLUTII - Baze de Date - Adunate

5

· USER_TABLES – informatii complete despre tabelele utilizatorului curent. · ALL_TABLES – informatii complete despre tabelele tuturor utilizatorilor. · COLS – informatii despre coloane. · TAB – informatii de bază despre tabelele existente în schema utilizatorului curent. Informatii despre constrângeri găsim în : · USER_CONSTRAINTS – informatii despre constrângerile definite de utilizatorul curent; · ALL_CONSTRAINTS – informatii despre cosntrângerile definite de toti Sintaxa simplificată a comenzii CREATE VIEW este: CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW nume_view [(alias, alias, ..)] AS subcerere [WITH CHECK OPTION [CONSTRAINT nume_constr]] [WITH READ ONLY [CONSTRAINT nume_constr]]; - FORCE permite crearea vizualizarea înainte de a defini tabelele de bază; - subcererea poate fi oricât de complexă dar nu poate conŃine clauza ORDER BY; - WITH CHECK OPTION permite inserarea si modificarea prin intermediul vizualizării numai a liniilor ce sunt accesibile vizualizării; dacă lipseste numele constrângerii atunci sistemul asociază un nume implicit de tip SYS_Cn acestei constrângeri; - WITH READ ONLY asigură că prin intermediul vizualizării nu se pot executa operatii LMD. Eliminarea unei vizualizări se face prin comanda DROP VIEW : DROP VIEW nume_viz; 1. Să se creeze vizualizarea v_emp_*** care să contină codul si numele salariatilor din tabelul emp_***. Să se afiseze continutul acesteia. Să se insereze o nouă înregistrare în această vizualizare. Ce observati? Să se steargă vizualizarea v_emp_***. Se creaza tabelul emp CREATE TABLE emp ( employee_id NUMBER(4) PRIMARY KEY, last_name VARCHAR2(64), email VARCHAR2(64), hire_date DATE DEFAULT SYSDATE, salary NUMBER(8,2) DEFAULT 1000, job_id VARCHAR2(10)); Se creaza vizualizarea v_emp CREATE VIEW v_emp (cod, nume) AS SELECT employee_id, last_name FROM emp; Se afiseaza continutul vizualizarii select * from v_emp; /*nici o înregistrare selectatã Inseram o noua inregistrare INSERT INTO v_emp VALUES (400,’N1’); Se sterge vizualizarea v_emp DROP VIEW v_emp; 2. Să se creeze vizualizarea v_emp_*** care să contină codul, numele, emailul, data angajării, salariul si codul jobului salariatilor din tabelul emp_***. Să se analizeze structura si continutul vizualizării. Să se insereze o nouă înregistrare în această vizualizare. Să se verifice că noua înregistrare a fost inserată si în tabelul de bază. CREATE VIEW v_emp AS SELECT employee_id, last_name, email, hire_date, salary,job_id FROM emp; DESC v_emp SELECT * FROM v_emp; INSERT INTO v_emp

Page 30: SOLUTII - Baze de Date - Adunate

6

VALUES (400,’N1’,’E1’,SYSDATE,5000,’SA_REP’); SELECT employee_id, last_name, email, hire_date, salary, job_id FROM emp; /* restrictia unica (SCOTT.SYS_C002806) nu este respectata – linia 5 si 6 3. Să se mărească cu 1000 salariul angajatului având codul 400 din vizualizarea creată anterior. Ce efect va avea această actiune asupra tabelului de bază? UPDATE v_emp SET salary = salary + 1000 WHERE employee_id = 400; SELECT * FROM v_emp; SELECT * FROM emp; /* salariul angajatului cu codul 400 devine 2000, in rest nu se schimba nimic 4. Să se steargă angajatul având codul 400 din vizualizarea creată anterior. Ce efect va avea această actiune asupra tabelului de bază? DELETE FROM v_emp WHERE employee_id =400; /* tabelul emp nu mai contine nici o inregistrare 5.a) Să se creeze vizualizarea v_emp_dept_*** care să contină employee_id, last_name, hire_date, job_id, department_id din tabelul emp_*** si coloana department_name din tabelul dept_***. Cream tabelul dept CREATE TABLE dept ( department_id NUMBER(2) PRIMARY KEY, department_descriere VARCHAR2(128)); Inseram in tabelul dept coloana department_name Alter table dept Add (department_name VARCHAR2(20)); Tabelul emp nu are coloana department_id asa ca trebuie creata pentru a putea continua ALTER TABLE emp ADD department_id NUMBER(2); Se creaza vizualizarea CREATE VIEW v_emp_dept AS SELECT e.employee_id, e.last_name, e.hire_date, e.job_id, e.department_id, d.department_name FROM emp e, dept d WHERE e.department_id =d.department_id; 5.b) Să încerce inserarea înregistrării (500, 'N2', 'E2',SYSDATE,’SA_REP’,30, 'Administrativ') în vizualizarea creată anterior. INSERT INTO v_emp_dept VALUES ( 500, 'N2', 'E2', SYSDATE,'SA-REP',30, 'Administrativ'); /*EROARE la linia 1: ORA-00913: prea multe valori 5.c) Care dintre coloanele vizualizării v_emp_dept_*** sunt actualizabile? SELECT column_name, updatable FROM user_updatable_columns WHERE UPPER(table_name) = UPPER('v_emp_dept'); /* Toate sunt actualizabile in afara de departament_name 5.d) Adăugati tabelului emp_*** constrângerea de cheie externă care referă tabelul dept_***, apoi verificati ce coloane din vizualizarea v_emp_dept_*** sunt actualizabile. ALTER TABLE emp ADD CONSTRAINT dep FOREIGN KEY (department_id) REFERENCES dept1(department_id); SELECT column_name, updatable FROM user_updatable_columns WHERE UPPER(table_name) = UPPER('v_emp_dept'); /* Toate sunt actualizabile in afara de departament_name 5.e) Recreati vizualizarea v_emp_dept_***, apoi verificati ce coloane sunt actualizabile. CREATE OR REPLACE VIEW v_emp_dept AS SELECT e.employee_id, e.last_name, e.hire_date, e.job_id, e.department_id, d.departament_name

Page 31: SOLUTII - Baze de Date - Adunate

7

FROM emp e, dept d WHERE e.department_id =d.department_id; SELECT column_name, updatable FROM user_updatable_columns WHERE UPPER(table_name) = UPPER('v_emp_dept'); /* Toate sunt actualizabile in afara de departament_name 6. Să se creeze vizualizarea v_dept_*** care să contine codul si numele departamentului, numărul de angajati din departamentul respectiv si suma alocată pentru plata salariilor. Această vizualizare permite actualizări? CREATE VIEW v_dept (cod, nume, nr_angajati, val_salarii) AS SELECT e.department_id, department_name, COUNT(*) nr_angajati, SUM(salary) val_salarii FROM emp e, dept d WHERE e.department_id = d.department_id GROUP BY e.department_id, department_name; SELECT column_name, updatable FROM user_updatable_columns WHERE UPPER(table_name) = UPPER('v_dept'); /*Aceasta vizualizare nu permite actializari 7. a) Să se creeze vizualizarea v_emp30_*** care să contină numele, emailul, data angajării, salariul, codul jobului si codul departamentului celor care lucrează în departamentul 30. În această vizualizare nu se va permite modificarea sau inserarea liniilor ce nu sunt accesibile ei. Dati un nume constrângerii. CREATE VIEW v_emp30 AS SELECT employee_id, last_name, email, hire_date, salary, job_id, department_id FROM emp WHERE department_id=30 WITH CHECK OPTION CONSTRAINT ck_option1; 7. b) Să se listeze structura si continutul vizualizării v_emp30_***. DESCRIBE v_emp30; SELECT * FROM v_emp30; /*nici o inregistrare selectata 7. c) Să se încerce prin intermediul vizualizării inserarea unui angajat în departamentul 10 si a unui angajat în departamentul 30 INSERT INTO v_emp30 VALUES ( 600, 'N5', 'E5', SYSDATE, 4000, 'ADMIN', 10); EROARE la linia 1: ORA-01402: în vizualizarea WITH CHECK OPTION clauza where este încãlcatã INSERT INTO v_emp30 VALUES ( 600, 'N5', 'E5', SYSDATE, 4000, 'ADMIN', 30); /*Daca department_id este 30 se face inserarea, inregistrarea de regaseste in tabela emp. 7. d) Să se încerce prin intermediul vizualizării modificarea departamentului unui angajat. UPDATE v_emp30 SET department_id =20 WHERE employee_id = 11; /*0 înregistrãri actualizate. 8. Să se creeze o vizualizare (v_dept_***) asupra tabelului dept_*** să nu permită efectuarea nici unei operatii LMD. Testati operatiile de inserare, modificare si stergere asupra acestei vizualizări. CREATE VIEW v_dept AS SELECT * FROM dept WITH READ ONLY; /* EROARE la linia 1: ORA-00955: numele este deja utilizat de un obiect existent CREATE OR REPLACE VIEW v_dept AS SELECT * FROM dept WITH READ ONLY;

Page 32: SOLUTII - Baze de Date - Adunate

8

9. Să se consulte informatii despre vizualizarea v_dept_***. Folositi vizualizarea dictionarului datelor USER_VIEWS (coloanele VIEW_NAME si TEXT). Obs: Coloana TEXT este de tip LONG. În cazul selectării unei coloane de tip LONG trebuie utilizată comanda SET LONG n pentru a seta numărul de caractere afisate. SET LONG 200 SELECT view_name, text FROM user_views WHERE UPPER(view_name)=UPPER(’v_dept’);

Definirea secventelor

Sintaxa comenzii CREATE SEQUENCE este: CREATE SEQUENCE nume_secventă [INCREMENT BY n] [START WITH valoare_start] [ {MAXVALUE valoare_maximă | NOMAXVALUE} ] [ {MINVALUE valoare_minimă | NOMINVALUE} ] [ {CYCLE | NOCYCLE} ] [ {CACHE n | NOCACHE} ]; Stergerea secventelor se realizează cu ajutorul comenzii DROP SEQUENCE. DROP SEQUENCE nume_secv; 10. Să se creeze o secventă care are pasul de incrementare 10 si începe de la 10, are ca valoare maximă 10000 si nu ciclează. CREATE SEQUENCE sec INCREMENT BY 10 START WITH 10 MAXVALUE 10000 NOCYCLE; 11. Să se modifice toate liniile din tabelul emp_***, regenerând codul angajatilor astfel încât să utilizeze secventa sec_emp***. Să se anuleze modificările. UPDATE emp SET employee_id = sec_emp.NEXTVAL; ROLLBACK; 12. Să se introducă un nou salariat în tabelul emp_*** folosindu-se pentru codul salariatului secventa creată. INSERT INTO emp VALUES ( sec_emp.NEXTVAL, 'N5', 'E5', SYSDATE, 2500, 'admin', 30); 13. Să se afiseze valoarea curentă a secventei. SELECT sec_emp.CURRVAL valoare FROM DUAL; Exercitiu a) Creati o secventă pentru generarea codurilor de departamente, seq_dept_***. Secventa va începe de la 200, va creste cu 10 la fiecare pas si va avea valoarea maximă 20000, nu va cicla. CREATE SEQUENCE seq_dept START WITH 200 INCREMENT BY 10 MAXVALUE 20000 NOCYCLE; b) Să se selecteze informatii despre secventele utilizatorului curent (nume, valoare minimă, maximă, de incrementare, ultimul număr generat). Se va utiliza vizualizarea user_sequences. SELECT * FROM user_sequences WHERE sequence_name='SEQ_DEPT'; c) Să se insereze o înregistrare nouă în DEPT_*** utilizând secventa creată. INSERT INTO departments VALUES ( seq_dept.NEXTVAL, 'contabil');

Page 33: SOLUTII - Baze de Date - Adunate

9

d) Să se selecteze valoarea curentă a secventei. SELECT seq_dept.CURRVAL valoare FROM DUAL; e) Să se steargă secventa. DROP SEQUENCE seq_dept;

Definirea indecsilor Sintaxa comenzii CREATE INDEX: CREATE [UNIQUE] INDEX nume_index ON tabel (coloana1 [, coloana2…]); Modificarea unui index se face prin comanda ALTER INDEX. Eliminarea unui index se face prin comanda: DROP INDEX nume_index; 14. Să se creeze un index neunic, emp_last_name_idx_***, asupra coloanei last_name din tabelul emp_***. CREATE INDEX emp_last_name_idx ON EMP (last_name); 15. Să se creeze indecsi unici asupra codului angajatului (employee_id) si asupra combinatiei last_name, first_name, hire_date. CREATE UNIQUE INDEX employee_id_idx ON emp (employee_id); CREATE UNIQUE INDEX employee_id_idx1 ON emp (last_name, hire_date); 16. Creati un index neunic asupra coloanei department_id din emp_*** pentru a eficientiza joinurile dintre acest tabel si dept_***. CREATE INDEX emp_department_idx ON EMP(department_id);

Definirea sinonimelor

Comanda pentru crearea sinonimelor este: CREATE [PUBLIC] SYNONYM nume_sinonim FOR obiect; Eliminarea sinonimelor se face prin comanda DROP SYNONYM nume_sinonim; 17. Creati un sinonim public se_*** pentru tabelul emp_***. CREATE SYNONYM se for emp; 18. Creati un sinonim pentru vizualizarea v_dept_***. CREATE SYNONYM sy_dept FOR v_dept; 19. Utilizând sinonimele create anterior, afisati informatii depre salariti si despre departamente. SELECT * FROM se; SELECT * FROM sy_dept;

Limbajul de interogare al datelor (DQL). SELECT CERERI MONOTABEL 1. Analizati sintaxa simplificată a comenzii SELECT. Care dintre clauze sunt obligatorii? SELECT { [ {DISTINCT | UNIQUE} | ALL] lista_campuri | *} FROM [nume_schemă.]nume_obiect ] [, [nume_schemă.]nume_obiect …] [WHERE condiŃie_clauza_where] [GROUP BY expresie [, expresie …] [HAVING condiŃie_clauza_having] ] [ORDER BY {expresie | poziŃie} [, {expresie | poziŃie} …] ] 2. Să se listeze structura tabelelor din schema HR (EMPLOYEES, DEPARTMENTS, JOB_HISTORY, JOBS, LOCATIONS, COUNTRIES, REGIONS), observând tipurile de date ale coloanelor. Obs: Se va utiliza comanda SQL*Plus DESCRIBE nume_tabel

Page 34: SOLUTII - Baze de Date - Adunate

10

Se creaza tabelele: 1. REGIONS TABLE – din fisierul hr_create.sql 2. COUNTRIES TABLE– din fisierul hr_create.sql 3. LOCATIONS TABLE– din fisierul hr_create.sql 4. DEPARTAMENTS TABLE– din fisierul hr_create.sql 5. JOBS TABLE– din fisierul hr_create.sql 6. EMPLOYYES TABLE– din fisierul hr_create.sql 7. JOB_HISTORY TABLE– din fisierul hr_create.sql 8. JOB_GRADES TABLE– din fisierul hr_create.sql 2. Să se listeze structura tabelelor din schema HR (EMPLOYEES, DEPARTMENTS, JOB_HISTORY, JOBS, LOCATIONS, COUNTRIES, REGIONS), observând tipurile de date ale coloanelor. Obs: Se va utiliza comanda SQL*Plus DESCRIBE nume_tabel DESCRIBE employees; DESCRIBE departments; DESCRIBE jobs; DESCRIBE job_history; DESCRIBE locations; DESCRIBE countries; DESCRIBE regions; 3.Să se listeze continutul tabelelor din schema considerată, afisând valorile tuturor câmpurilor. Obs: Se va utiliza comanda SQL SELECT * FROM nume_tabel; SELECT * FROM employees; SELECT * FROM departments; SELECT * FROM jobs;

Page 35: SOLUTII - Baze de Date - Adunate

11

SELECT * FROM job_history; SELECT * FROM locations; SELECT * FROM countries; SELECT * FROM regions; /*nici o înregistrare selectatã – trebuie sa inseram valori in fiecare tabel 1. Inseram datele in tabelul REGIONS – din fisierul hr_insert.sql 2. Inseram datele in tabelul COUNTRIES – din fisierul hr_insert.sql 3. Inseram date in tabelul LOCATIONS – din fisierul hr_insert.sql 4. Inseram date in tabelul DEPARTMENTS – din fisierul hr_insert.sql 5.Inseram date in tabelul JOBS – din fisierul hr_insert.sql 6. Inseram date in tabelul EMPLOYEES– din fisierul hr_insert.sql 7. Inseram date in tabelul JOB_HISTORY - din fisierul hr_insert.sql 8. Inseram datele in tabelul JOB_GRADES - din fisierul hr_insert.sql Reluam exercitiul SELECT * FROM employees; /*106 înregistrãri selectate.*/ SELECT * FROM departments; /*27 înregistrãri selectate.*/ SELECT * FROM jobs;*/ /*19 înregistrãri selectate.*/ SELECT * FROM job_history; /*10 înregistrãri selectate.*/ SELECT * FROM locations; */22 înregistrãri selectate. SELECT * FROM countries; */22 înregistrãri selectate. SELECT * FROM regions; */4 inregistrari */ 4. Să se obtină încă o dată rezultatul cererii precedente, fără a rescrie cererea. Obs: Ultima comandă SQL lansată de către client este păstrată în buffer-ul SQL. Pentru rularea acesteia se utilizează “/” sau RUN. RUN sau / /* Acelasi rezultat ca la ex. 3 5. Listati structura tabelului EMPLOYEES si apoi dati comanda RUN (sau “/”). Ce observati? Comenzile SQL*Plus sunt păstrate în buffer? DESC employees RUN /*Comenzile sunt pastrate in buffer. 6. Să se afiseze codul angajatului, numele, codul job-ului, data angajării. Salvati instruciunea SQL într-un fisier numit p1_14.sql. Obs: Pentru salvarea ultimei comenzi SQL se utilizează comanda SAVE. Precizarea extensiei „.sql” a fisierului nu este obligatorie. SELECT employee_id, last_name, job_id, hire_date FROM employees; SAVE z:\…\ p1_14.sql SELECT employee_id, last_name, job_id, hire_date FROM employees; SAVE E:\Oracle\p1_14.sql 7. Reexecutati cererea folosind fisierul p1_14.sql. START z:\…\ p1_14.sql sau @ z:\…\ p1_14.sql START E:\Oracle\p1_14.sql; @ E:\Oracle\p1_14.sql; 8. Editati fisierul p1_14.sql, adăugând coloanelor câte un alias (cod, nume, cod job, data angajarii). EDIT z:\…\ p1_14.sql EDIT E:\Oracle\p1_14.sql; SELECT employee_id cod, last_name nume, job_id "cod job", hire_date "data angajarii"

Page 36: SOLUTII - Baze de Date - Adunate

12

FROM employees; 9. Să se listeze, cu si fără duplicate, codurile job-urilor din tabelul EMPLOYEES. Obs. DISTINCT = UNIQUE SELECT DISTINCT job_id FROM employees; sau SELECT UNIQUE job_id FROM employees; SELECT job_id FROM employees; 10. Să se afiseze numele concatenat cu prenumele, separate prin spatiu. Etichetati coloana “Nume si prenume”. Obs: Operatorul de concatenare este “||”. Sirurile de caractere se specifică între apostrofuri (NU ghilimele, caz în care ar fi interpretate ca alias-uri). SELECT last_name||' '||first_name "Nume si prenume" FROM employees; 11. Să se listeze numele si salariul angajatilor care câstigă mai mult de 10000 $. SELECT last_name, salary FROM employees WHERE salary > 10000; 12. Să se modifice cererea anterioară astfel încât să afiseze numele si salariul pentru toti angajatii al căror salariu este cuprins între 5000$ si10000$. Obs: Pentru testarea apartenentei la un domeniu de valori se poate utiliza operatorul [NOT] BETWEEN valoare1 AND valoare2 SELECT last_name, salary FROM employees WHERE salary BETWEEN 5000 AND 10000; 13. Să se creeze o cerere pentru a afisa numele angajatului si numărul departamentului pentru angajatul 104. SELECT last_name, department_id FROM employees WHERE employee_id = 104; 14. Să se afiseze numele si salariul pentru toti angajatii din departamentele 10 sau 30, în ordine alfabetică a numelor. Obs: Apartenenta la o multime finită de valori se poate testa prin intermediul operatorului IN, urmat de lista valorilor între paranteze si separate prin virgule: expresie IN (valoare_1, valoare_2, …, valoare_n)SELECT last_name, salary FROM employees WHERE department_id IN (10, 30) ORDER BY last_name; /*afiseaza numai numele salariatilor in ordine alfabetica Sau SELECT last_name||' '||first_name "Nume complet", salary FROM employees WHERE department_id IN (10,30) ORDER BY last_name, first_name; /* afiseaza last_mame si frist_name (numele complet) in ordine alfabetica. 15. Să listeze numele si salariile angajatilor care câstigă mai mult de 10000 $ si lucrează în departamentul 10 sau 30. Se vor eticheta coloanele drept Angajat si Salariu lunar. SELECT last_name "Angajat", salary "Salariu lunar" FROM employees WHERE department_id IN(10,30); 16. Care este data curentă? Obs: Pseudocoloana care returnează data curentă este SYSDATE. Pentru completarea sintaxei obligatorii a comenzii SELECT, se utilizează tabelul DUAL: SELECT SYSDATE FROM dual; Datele calendaristice pot fi formatate cu ajutorul functiei TO_CHAR(data, format), unde formatul poate fi alcătuit dintr-o combinatie a următoarelor elemente:

Page 37: SOLUTII - Baze de Date - Adunate

13

Element Semnificaie D Numărul zilei din săptămână (duminică=1;

luni=2; …sâmbătă=6). DD Numărul zilei din lună. DDD Numărul zilei din an. DY Numele zilei din săptămână, printr-o

abreviere de 3 litere (MON, THU etc.) DAY Numele zilei din săptămână, scris în

întregime. MM Numărul lunii din an. MON Numele lunii din an, printr-o abreviere de 3

litere (JAN, FEB etc.) MONTH Numele lunii din an, scris în întregime. Y Ultima cifră din an YY, YYY, YYYY Ultimele 2, 3, respectiv 4 cifre din an. YEAR Anul, scris în litere (ex: two thousand

four). HH12, HH24 Orele din zi, între 0-12, respectiv 0-24. MI Minutele din oră. SS Secundele din minut. SSSSS Secundele trecute de la miezul nopŃii. SELECT sysdate FROM DUAL; 17. Să se afiseze numele si data angajării pentru fiecare salariat care a fost angajat în 1987. Se cer 2 solutiiuna în care se lucrează cu formatul implicit al datei si alta prin care se formatează data. Varianta1- cu formatul implicit al datei SELECT last_name, hire_date FROM employees WHERE hire_date LIKE ('%87'); Varianta 2 – cu data formatata SELECT last_name, hire_date FROM employees WHERE TO_CHAR(hire_date, 'YYYY' ) = 1987; Sunt obligatorii ghilimelele de la sirul ‘1987’? Ce observati? Nu sunt obligatorii. 18. Să se afiseze numele si job-ul pentru toti angajatii care nu au manager. SELECT last_name, job_id FROM employees WHERE manager_id IS NULL; 19. Să se afiseze numele, salariul si comisionul pentru toti salariatii care câstigă comisioane. Să se sorteze datele în ordine descrescătoare a salariilor, iar pentru cei care au acelasi salariu în ordine crescătoare a comisioanelor. SELECT last_name, salary, commission_pct FROM employees WHERE commission_pct IS NOT NULL ORDER BY salary DESC, commission_pct ASC; 20. Să se listeze numele tuturor angajatilor care au a treia litera din nume 'a'. Obs: Pentru a forma măstile de caractere utilizate împreună cu operatorul LIKE cu scopul de a compara sirurile de caractere, se utilizează: % - reprezentând orice sir de caractere, inclusiv sirul vid; _ (underscore) reprezentând un singur caracter. SELECT DISTINCT last_name FROM employees WHERE last_name LIKE '__a%'; 21. Folosind data curentă să se afiseze următoarele informatii: - numele zilei, numărul zilei din săptămână, numărul zilei din luna, respectiv numărul zilei din an;

Page 38: SOLUTII - Baze de Date - Adunate

14

SELECT TO_CHAR(SYSDATE,'DAY,D,DD,DDD') FROM DUAL; - numărul lunii din an, numele lunii cu abreviere la 3 caractere, respectiv numele complet al lunii; SELECT TO_CHAR(SYSDATE,'MM-MON-MONTH') FROM DUAL; - ora curentă (ora, minute, secunde). SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') FROM DUAL; 22. Să se listeze numele departamentelor care functionează în locatia având codul 1700 si al căror manager este cunoscut. SELECT department_name FROM departments WHERE location_id=1700 AND manager_id IS NOT NULL; 23. Să se afiseze codurile departamentelor în care lucrează salariati. SELECT DISTINCT department_id FROM employees WHERE department_id IS NOT NULL ORDER BY department_id; 24. Să se afiseze numele si prenumele salariatilor angajati în luna mai 1987. SELECT last_name, first_name FROM employees WHERE TO_CHAR(hire_date, 'MON,YYYY') = 'may-1987'; Sau SELECT last_name, first_name FROM employees WHERE TO_CHAR (hire_date, 'mm-YYYY') = '05-1987'; 25. Să se listeze codurile angajatilor care au avut si alte joburi fată de cel prezent. Să se ordoneze rezultatul descrescător după codul angajatului. SELECT department_name FROM departments WHERE manager_id IS NOT NULL; 26. Să se afiseze numele si data angajării pentru cei care lucrează în departamentul 80 si au fost angajati în luna martie a anului 1997. SELECT last_name, hire_date FROM employees WHERE TO_CHAR(hire_date, 'MON-YYYY') = 'MAR-1987' AND department_id = 80; 27. Să se afiseze numele joburilor care permit un salariu cuprins între 8300$ si 14000$. SELECT DISTINCT j.job_title, s.salary FROM jobs j, employees s WHERE j.job_id = s.job_id and salary BETWEEN 8300 AND 14000 ORDER BY salary DESC; 28. Care este grila de salarizare pentru un salariu de 10000$? DELECT * FROM employees WHERE salary = 10000; 29. Să se listeze numele tuturor angajatilor care au 2 litere 'L' în nume si lucrează în departamentul 30 sau managerul lor este 123. SELECT last_name||' '||first_name "Numele si prenumele" FROM employees WHERE last_name LIKE '%L%L%' AND department_id = 30 OR manager_id = 123; 30. Să se afiseze numele, job-ul si salariul pentru toti salariatii al căror job contine sirul 'CLERK' sau 'REP' si salariul nu este egal cu 1000, 2000 sau 3000 $. 31. Să se afiseze numele, salariul si comisionul pentru toti angajatii al căror salariu este mai mare decât de 5 ori valoarea comisionului (salary*commission_pct*5). SELECT last_name||' '||first_name "Numele si prenumele", commission_pct FROM employees WHERE salary > commission_pct*5;

FUNCłII SQL (single-row)

Page 39: SOLUTII - Baze de Date - Adunate

15

Principalele functii SQL pot fi clasificate în următoarele categorii: · Functii single-row · Functii multiple-row (functii agregat) Functiile single-row returnează câte o linie rezultat pentru fiecare linie a tabelului sau vizualizării interogate. Aceste functii pot apărea în listele SELECT, clauzele WHERE, START WITH, CONNECT BY si HAVING.

1. Analizati următoarele functii pentru prelucrarea sirurilor de caractere: 2. LOWER (expresie) - Converteste un sir de caractere la minuscule.

LOWER ('AbCdE') = 'abcde' UPPER (expresie) - Converteste un sir de caractere UPPER ('AbCdE') = 'ABCDE' INITCAP (expresie) - Converteste un sir de caractere la un sir care începe cu majusculă si continuă cu INITCAP ('AbCdE') = 'Abcde' INITCAP (expresie) - Converteste un sir de caractere la un sir care începe cu majusculă si continuă cu minuscule. INITCAP ('AbCdE') = 'Abcde' SUBSTR (expresie, m[, n]) - Extrage din expresia de tip sir de caractere, n caractere începând cu pozitia m. Dacă lipseste argumentul n, atunci extrage toate caracterele până la sfârsitul sirului. Dacă m este negativ numărătoarea poziŃiilor începe de la sfârsitul sirului de caractere spre început. SUBSTR ('AbCdE', 2) = 'bCdE' SUBSTR ('AbCdE', -3,2) = 'Cd' SUBSTR ('AbCdE', -3) = 'CdE' LENGTH (expresie) - Returnează numărul de caractere al expresiei. LENGTH ('AbCdE') = 5 INSTR (expresie, expr1[, m][, n]) - Returnează pozitia la care se găseste a n-a ocurentă a expresiei 'expr1' în cadrul expresiei 'expresie', căutarea începând de la poziŃia m. Daca m sau n lipsesc, valorile implicite sunt 1 pentru ambele. INSTR (LOWER('AbCdE aBcDe'), 'ab', 5) = 7 INSTR (LOWER('AbC aBcDe'), 'ab', 5, 2) = 0 LTRIM (expresie[, expr1]) sau RTRIM (expresie[, expr1]) - Reversul functiilor LPAD, RPAD. Trunchează expresia RTRIM (expresie[, expr1]) caracter la stânga sau la dreapta prin eliminarea succesivă a caracterelor din expresia expr1. Implicit, daca lipseste, expr1 = 'abcde' RTRIM ('abcdeXXXX', 'X') = 'abcde' LTRIM (' abcde') = 'abcde' TRIM (LEADING | TRAILING | BOTH caractere_trim FROM expresie) - Permite eliminarea caracterelor specificate (caractere_trim) de la începutul (leading) , sfârsitul (trailing) sau din ambele părti, dintr-o expresie caracter data. TRIM (LEADING 'X' FROM 'XXXabcdeXXX') = 'abcdeXXX' TRIM (TRAILING 'X' FROM 'XXXabcdeXXX') = 'XXXabcde' TRIM ( BOTH 'X' FROM XXXabcdeXXX') = 'abcde' TRIM (' abcde ') = 'abcde' 2. Să se afiseze pentru fiecare angajat din departamentul 20 un sir de caractere de forma "Functia salariatului {prenume} {nume} este {cod functie}". Să se afiseze prenumele cu initiala litera mare, iar numele cu litere mari (Stephen KING), iar codul functiei să se afiseze cu litere mici. SELECT 'Functia salariatului ' || INITCAP(first_name)||' '||UPPER(last_name) ||' este ' ||LOWER(job_id)||' .' AS "Angajatul si codul functiei" FROM employees WHERE department_id = 20; 3. Să se afiseze pentru angajatul cu numele 'HIGGINS' codul, numele si codul departamentului. Cum se scrie conditia din WHERE astfel încât să existe siguranta ca angajatul 'HIGGINS' va fi găsit oricum ar fi fost introdus numele acestuia? Căutarea trebuie să nu fie case-sensitive, iar eventualele blank-uri care preced sau urmează numelui trebuie ignorate.

Page 40: SOLUTII - Baze de Date - Adunate

16

SELECT employee_id, last_name, department_id FROM employees WHERE UPPER(TRIM(last_name)) = 'HIGGINS'; 4. Să se afiseze pentru toti angajatii al căror nume se termină în 'n', codul, numele, lungimea numelui si pozitia din nume în care apare prima data litera 'a'. Asociati aliasuri coloanelor returnate de cerere. SELECT employee_id, last_name, LENGTH(last_name), INSTR(UPPER(last_name), 'A') FROM employees WHERE SUBSTR(last_name,-1)='n'; 5. Analizati următoarele functii aritmetice: ROUND (expresie [, n]) - Returnează valoarea rotunjită a expresiei până la n zecimale. Daca n este negativ sunt rotunjite cifre din stânga virgulei. Valoarea implicită pentru n este 0. ROUND(1.6) = 2 ROUND(1.4) = 1 ROUND (1234.56,1) = 1234.6 ROUND (1230.56, -2) = 1200 ROUND (1260.56, -2) = 1300 MOD (m,n) - Returnează restul împărtirii lui m la n. MOD (11, 4) = MOD (11, -4) = 3 MOD(-11, 4) = MOD (-11, -4) = -3 7. Să se afiseze numele, salariul si numărul de mii al salariului rotunjit la 2 zecimale pentru cei care nu au salariul divizibil cu 1000. SELECT last_name, salary, ROUND(salary/1000 ,2) "MII LEI" FROM employees WHERE MOD(salary,1000) !=0; 8. Analizati următoarele operatii pe expresii de tip dată calendaristică: date -/+ number - Date - Scade/Adaugă un număr de zile dintr-o / la o dată. date1 - date2 - Number - Întoarce numărul de zile dintre două date calendaristice. date +/- number/24 – Date - Scade/Adaugă un număr de ore la o / dintr-o dată calendaristică. 9. Să se afiseze data (luna, ziua, ora, minutul si secunda) de peste 10 zile. SYSDATE+10 SELECT TO_CHAR(SYSDATE+30, ‘MONTH DD HH24:MM:SS’) “Data” FROM DUAL; 10. Să se afiseze numărul de zile rămase până la sfârsitul anului. ROUND(TO_DATE(’31-DEC-2009’)-SYSDATE) SELECT ROUND(TO_DATE('31-DEC-2009') - SYSDATE) FROM DUAL; 11. a. Să se afiseze data de peste 12 ore. SYSDATE+12/24 SELECT SYSDATE + 12/24 FROM DUAL; Sau SELECT TO_CHAR(SYSDATE+12/24, ‘ DD/MM HH24:MM:SS’) “Data” FROM DUAL; 11. b. Să se afiseze data de peste 5 minute. SYSDATE+1/288 SELECT SYSDATE + 1/288 FROM DUAL; Sau – data, incluziv minutele si secundele SELECT TO_CHAR(SYSDATE+1/288, ‘ DD/MM HH24:MM:SS’) “Data” FROM DUAL; 12. Analizati următoarele functii pentru prelucrarea datelor calendaristice: SYSDATE - Întoarce data si timpul curent MONTHS_BETWEEN (date1, date2) - Returnează numărul de luni dintre data date1 si data date2. Rezultatul poate fi pozitiv sau negativ după cum date1 este mai recentă sau nu fată de date2. Zecimalele reprezintă parti dintr-o luna! ROUND(MONTHS_BETWEEN (SYSDATE + 31, SYSDATE)) = 1 ADD_MONTHS (date, n) - Adaugă n luni la o data specificată. Valoarea n trebuie să fie întreagă (pozitivă sau negativă). ADD_MONTHS (date, n) MONTHS_BETWEEN

Page 41: SOLUTII - Baze de Date - Adunate

17

(ADD_MONTHS(SYSDATE, 3), SYSDATE) = 3 NEXT_DAY (date, char) - Returnează data corespunzătoare primei zile a săptămânii specificate (char) care urmează după date. NEXT_DAY('15-dec-2006','Monday') = '18-dec-2006' NEXT_DAY ('15-dec-2006',1) = '18-dec-2006' 13. Să se afiseze numele angajatului, data angajării si data negocierii salariului, care a avut loc în prima zi de Luni, după 6 luni de serviciu. Etichetati această coloană “Negociere”. NEXT_DAY(ADD_MONTHS(hire_date, 6), ‘Monday’) SELECT last_name, hire_date, NEXT_DAY(ADD_MONTHS(hire_date, 6), 'Luni') "Negociere" FROM employees; 14. Pentru fiecare angajat să se afiseze numele si numărul de luni de la data angajării. Etichetati coloana“Luni lucrate”. Să se ordoneze rezultatul după numărul de luni lucrate. Se va rotunji numărul de luni la cel mai apropiat număr întreg. SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) “Luni lucrate” FROM employees ORDER BY MONTHS_BETWEEN(SYSDATE, hire_date); SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) “Luni lucrate” FROM employees ORDER BY “Luni lucrate”; SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) “Luni lucrate” FROM employees ORDER BY 2; 15. Analizati următoarele functii de conversie: Obs. Conversiile implicite asigurate de server-ul Oracle sunt: de la VARCHAR2 sau CHAR la NUMBER; de la VARCHAR2 sau CHAR la DATE; de la NUMBER la VARCHAR2 sau CHAR; de la DATE la VARCHAR2 sau CHAR. SELECT last_name FROM employees WHERE TO_CHAR(hire_date,'yyyy')=1994; /* afiseaza o singura coloana cu numele salariatilor care au fost angajati in anul 1994*/ SELECT last_name FROM employees WHERE hire_date='07-IUN-1994'; /*afiseaza numele salariatilor care au fost angajati in 7 iunie 1994*/ SELECT employee_id||' '||last_name||' '||hire_date FROM employees WHERE department_id=10; /* afiseaza id angajat, numele si data angajarii salariatilor din departamentul cu id 10*/ 16. Să se afiseze numele si prenumele pentru toti angajatii care s-au angajat în luna mai. SELECT last_name, first_name FROM employees WHERE TO_CHAR(hire_date,'MON') = 'MAY'; sau SELECT last_name, first_name FROM employees WHERE TO_CHAR(hire_date,'mm') = 05; 18. Să se afiseze numele angajatilor si comisionul. Dacă un angajat nu câstigă comision, să se scrie “Fara comision”. Etichetati coloana “Comision”. NVL(TO_CHAR(commission_pct), ‘Fara comision’) UPDATE employees SET commission_pct = NULL WHERE last_name = ' Kochhar'; SELECT last_name, NVL(TO_CHAR(commission_pct),'Fara comision') "Comision" FROM employees;

Page 42: SOLUTII - Baze de Date - Adunate

18

19. Să se listeze numele, salariul si comisionul tuturor angajatilor al căror venit lunar depăseste 10000$. salary * NVL(commission_pct, 0) venit_lunar SELECT last_name, salary, commission_pct FROM employees WHERE salary * NVL(commission_pct, 0) >10000; 21. Să se afiseze numele, codul functiei, salariul si o coloana care să arate salariul după mărire. Se stie că pentru IT_PROG are loc o mărire de 10%, pentru ST_CLERK 15%, iar pentru SA_REP o mărire de 20%. Pentru ceilalti angajati nu se acordă mărire. Să se denumească coloana "Salariu revizuit". IT_PROG >> 44 ST_CLERK >> 55 SA_REP >> 99 SELECT last_name, job_id, salary, DECODE(job_id, ‘IT_PROG’, salary*1.1, ’ST_CLERK’, salary*1.15, ‘SA_REP’, salary*1.2, salary ) “salariu revizuit” FROM employees; SELECT last_name, job_id, salary, CASE job_id WHEN ‘IT_PROG’ THEN salary* 1.1 WHEN ’ST_CLERK’ THEN salary*1.15 WHEN ‘SA_REP’ THEN salary*1.2 ELSE salary END “salariu revizuit” FROM employees; SELECT last_name, job_id, salary, CASE WHEN job_id= ‘IT_PROG’ THEN salary* 1.1 WHEN job_id=’ST_CLERK’ THEN salary*1.15 WHEN job_id =‘SA_REP’ THEN salary*1.2 ELSE salary END “salariu revizuit” FROM employees; 22. Să se afiseze numele salariatului si codul departamentului în care acesta lucrează. Dacă există salariati care nu au un cod de departament asociat, atunci pe coloana id_depratment să se afiseze: textul “fara departament”; valoarea zero. SELECT last_name, NVL(TO_CHAR(department_id) , 'Fara departament') "department" FROM employees; SELECT last_name, NVL(TO_CHAR(department_id) , 0) "department" FROM employees; SELECT last_name, CASE WHEN department_id IS NULL THEN 'Fara departament' ELSE TO_CHAR(department_id) END "DEPARTAMENT" FROM employees; SELECT last_name, CASE WHEN department_id IS NULL THEN 0 ELSE department_id END "DEPARTAMENT" FROM employees; 23. a. Să se afiseze numele angajatilor care nu au manager. SELECT last_name FROM employees WHERE manager_id IS NULL; sau SELECT last_name||' '||first_name FROM employees WHERE manager_id IS NULL; 23.b. Să se afiseze numele angajatilor si codul managerilor lor. Pentru angajatii care nu au manager să apară textul “nu are sef”. SELECT last_name, CASE WHEN manager_id IS NULL THEN 'Nu are sef' ELSE TO_CHAR(manager_id)

Page 43: SOLUTII - Baze de Date - Adunate

19

END "manager" FROM employees; Sau SELECT last_name||' '||first_name, CASE WHEN manager_id IS NULL THEN 'Nu are sef' ELSE TO_CHAR(manager_id) END "manager" FROM employees; 24. Să se afiseze numele salariatului si: · venitul anual dacă are comision; · salariul dacă nu are comision. Se va utiliza functia NVL2. Functie NVL2 (expr1, expr2, expr3) Explicatie Dacă expr1 este nenulă atunci returnează expr2, altfel Returnează expr3 Exemplu NVL2 (1, 2, 3) = 2 NVL2 (NULL, 2, 3) = 3 24. Să se afiseze numele salariatului si: · venitul anual dacă are comision; · salariul dacă nu are comision. Se va utiliza functia NVL2. /*si aici voi aduna salariul cu comisionul*/ SELECT last_name NVL2(commission_pct, salary+commission_pct, 0) "It's about money" FROM employees; /*nu am inteles exact ce ar trebui sa facem asa ca am pus sa afiseze si separat pe doua coloane */ SELECT last_name, NVL2(commission_pct, salary+commission_pct, 0) "astia au comision", NVL2(commission_pct, 0, salary) "astia nu au comision" FROM employees; ????????? 25. Să se afiseze numele salariatului, salariul si salariul revizuit astfel: - dacă lucrează de mai mult de 200 de luni atunci salariul va fi mărit cu 20%; - dacă lucrează de mai mult de 150 de luni, dar mai putin de 200 de luni, atunci salariul va fi mărit cu 15%; - dacă lucrează de mai mult de 100 de luni, dar mai puŃin de 150 de luni, atunci salariul va fi mărit cu 10%; - altfel, salariul va fi mărit cu 5%. SELECT last_name, salary, CASE WHEN ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) > 200 THEN salary*1.2 WHEN ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) > 150 THEN salary*1.15 WHEN ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) > 100 THEN salary*1.1 ELSE salary*1.05 END "SALARIU REVIZUIT" FROM employees;

CERERI MULTITABEL, SUBCERERI

Tipuri de join: - equijoin (se mai numeste inner join sau simple join) - compunerea a două tabele diferite după o conditie ce contine operatorul de egalitate. SELECT last_name, department_name, location_id, e.department_id FROM employees e, departments d WHERE e.department_id = d.department_id; Obs: Numele sau alias-urile tabelelor sunt obligatorii în dreptul coloanelor care au acelasi nume în mai multe tabele.

Page 44: SOLUTII - Baze de Date - Adunate

20

- nonequijoin - compunerea a două relatii tabele după o conditie oarecare, ce NU contine operatorul de egalitate. SELECT last_name, salary, grade_level FROM employees, job_grades WHERE salary BETWEEN lowest_sal AND highest_sal; - outerjoin - compunerea externă a două tabele diferite completând una dintre relatii cu valori NULL acolo unde nu există în aceasta nici un tuplu ce îndeplineste conditia de corelare. Relatia completată cu valori NULL este cea în dreptul căreia apare “(+)”. Operatorul (+) poate fi plasat în orice parte a conditiei de join, dar nu în ambele părti. Full outer join = Left outer join UNION Right outer join. SELECT last_name, department_name,location_id FROM employees e, departments d WHERE e.department_id(+) = d.department_id; - selfjoin - compunerea externă a unui tabel cu el însusi după o conditie dată. SELECT sef.last_name, angajat.last_name FROM employees sef, employees angajat WHERE sef.employee_id = angajat.manager_id ORDER BY sef.last_name;

1. Pentru fiecare angajat să se afiseze numele, codul si numele departamentului.

SELECT last_name, e.department_id, department_name FROM employees e, departments d WHERE e.department_id = d.department_id; 2. Să se afiseze numele angajatului, numele departamentului pentru toti angajatii care câstigă comision.

SELECT last_name, department_name FROM employees e, departments d WHERE e.department_id = d.department_id AND commission_pct IS NOT NULL;

2. Să se listeze numele job-urile care există în departamentul 30.

3. SELECT DISTINCT job_title

FROM employees e, jobs j WHERE e.job_id = j.job_id AND department_id = 30; 4. Sa se afiseze numele, job-ul si numele departamentului pentru tot angajati care lucrează în Seattle.

SELECT last_name, job_id, department_name FROM employees e, departments d, locations s WHERE e.department_id = d.department_id AND d.location_id = s.location_id AND city = ‘Seattle’;

Sau

SELECT last_name, e.job_id, department_name FROM employees e, departments d WHERE e.department_id = d.department_id AND location_id = (SELECT location_id FROM locations WHERE city = 'Seattle'); 5. Să se afiseze numele, salariul, data angajării si numele departamentului pentru toti programatorii care lucrează în America. region_name = ‘Americas’ job_title = ‘Programmer’

SELECT last_name, salary, hire_date, department_name FROM employees e, departments d, locations s, countries c, regions r, jobs j WHERE e.department_id = d.department_id AND d.location_id = s.location_id

Page 45: SOLUTII - Baze de Date - Adunate

21

AND s.country_id = c.country_id AND c.region_id = r.region_id AND e.job_id = j.job_id AND region_name = ‘Americas’ AND job_title = ‘Programmer’;

6. Să se afiseze numele salariatilor si numele departamentelor în care lucrează. Se vor afisa si salariatii care nu lucrează într-un departament (right outher join).

SELECT last_name, department_name FROM employees e, departments d WHERE e.department_id = d.department_id(+); 7. Să se afiseze numele departamentelor si numele salariatilor care lucrează în ele. Se vor afisa si departamentele care nu au salariati (left outher join).

SELECT department_name, last_name FROM employees e, departments d WHERE e.department_id(+) = d.department_id;

8. Să se afiseze numele, job-ul, numele departamentului, salariul si grila de salarizare pentru toti angajatii.

SELECT last_name, job_id, salary, department_name, grade_level FROM employees e, departments d, job_grades WHERE e.department_id = d.department_id AND salary BETWEEN lowest_sal AND highest_sal; 9. Să se afiseze codul angajatului si numele acestuia, împreună cu numele si codul sefului său direct. Se vor eticheta coloanele Ang#, Angajat, Mgr#, Manager. Să se salveze instrucsiunea într-un fisier numit p3_9.sql. SELECT a.employee_id “Ang#”, a.last_name “Angajat”, b.employee_id “Mgr#”, b.last_name“Manager” FROM employees a, employees b WHERE a.manager_id = b. employee_id; SAVE p3_9; 10. Să se modifice p3_9.sql pentru a afisa toti salariatii, inclusiv pe cei care nu au sef. SELECT e.employee_id Ang#, e.last_name Angajat, e.manager_id Mgr#, m.last_name Manager FROM employees e, employees m WHERE e.manager_id = m.employee_id(+); 11. Să se afiseze numele salariatului si data angajării împreună cu numele si data angajării sefului direct pentru salariatii care au fost angajati înaintea sefilor lor. Se vor eticheta coloanele Angajat, Data_ang, Manager si Data_mgr. SELECT e.last_name Angajat, e.hire_date Data_ang, m.last_name Manager, m.hire_date Data_mgr FROM employees e, employees m WHERE e.manager_id = m.employee_id AND e.hire_date<m.hire_date; 12. Pentru fiecare angajat din departamentele 20 si 30 să afiseze numele, codul departamentului si toti colegii săi (salariatii care lucrează în acelasi departament cu el). Se vor eticheta coloanele corespunzător.

SELECT a.last_name “Angajat”, a.department_id ”Departament”, b.last_name “Coleg” FROM employees a, employees b WHERE a.department_id = b.department_id AND a.employee_id <> b.employee_id AND a.department_id IN (20,30) ORDER BY a.last_name;

13. Să se afiseze numele si data angajării pentru salariatii care au fost angajati după Fay.

SELECT last_name, hire_date FROM employees WHERE hire_date > (SELECT hire_date FROM employees WHERE last_name = ‘Fay’);

Page 46: SOLUTII - Baze de Date - Adunate

22

Sau SELECT a.last_name, a.hire_date FROM employees a, employees b WHERE UPPER(b.last_name)=’FAY’ AND a.hire_date>b.hire_date; 14. Scrieti o cerere pentru a afisa numele si salariul pentru toti colegii (din acelasi departament) lui Fay. Se va exclude Fay.

SELECT last_name, salary FROM employees WHERE last_name <> ‘Fay’ AND department_id = (SELECT department_id FROM employees WHERE last_name = ‘Fay’);

Sau

SELECT last_name, salary FROM employees WHERE department_id = (SELECT department_id FROM employees WHERE last_name = 'Fay') AND last_name != 'Fay'; 15. Să se afiseze codul departamentului, codul si numele angajatilor care lucrează în acelasi departament cu cel putin un angajat al cărui nume contine litera “T”. Să se ordoneze după codul departamentului. SELECT employee_id, last_name, department_id FROM employees WHERE department_id IN (SELECT DISTINCT department_id FROM employees WHERE UPPER(last_name) LIKE ‘%T%’) ORDER BY department_id; 16. Să se afiseze numele si salariul angajatilor condusi direct de Steven King. SELECT last_name, salary FROM employees WHERE manager_id = (SELECT employee_id FROM employees WHERE UPPER(last_name) ='KING' AND UPPER(first_name) ='STEVEN' ); 17. Să se afiseze numele si job-ul tuturor angajatilor din departamentul ‘Sales’.

SELECT last_name, job_id FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name ='Sales'); 18. Să se afiseze numele angajatilor, numărul departamentului si job-ul tuturor salariatilor al căror departament este localizat în Seattle. SELECT last_name, job_id, department_id FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = (SELECT location_id FROM locations WHERE city = ‘Seattle’)); Rezolvati această problemă utilizând join-uri. 19. Să se afle dacă există angajati care nu lucrează în departamentul ‘Sales’ si al căror salariu si comision coincid cu salariul si comisionul unui angajat din departamentul ‘Sales’. SELECT last_name, salary, commission_pct, department_id FROM employees

Page 47: SOLUTII - Baze de Date - Adunate

23

WHERE (salary, commission_pct) IN (SELECT salary, commission_pct FROM employees e, departments d WHERE e.department_id = d.department_id AND department_name = ‘Sales’) AND department_id <> (SELECT department_id FROM departments WHERE department_name = ‘Sales’); 20. Scrieti o cerere pentru a afisa numele, numele departamentului si salariul angajatilor care nu câstigă comision, dar al căror manager coincide cu managerul unui angajat care câstigă comision.

SELECT last_name, department_name, salary FROM employees e, departments d WHERE e.department_id = d.department_id AND e.manager_id IN (SELECT DISTINCT manager_id FROM employees WHERE commission_pct IS NOT NULL) AND commission_pct IS NULL;

21. Scrieti o cerere pentru a afisa angajatii care câstigă mai mult decât oricare functionar. Sortati rezultatele după salariu, în ordine descrescătoare.

SELECT last_name, salary, job_id FROM employees WHERE salary > (SELECT MAX(salary) FROM employees WHERE job_id LIKE '%CLERK') ORDER BY salary DESC; 22. Să se afiseze codul, numele si salariul tuturor angajatilor care câstigă mai mult decât salariul mediu.

SELECT employee_id, last_name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees); 23. Să se afiseze pentru fiecare salariat angajat în luna martie numele său, data angajării si numele jobului. SELECT last_name, hire_date, job_title FROM employees e, jobs j WHERE TO_CHAR(hire_date,'MON') = 'MAR' AND e.job_id = j.job_id; 24. Să se afiseze pentru fiecare salariat al cărui câstig total lunar este mai mare decât 12000, numele său, câstigul total lunar si numele departamentului în care lucrează. SELECT last_name, salary+commission_pct "castig total lunar" , department_name FROM employees e, departments d WHERE salary+commission_pct > 12000 AND e.department_id = d.department_id; 25. Să se afiseze pentru fiecare angajat codul său si numele joburilor sale anterioare, precum si intervalul de timp în care a lucrat pe jobul respectiv.?? SELECT employee_id, job_id, start_date "data angaj job anterior",end_date"data final job anterior", ROUND(MONTHS_BETWEEN(end_date, start_date)) "interval angajare" FROM Job_history; /* Nu stiu daca este bine EMPLOYEE_ID JOB_ID data angaj data final interval angajare ----------- ---------- ---------- ---------- ----------------- 102 IT_PROG 13-01-1993 24-07-1998 66 101 AC_ACCOUNT 21-09-1989 27-10-1993 49 101 AC_MGR 28-10-1993 15-03-1997 41 201 MK_REP 17-02-1996 19-12-1999 46 114 ST_CLERK 24-03-1998 31-12-1999 21 122 ST_CLERK 01-01-1999 31-12-1999 12

Page 48: SOLUTII - Baze de Date - Adunate

24

176 SA_REP 24-03-1998 31-12-1998 9 176 SA_MAN 01-01-1999 31-12-1999 12 200 AC_ACCOUNT 01-07-1994 31-12-1998 54 200 AD_ASST 17-09-1987 17-06-1993 69 26. Să se modifice cererea de la punctul 25 astfel încât să se afiseze si numele angajatului, respectiv codul jobului său curent. SELECT last_name, job_id, hire_date "data angajarii", SYSDATE "data curenta", ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) "Vechime in firma" FROM employees; 27. Să se modifice cererea de la punctul 26 astfel încât să se afiseze si numele jobului său curent. SELECT last_name, e.job_id, job_title, hire_date "data angajarii", SYSDATE "data curenta", ROUND(MONTHS_BETWEEN(SYSDATE, hire_date))||' ' ||'luni' "Vechime in firma" FROM employees e, jobs j WHERE e.job_id = j.job_id; 28. Să se afiseze salariatii care au acelasi manager ca si angajatul având codul 140. SELECT first_name||' '||last_name FROM employees WHERE manager_id = ( SELECT manager_id FROM employees WHERE employee_id = 140); 29. Să se afiseze numele departamentelor care functionează în America. Functii multiple-row (grup). Gruparea datelor.

Aceste tipuri de functii pot fi utilizate pentru a returna informatia corespunzătoare fiecăruia dintre

grupurile obtinute în urma divizării liniilor tabelului cu ajutorul clauzei GROUP BY. Pot apărea în clauzele SELECT, ORDER BY si HAVING. Server-ul Oracle aplică aceste functii fiecărui grup de linii si returnează un singur rezultat pentru fiecare

multime. Exemple de functii grup: AVG, SUM, MAX, MIN, COUNT etc. Tipurile de date ale argumentelor functiilor grup pot fi CHAR, VARCHAR2, NUMBER sau DATE. Functiile AVG si SUM, operează numai asupra valorilor numerice. Functiile MAX si MIN pot opera

asupra valorilor numerice, caracter sau dată calendaristică. Toate functiile grup, cu exceptia lui COUNT(*), ignoră valorile null. COUNT(expresie) returnează numărul de linii pentru care expresia dată nu are valoarea null. FuncŃia COUNT returnează un număr mai mare sau egal cu zero si nu întoarce niciodată valoarea null.

Când este utilizată clauza GROUP BY, server-ul sortează implicit multimea rezultată în ordinea crescătoare a valorilor coloanelor după care se realizează gruparea.

Absenta clauzei GROUP BY conduce la aplicarea funcŃiei grup pe mulŃimea tuturor liniilor tabelului.

În clauza GROUP BY se trec obligatoriu toate coloanele prezente în clauza SELECT, care nu sunt argument al functiilor grup. 1. Să se afiseze cel mai mare salariu, cel mai mic salariu, suma si media salariilor tuturor angajatilor. Etichetati coloanele Maxim, Minim, Suma, respectiv Media. Să se rotunjească rezultatele. SELECT MIN(salary) min, MAX(salary) max, SUM(salary) suma, ROUND(AVG(salary)) media FROM employees; 2. Utilizând functia grup COUNT să se determine: a. numărul total de angajati; SELECT COUNT(*) "Total - angajati" FROM employees; b. numărul de angajati care au manager; SELECT COUNT(*) "angajari cu manager" FROM employees WHERE manager_id IS NOT NULL; c. numărul de manageri. SELECT COUNT(*) "Numar manageri" FROM employees WHERE manager_id IS NULL; 3. Să se afiseze diferenta dintre cel mai mare si cel mai mic salariu. Etichetati coloana “Diferenta”. SELECT MAX(salary) - MIN(salary) "Diferenta" FROM employees;

Page 49: SOLUTII - Baze de Date - Adunate

25

4. Să se listeze numărul de angajati din departamentul având codul 50. SELECT COUNT(*) "ANGAJATI - DEP_50" FROM employees WHERE department_id = 50; 5. Cati angajati din departamentul 80 câstigă comision? SELECT COUNT(*) "ANGAJATI CU COMISION" FROM employees WHERE commission_pct IS NOTNULL; 6. Să se selecteze valoarea medie si suma salariilor pentru toti angajatii care sunt reprezentanti de vânzări (SA_MAN, SA_REP). SELECT AVG(salary) media, SUM(salary) FROM employees GROUP BY job_id IN ( SA_MAN, SA_REP); 7. Să se selecteze data angajării primei persoane care a fost angajată de companie. SELECT MIN(hire_date) FROM employees; 8. Să se afiseze numărul de angajati pentru fiecare job. SELECT job_id, COUNT(employee_id) nr_angajati FROM employees GROUP BY job_id; 9. Să se afiseze minimul, maximul, suma si media salariilor pentru fiecare departament. SELECT department_id, MIN(salary), MAX(salary), SUM(salary), AVG(salary) FROM employees GROUP BY department_id; 10. Să se afiseze codul departamentului si media salariilor pentru fiecare job din cadrul acestuia. SELECT department_id, job_id, AVG(salary) FROM employees GROUP BY department_id, job_id; 11. a. Să se afiseze codul departamentelor pentru care salariul minim depăseste 5000$. SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary)>5000; 11.b. Să se modifice cererea anterioară astfel încât să se afiseze si orasul în care functionează aceste departamente. SELECT department_id, MIN(salary), city FROM employees, locations GROUP BY department_id, city HAVING MIN(salary) > 5000; 12. Să se obtină codul departamentelor si numărul de angajati al acestora pentru departamentele care au cel putin 10 angajati. SELECT department_id, COUNT(employee_id) FROM employees GROUP BY department_id HAVING COUNT(employee_id) >= 10; 13. Să se obtină codul departamentelor si suma salariilor angajatilor care lucrează în acestea, în ordine descrescătoare după sumă. Se consideră angajatii care au comision si departamentele care au mai mult de 5 angajati. SELECT department_id, SUM(salary) FROM employees WHERE commission_pct IS NOT NULL GROUP BY department_id HAVING COUNT(employee_id) > 5 ORDER BY SUM(salary) DESC; 14. Să se obtină job-ul pentru care salariul mediu este minim. SELECT job_id FROM employees GROUP BY job_id HAVING AVG(salary) = (SELECT MIN(AVG(salary)) FROM employees

Page 50: SOLUTII - Baze de Date - Adunate

26

GROUP BY job_id); 15. Să se afiseze cel mai mare dintre salariile medii pe departamente. SELECT AVG(salary) FROM employees GROUP BY department_id HAVING AVG(salary) = (SELECT MAX(AVG(salary)) FROM employees GROUP BY department_id); 16. a. Să se afiseze codul, numele departamentului si suma salariilor pe departamente. SELECT d.department_id, department_name,a.suma FROM departments d, (SELECT department_id ,SUM(salary) suma FROM employees GROUP BY department_id) a WHERE d.department_id =a.department_id; b. Dati o altă metodă de rezolvare a acestei probleme. SELECT d.department_id, department_name, SUM(salary) FROM employees e, departments d WHERE e.department_id = d.department_id GROUP BY d.department_id, department_name; 17. a. Scrieti o cerere pentru a afisa numele departamentului, numărul de angajati si salariul mediu pentru angajatii din acel departament. Coloanele vor fi etichetate Departament, Nr. angajati, Salariu Mediu. SELECT department_name “Departament”, (SELECT COUNT(employee_id) FROM employees WHERE department_id = d.department_id ) ” Nr. angajati”, (SELECT AVG(salary) FROM employees WHERE department_id = d.department_id) ”Salariu mediu” FROM departments d; b. Dati o altă metodă de rezolvare pentru problema anterioară. SELECT department_name "Departament", COUNT(employee_id) "Nr. angajati", AVG(salary) "Salariu mediu" FROM employees e, departments d WHERE e.department_id = d.department_id GROUP BY department_name; /* nu returneaza departmanetele care nu au angajati*/ 18. Să se creeze o cerere prin care să se afiseze numărul total de angajati si, din acest total, numărul celor care au fost angajati în 1997, 1998, 1999 si 2000. Datele vor fi afisate în forma următoare: Total 1997 1998 1999 2000 -------------------------------------------------------------- 50 10 5 25 1 SUM(DECODE(TO_CHAR(hire_date,'yyyy'),1997,1,0)) SELECT COUNT(employee_id) "Total", SUM(DECODE(TO_CHAR(hire_date,'yyyy'),1997,1,0)) "1997", SUM(DECODE(TO_CHAR(hire_date,'yyyy'),1998,1,0)) "1998", SUM(DECODE(TO_CHAR(hire_date,'yyyy'),1999,1,0)) "1999", SUM(DECODE(TO_CHAR(hire_date,'yyyy'),2000,1,0)) "2000" FROM employees; /*afiseaza Total 1997 1998 1999 2000 ---------- ---------- ---------- ---------- ---------- 106 28 23 18 11

Operatorii ROLLUP si CUBE Clauza GROUP BY permite gruparea liniilor selectate după valorile expresiilor precizate în aceasta.

Pentru fiecare grup, va fi returnată o singură linie de informatie. Clauza GROUP BY poate produce grupări superagregat utilizând extensiile CUBE sau ROLLUP.

Page 51: SOLUTII - Baze de Date - Adunate

27

ROLLUP - grupează liniile selectate pe baza valorilor primelor n, n - 1, …, 0 expresii din specificatia

GROUP BY si returnează o singură linie pentru fiecare grup. - creează grupări prin deplasarea într-o singură direcŃie, de la dreapta la stânga, de-a

lungul listei de coloane specificate în clauza GROUP BY Apoi, se aplică functia agregat acestor grupări. Dacă sunt specificate n expresii în operatorul ROLLUP,

numărul de grupări generate va fi n + 1. Liniile care se bazează pe valoarea primelor n expresii se numesc linii obisnuite, iar celelalte se numesc linii superagregat. GROUP BY ROLLUP (expr_1, expr_2, …, expr_n) generează n+1 tipuri de linii, corespunzătoare următoarelor grupări: · GROUP BY (expr_1, expr_2, …, expr_n-1, expr_n) · GROUP BY (expr_1, expr_2, …, expr_n-1) · … · GROUP BY (expr_1, expr_2) · GROUP BY (expr_1) · GROUP BY () – corespunzător absentei clauzei GROUP BY si deci, calculului funcŃiilor grup din cerere pentru întreg tabelul. CUBE grupează liniile selectate pe baza valorilor tuturor combinatiilor posibile ale expresiilor specificate si returnează câte o linie totalizatoare pentru fiecare grup. Acest operator este folosit pentru a produce multimi de rezultate care sunt utilizate în rapoarte. În vreme ce ROLLUP produce subtotalurile doar pentru o parte dintre combinatiile posibile, operatorul CUBE produce subtotaluri pentru toate combinatiile posibile de grupări specificate în clauza GROUP BY, precum si un total general.

Dacă există n coloane sau expresii în clauza GROUP BY, vor exista 2n combinatii posibile superagregat. 19. Să se afiseze codurile departamentelor în care lucrează cel putin un angajat, iar pentru fiecare dintre acestea si pentru fiecare manager care lucrează în departamentul respectiv să se afiseze numărul de salariati. De asemenea, să se afiseze numărul de salariati pentru fiecare departament indiferent de manager si numărul total de angajati din companie. SELECT department_id, manager_id, COUNT(employee_id) FROM employees WHERE manager_id IS NOT NULL AND department_id IS NOT NULL GROUP BY ROLLUP (department_id, manager_id); 20. Să se afiseze codurile departamentelor în care lucrează cel putin un angajat, iar pentru fiecare dintre acestea si pentru fiecare manager care lucrează în departamentul respectiv să se afiseze numărul de salariati. De asemenea, să se afiseze numărul de salariati pentru fiecare departament indiferent de manager, numărul de angajati subordonati unui manager indiferent de departament si numărul total de angajati din companie. SELECT department_id, manager_id, COUNT(employee_id) FROM employees WHERE manager_id IS NOT NULL AND department_id IS NOT NULL GROUP BY CUBE (department_id, manager_id); 21. Pentru fiecare departament, job, respectiv an al angajării să se afiseze numărul de salariati. De asemenea se va afisa numărul de angajati: - pentru fiecare departament si job, indiferent de anul angajării; - pentru fiecare departament, indiferent de job si de anul angajării; - la nivel de companie. Exemplu: Să se afiseze valoarea totală a operelor de artă ale unui autor, expuse în cadrul fiecărei galerii având codul mai mic decât 50. De asemenea, să se afiseze valoarea totală a operelor din fiecare galerie având codul mai mic decât 50, valoarea totală a operelor fiecărui autor indiferent de galerie si valoarea totală a operelor din galeriile având codul mai mic decât 50. SELECT cod_galerie, cod_artist, SUM(valoare) FROM opera WHERE cod_galerie < 50 GROUP BY CUBE(cod_galerie, cod_artist);

Page 52: SOLUTII - Baze de Date - Adunate

28

22. Să se afiseze suma alocată pentru plata salariilor pe joburi (codul jobului), în cadrul departamentului (codul departamentului). De asemenea, să se afiseze valoarea totală necesară pentru plata salariilor la nivel de departament, valoarea totală necesară pentru plata salariilor la nivel de job, indiferent de departament si valoarea totală necesară pentru plata salariilor la nivel de companie. 23. Functia GROUPING(expresie) întoarce: - valoarea 0, dacă expresia a fost utilizată pentru calculul valorii agregat - valoarea 1, dacă expresia nu a fost utilizată. 24. Să se afiseze numele departamentelor, titlurile job-urilor si valoarea medie a salariilor, pentru: - fiecare departament si, în cadrul său pentru fiecare job; - fiecare departament (indiferent de job); - întreg tabelul. De asemenea, să se afiseze si o coloană care indică intervenŃia coloanelor department_name si job_title în obtinerea rezultatului. SET LINESIZE 100 COLUMN job FORMAT ‘99’ COLUMN dept FORMAT ‘99’ SELECT department_name, job_title, AVG(salary) medie, GROUPING(department_name) dept, GROUPING(job_title) job FROM employees e, departments d, jobs j WHERE e.department_id = d.department_id AND e.job_id = j.job_id GROUP BY ROLLUP(department_name, job_title); 25. Modificati cererea anterioară astfel încât să se afiseze numele departamentelor, titlurile job-urilor si valoarea medie a salariilor, pentru: - fiecare departament si, în cadrul său pentru fiecare job; - fiecare departament (indiferent de job); - fiecare job(indiferent de departament); - întreg tabelul. Cum intervin coloanele în obtinerea rezultatului? Să se afiseze ’Dept’, dacă departamentul a intervenit în agregare si ‘Job’, dacă job-ul a intervenit în agregare. DECODE(GROUPING(department_name), 0, ‘Dept’)

SELECT department_name, job_title, AVG(salary) medie, DECODE(GROUPING(department_name), 0, ‘Dept’) dept, DECODE(GROUPING(job_title), 0, ‘Job’) job FROM employees e, departments d, jobs j WHERE e.department_id = d.department_id AND e.job_id = j.job_id GROUP BY CUBE(department_name, job_title);

26. Utilizati cererea de la punctul 20. a. Eliminati clauza WHERE din această cerere. Analizati rezultatul obtinut. b. Modificati cererea obtinută astfel încât să se identifice dacă o valoare null din rezultat este stocată pe una dintre coloanele manager_id sau department_id sau este produsă de operatorul CUBE. /*Cererea de la pct.20*/ SELECT department_id, manager_id, COUNT(employee_id) FROM employees WHERE manager_id IS NOT NULL AND department_id IS NOT NULL GROUP BY CUBE (department_id, manager_id); /* 54 de inregistrari selectate*/ SELECT department_id, manager_id, COUNT(employee_id) FROM employees GROUP BY CUBE (department_id, manager_id); /*58 înregistrãri selectate.*/ /* se afiseaza departamentele care nu au angajati si angajatii care nu fac parte din nici un departament

Page 53: SOLUTII - Baze de Date - Adunate

29

27. Clauza GROUPING SETS. Permite obtinerea numai a anumitor grupări superagregat. Acestea pot fi precizate prin intermediul clauzei: GROUP BY GROUPING SETS ((expr_11, expr_12, …, expr_1n), (expr_21, expr_22, …expr_2m), …) 28. Să se afiseze numele departamentelor, numele job-urilor, codurile managerilor angajatilor, maximul si suma salariilor pentru: - fiecare departament si, în cadrul său, fiecare job; - fiecare job si, în cadrul său, pentru fiecare manager; - întreg tabelul. GROUPING SETS ((department_name, job_title), (job_title, e.manager_id), ()); SELECT department_name, job_title, e.manager_id, MAX(salary) “Maxim”, SUM(salary) “Suma”

FROM employees e, departments d, jobs j WHERE e.department_id = d.department_id AND e.job_id = j.job_id GROUP BY GROUPING SETS ((department_name, job_title), (job_title, e.manager_id), ());

Limbajul de control al datelor (DCL). COMMIT, SAVEPOINT, ROLLBACK. · Comanda COMMIT permanentizează modificările care au fost realizate de tranzactia curentă (o tranzactie este un set de comenzi LMD); comanda suprimă toate punctele intermediare definite în tranzactie si eliberează blocările tranzactiei. Observatie: Sistemul realizează COMMIT implicit: - la închiderea normală a unui client Oracle (de exemplu SQL*Plus), - după fiecare comandă LDD (CREATE, ALTER, DROP). · Comanda SAVEPOINT marchează un punct intermediar în procesarea tranzactiei. În acest mod este posibilă împărtirea tranzactiei în subtranzactii. Comanda SAVEPOINT are sintaxa: SAVEPOINT nume_pct_intermediar; · Comanda ROLLBACK permite renuntarea la modificările efectuate; aceasta determină încheierea tranzactiei, anularea modificărilor asupra datelor si restaurarea stării lor precedente. Comanda ROLLBACK are sintaxa: ROLLBACK [TO SAVEPOINT nume_punct_salvare]; Observatii: - sistemul realizează ROLLBACK implicit dacă se închide anormal (defectiune hardware sau software, pană de curent etc.); - nici o comanda LDD (CREATE, ALTER; DROP) nu poate fi anulată. 1. Ce efect are următoarea secventă de instructiuni? CREATE TABLE dept1 AS SELECT * FROM departments; SELECT * FROM dept1; SAVEPOINT a; /* punct de salvare creat*/ DELETE FROM dept1; INSERT INTO dept1 VALUES (300,’Economic’,100,1000); /*EROARE la linia 1:ORA-00913: prea multe valori*/ INSERT INTO dept1 VALUES (350,’Cercetare’,200,2000); /*EROARE la linia 1:ORA-00913: prea multe valori*/ SAVEPOINT b; /* punct de salvare creat*/ INSERT INTO dept1 VALUES (400,’Juritic’,150,3000);

Page 54: SOLUTII - Baze de Date - Adunate

30

SELECT COUNT(*) FROM dept1; */ COUNT(*) ---------- 0*/ ROLLBACK TO b; /* revenire incheiata SELECT COUNT(*) FROM dept1; */COUNT(*) ---------- 0*/ ROLLBACK TO a; */ punct de salvare creat INSERT INTO dept1 VALUES (500,’Contabilitate’,175,1500); */EROARE la linia 1: ORA-00913: prea multe valori*/ COMMIT; */Confirmare finalizatã.*/ SELECT * FROM dept1; */nici o înregistrare selectatã*/

Limbajul de prelucrare a datelor (DML). INSERT, UPDATE, DELETE. 1. Să se creeze tabele emp_*** si dept_***, având aceeasi structură si date ca si tabelele employees, respectiv departments. CREATE TABLE emp AS SELECT * FROM employees; CREATE TABLE dept AS SELECT * FROM departments; 2. Să se selecteze toate înregistrările din cele două tabele create anterior. SELECT * FROM emp; SELECT * from dept; 3.Stergeti toate înregistrările din cele 2 tabele create anterior. Salvati modificările. DELETE FROM emp; DELETE FROM dept; COMMIT; 4. Să se listeze structura tabelului employees si să se compare cu structura tabelului emp_***. Ce observati? DESCRIBE employees; DESCRIBE emp; /*Au aceeasi structura.*/ 5. Sintaxa simplificată a comenzii INSERT - pentru inserarea unei singure linii: INSERT INTO nume_tabel [(col1,col2,...)] VALUES (expresie1, expresie2, ...); - pentru inserarea liniilor rezultat ale unei comenzi SELECT: INSERT INTO nume_tabel [(col1,col2,...)] comanda_SELECT; 6. Să se exemplifice câteva dintre erorile care pot să apară la inserare si să se observe mesajul returnat de sistem. - lipsa de valori pentru coloane NOT NULL (coloana department_name este definită NOT NULL) INSERT INTO dept (department_id, location_id) VALUES (200, 2000); */EROARE la linia 1: ORA-01400: nu poate fi inserat NULL în ("SCOTT"."DEPT3"."DEPARTMENT_NAME")*/ - nepotrivirea listei de coloane cu cea de expresii INSERT INTO dept VALUES (200, 2000); INSERT INTO dept(department_id, department_name,location_id) VALUES (200, 2000); */EROARE la linia 2: ORA-00947: valori prea putine*/

Page 55: SOLUTII - Baze de Date - Adunate

31

- nepotrivirea tipului de date INSERT INTO dept (department_id, location_id) VALUES (‘D23’, 2000); */EROARE la linia 2: ORA-01722: numãr eronat*/ - valoare prea mare pentru coloană INSERT INTO dept_*** (department_id, location_id) VALUES (15000, 2000); 7. Inserati în tabelul emp_*** salariatii (din tabelul employees) al căror comision depăseste 25% din salariu. INSERT INTO emp SELECT * FROM employees WHERE salary*0.25 < commission_pct ; 8. Creati tabele emp1_***, emp2_*** si emp3_*** cu aceeasi structură ca tabelul employees. Inserati, utilizând o singură comandă INSERT, informatii din tabelul employees: - în tabelul emp1_*** salariatii care au salariul mai mic decât 6000; - în tabelul emp2_*** salariatii care au salariul cuprins între 6000 si 10000; - în tabelul emp3_*** salariatii care au salariul mai mare decât 10000. Verificati rezultatele, apoi stergeti toate înregistrările din aceste tabele. Obs. Clauza ALL a comenzii INSERT determină evaluarea tuturor conditiilor din clauzele WHEN. Pentru cele a căror valoare este TRUE, se inserează înregistrarea specificată în optiunea INTO corespunzătoare. CREATE TABLE emp1_1 AS SELECT * FROM employees WHERE 1=0; CREATE TABLE emp2_1 AS SELECT * FROM employees WHERE 1=0; CREATE TABLE emp3_1 AS SELECT * FROM employees WHERE 1=0; INSERT ALL WHEN salary < =6000 THEN INTO emp1_1 WHEN salary > = 6000 AND salary <= 10000 THEN INTO emp2_1 ELSE INTO emp3_1 SELECT * FROM employees; DELETE FROM emp1_1; DELETE FROM emp2_1; DELETE FROM emp3_1; COMMIT; 9. Să se creeze tabelul emp0_*** cu aceeasi structură ca tabelul employees. Inserati, utilizând o singură comandă INSERT, informatii din tabelul employees: - în tabelul emp0_*** salariatii care lucrează în departamentul 80; - în tabelul emp1_*** salariatii care au salariul mai mic decât 6000 (care nu se regăsesc în tabelul emp0_***); - în tabelul emp2_*** salariatii care au salariul cuprins între 6000 si 10000 (care nu se regăsesc în tabelele emp0_*** si emp1_***); - în tabelul emp3_*** salariatii care au salariul mai mare decât 10000 (care nu se regăsesc în tabelele emp0_***, emp1_*** si emp2_***). Obs. Clauza FIRST a comenzii INSERT determină inserarea corespunzătoare primei clauze WHEN a cărei conditie este evaluată TRUE. Toate celelalte clauze WHEN sunt ignorate. CREATE TABLE emp0_1 AS SELECT * FROM employees WHERE 1=0; INSERT FIRST WHEN department_id = 80 THEN INTO emp0_1 WHEN salary <= 6000 THEN

Page 56: SOLUTII - Baze de Date - Adunate

32

INTO emp1_1 WHEN salary > = 6000 AND salary <= 10000 THEN INTO emp2_1 ELSE INTO emp3_1 SELECT * FROM employees; 10. Sintaxa simplificată a comenzii DELETE DELETE FROM nume_tabel [WHERE conditie]; 11. Stergeti toate înregistrările din tabelele emp_*** si dept_***. Inserati în aceste tabele toate înregistrările corespunzătoare din employees, respectiv departments. Permanentizati tranzactia. DELETE FROM dept; DELETE FROM emp; INSERT INTO emp SELECT * FROM employees; INSERT INTO dept SELECT * FROM departments; COMMIT; 12. Stergeti angajatii care nu au comision. Anulati modificările. DELETE FROM emp_*** WHERE commission_pct IS NULL; ROLLBACK; DELETE FROM emp WHERE commission IS NULL; ROLLBACK; 13. Eliminati departamentele care nu au nici un angajat. Anulati modificările. DELETE FROM dept WHERE department_id NOT IN (SELECT DISTINCT department_id FROM emp WHERE department_id IS NOT NULL); ROLLBACK; 14. Eliminati angajatii care nu apartin unui departament valid. Anulati modificările. DELETE FROM emp WHERE department_id NOT IN (SELECT department_id FROM dept) OR department_id IS NULL; ROLLBACK; 15. Sintaxa simplificată a comenzii UPDATE: UPDATE nume_tabel [alias] SET col1 = expr1[, col2=expr2] [WHERE conditie]; sau UPDATE nume_tabel [alias] SET (col1,col2,...) = (subcerere) [WHERE conditie]; 16. Măriti salariul tuturor angajatilor din tabelul emp_*** cu 5%. Anulati modificările. UPDATE emp SET salary = salary * 1.05; ROLLBACK; 17. Schimbati jobul tuturor salariatilor din departamentul 80 care au comision în 'SA_REP'. Anulati modificările. UPDATE emp SET job_id = 'SA_REP' WHERE department_id=80 AND commission_pct IS NOT NULL; ROLLBACK;

Page 57: SOLUTII - Baze de Date - Adunate

33

UPDATE emp SET job_id = 99 WHERE department_id=80 AND commission IS NOT NULL; ROLLBACK; 18. Să se modifice jobul si departamentul angajatului având codul 114, astfel încât să fie la fel cu cele ale angajatului având codul 205. UPDATE emp SET (job_id, department_id) = (SELECT job_id, department_id FROM emp WHERE employee_id = 205) WHERE employee_id = 114; ROLLBACK; 19. Schimbati salariul si comisionul celui mai prost plătit salariat din firmă, astfel încât să fie egale cu salariul si comisionul directorului. DELETE FROM emp WHERE employee_id = 123; UPDATE emp SET (salary, commission) = (SELECT salary, commission FROM emp WHERE manager_id IS NULL) WHERE salary = (SELECT MIN(salary) FROM emp); ROLLBACK; 20. Pentru fiecare departament să se mărească salariul celor care au fost angajaŃi primii astfel încât să devină media salariilor din companie. UPDATE emp e SET salary = (SELECT AVG(salary) FROM emp) WHERE hire_date = (SELECT MIN(hire_date) FROM emp WHERE department_id=e.department_id); ROLLBACK; 21. Să se modifice valoarea emailului pentru angajatii care câstigă cel mai mult în departamentul în care lucrează astfel încât acesta să devină initiala numelui concatenată cu prenumele. Dacă nu are prenume atunci în loc de acesta apare caracterul ‘.’. Anulati modificările. UPDATE emp SET email = LOWER(SUBSTR(first_name,1,1)) || LOWER(NVL(last_name, '. ')) WHERE (department_id, salary) IN (SELECT department_id, MAX(salary) FROM emp GROUP BY department_id); ROLLBACK;

Page 58: SOLUTII - Baze de Date - Adunate

SUBIECTE BISTRITA (rezolvate de Cata, asa ca watch-out) 1. Care este forma corecta pentru a adauga constrangeri la nivel de coloana si /sau la nivel de tabel? CREATE TABLE [schema.]nume_tabel ( nume_coloana tip_de_date, [DEFAULT expr] [constrangere_de_coloana], ... ..[constrangere la nivel de tabel]) CREATE TABLE [schema.]nume_tabel ( nume_coloana tip_de_date [DEFAULT expr], [constrangere_de_coloana] ... ..[constrangere la nivel de tabel]) CREATE TABLE [schema.]nume_tabel ( nume_coloana tip_de_date, [DEFAULT expr], [constrangere_de_coloana], ... ..[constrangere la nivel de tabel]) CREATE TABLE [schema.]nume_tabel ( nume_coloana tip_de_date [DEFAULT expr] [constrangere_de_coloana], ... ..[constrangere la nivel de tabel]) 2. Care este comanda corecta care determina marirea salariul tuturor angajatilor din tabelul salariat cu 5%? UPDATE salariu SET salariu = salariu * 1.05; UPDATE salariat SET salariu = salariu * 1.05; UPDATE salariat SET salariu = 1.05; UPDATE salariat SET salariu = salariu + salariu* 1.05; 3. Care este comanda corecta care insereaza in tabelul TOTALURI(cod_departament, numar_angajati, suma_salarii)? INSERT INTO totaluri SELECT cod_departament, COUNT(*),SUM(salariu) FROM salariat GROUP BY cod_departament; INSERT INTO totaluri SELECT cod_departament, SUM(cod_angajat),SUM(salariu) FROM salariat GROUP BY cod_departament; INSERT INTO totaluri SELECT cod_departament, COUNT(*),SUM(salariu) FROM salariat; INSERT INTO totaluri SELECT cod_departament, COUNT(),SUM(salariu)

Page 59: SOLUTII - Baze de Date - Adunate

FROM salariat ORDER BY cod_departament; 4. Care comanda afiseaza numele angajatilor, fara duplicate, care au manager? SELECT DISTINCT nume FROM salariat WHERE manager IS NOT NULL; SELECT DISTINCT nume FROM salariat WHERE manager IS NULL; SELECT nume FROM salariat WHERE manager IS NOT NULL; SELECT DISTINCT nume FROM salariat WHERE manager != NULL; 5. Care este comanda corecta care pentru fiecare facultate, se insereaza in tabelul SALARII(cod_fac, nr_prof, total_sal_fac) numarul de profesori si suma salariilor pe care facultatea o plateste profesorilor sai? INSERT TO TOTALURI SELECT COD_FAC, COUNT(*) , SUM(SALARIU) FROM PROF ORDER BY COD_FAC; INSERT INTO TOTALURI SELECT COD_FAC, COUNT(*) , SUM(SALARIU) FROM PROF ; INSERT INTO TOTALURI SELECT COD_FAC, COUNT(*) , SUM(SALARIU) FROM PROF GROUP BY COD_FAC; INSERT INTO totaluri SELECT COD_FAC, SUM(COD_PROF),SUM(SALARIU) FROM PROF GROUP BY COD_FAC; 6. Care secventa este corecta pentru a afisa citi angajati nu au o valoare introdusa pe coloana salariu? SELECT COUNT() FROM salariati WHERE SALARIU =0; SELECT COUNT(*) FROM salariati WHERE SALARIU =NULL;

Page 60: SOLUTII - Baze de Date - Adunate

SELECT COUNT(*) FROM salariati WHERE SALARIU IS NOT NULL; SELECT COUNT(*) FROM salariati WHERE SALARIU IS NULL; 7. Care este comanda corecta care determina dublarea salariilor cu rotunjire la 2 zecimale a angajatilor care sunt titulari? UPDATE salariat SET salariu=ROUND(salariu*2,2); UPDATE salariat SET salariu=ROUND(salariu*2) WHERE titular =’y’; UPDATE salariat SET salariu=ROUND(salariu*2,2) WHERE titular =’y’; UPDATE salariat SET salariu=ROUND(salariu*0.5,2) WHERE titular =’y’; 8. Care este comanda corecta care afiseaza numele salariatilor care castiga mai mult decat salariul mediu pe companie, in ordine crescatoare a salariului? SELECT nume FROM salariati WHERE salariu >AVG(salariu); SELECT nume FROM salariati WHERE salariu > (SELECT AVG(salariu) FROM salariati) ORDER BY salariu; SELECT nume FROM salariati WHERE salariu > (SELECT AVG(salariu) FROM salariati ORDER BY salariu); SELECT nume FROM salariati WHERE salariu > (SELECT AVG(salariu) FROM salariati) ORDER BY 1; 9. Ce comanda modifica in tabelul SALARIAT COD _ANG

NUME

PRENUME

DATA_ANG

VARSTA

EMAIL

SALARIU

not null sir de sir caractere date, valoare numeric de sir de valoare

Page 61: SOLUTII - Baze de Date - Adunate

numeric de 5

caractere de maxim 20

de maxim 20

implicita data curentã

2

caractere de dimensiune fixa, de 30

implicita 0 numar de 10 cu 2 zecimale

dimensiunea coloanei nume la 30 si pe cea a coloanei salariu la 12 cu 3 zecimale? ALTER TABLE salariat MODIFY nume VARCHAR2(30), salariu NUMBER(12,3); ALTER TABLE salariat MODIFY nume VARCHAR2(30), salariu NUMBER(12,3); ALTER TABLE salariat MODIFY nume VARCHAR2(30), MODIFY salariu NUMBER(12,3); ALTER TABLE salariat MODIFY (nume VARCHAR2(30), salariu NUMBER(12,3)); 10. Care este comanda corecta care sterge valoarea coloanei salariu pentru angajatii care sunt angajati cu contract de colaborare? DELETE salariu FROM salariati WHERE contract=’colaborare’; UPDATE salariati SET salariu IS null WHERE contract=’colaborare’; DROP salariu FROM salariati WHERE contract=’colaborare’; UPDATE salariati SET salariu=null WHERE contract=’colaborare’; 11. Care este comanda incorecta care afiseaza numele, salariul si varsta pentru toti salariatii care castiga mai mult de 1000, rezultatul fiind sortat descendent dupa salariu, iar pentru cei care au acelasi salariu in ordine crescatoare dupa nume? SELECT nume, salariu, varsta FROM salariat WHERE salariu>1000 ORDER BY salariu DESC nume ASC; SELECT nume, salariu, varsta FROM salariat WHERE salariu>1000 ORDER BY salariu DESC, nume ASC; SELECT nume, salariu, varsta

Page 62: SOLUTII - Baze de Date - Adunate

FROM salariat WHERE salariu>1000 ORDER BY salariu DESC, nume; SELECT nume, salariu, varsta FROM salariat WHERE salariu>1000 ORDER BY 2 DESC, 1 ASC; 12. Actualizarile realizate asupra tabelelor de baza ale unei vizualizari se reflecta totdeauna in vizualizare Adevărat Fals 13. Care este comanda corecta pentru a afisa numele, prenumele si varsta salariatilor, iar pentru cei care au varsta necunoscuta sa apara textul “varsta necunoscuta”? SELECT nume, prenume, NVL(varsta, ‘varsta necunoscuta’) FROM salariat; SELECT nume, prenume, NVL(TO_CHAR(varsta), ‘varsta necunoscuta’) FROM salariat; SELECT nume, prenume, NVL(CHAR(varsta), ‘varsta necunoscuta’) FROM salariat; SELECT nume, prenume, NVL2(TO_CHAR(varsta), ‘varsta necunoscuta’) FROM salariat; 14. Care comanda afiseaza numarul de angajati din fiecare departament? SELECT cod_departament, COUNT(*) FROM salariat; SELECT cod_departament, SUM(cod_angajat) FROM salariat GROUP BY cod_departament; SELECT cod_departament, COUNT(*) FROM salariat GROUP BY cod_departament; SELECT cod_departament, COUNT() FROM salariat GROUP BY cod_departament; 15. Pentru a introduce in tabelul SALARIAT COD _ANG

NUME

PRENUME

DATA_ANG

VARSTA

SALARIU

not null numeric de 5

sircaractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data

numeric de 2

valoare implicita 0

Page 63: SOLUTII - Baze de Date - Adunate

curentã

numar de 10 cu 2 zecimale

doua coloane: Cod_Funct si Email ce varianta folosim? ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER COLUMN ADD Email char(25); ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ADD Email CHAR(25); ALTER TABLE SALARIAT ADD (Cod_Funct NUMBER(2) , Email CHAR(25)); ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER ADD Email char(25); 16. Ce comanda creeaza tabelul SALARIAT_1 care sã aiba aceeiasi structura cu tabelul SALARIAT COD _ANG

NUME

PRENUME

DATA_ANG

VARSTA

EMAIL

SALARIU

not null numeric de 5

sir de caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentã

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0 numar de 10 cu 2 zecimale

si sa contina salariatii care au salariu >100? CREATE TABLE SALARIAT_1 SELECT * FROM SALARIAT WHERE SALARIU>100; CREATE TABLE SALARIAT_1 AS SELECT * FROM SALARIAT WHERE SALARIU>100; CREATE TABLE SALARIAT_1 AS SELECT FROM SALARIAT WHERE SALARIU>100; CREATE TABLE SALARIAT_1 AS SELECT COD_ANG, SALARIU FROM SALARIAT WHERE SALARIU>100; 17. Pentru a modifica dimensiunea coloanei prenume la 30 si pe cea a salariului la 12 cu 3 zecimale, din tabelul SALARIAT COD _ANG

NUME

PRENUME

DATA_ANG

VARSTA

EMAIL

SALARIU

not null numeric de 5

sir de caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentã

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0 numar de 10 cu 2 zecimale

care varienta este corecta? ALTER TABLE SALARIAT MODIFY (prenume VARCHAR2(30) salariu NUMBER(12,3));

Page 64: SOLUTII - Baze de Date - Adunate

ALTER TABLE SALARIAT MODIFY (prenume VARCHAR2(30)), MODIFY(salariu NUMBER(12,3)); ALTER TABLE SALARIAT MODIFY (prenume VARCHAR2(30) , salariu NUMBER(12,3)); ALTER TABLE SALARIAT ADD (prenume VARCHAR2(30), salariu NUMBER(12,3)); 18. Care este varianta corecta pentru a crea tabelul Salariat, cu caracteristicile de mai jos? COD _ANG

NUME

PRENUME

DATA_ANG

VARSTA

EMAIL

SALARIU

not null numeric de 5

sir de caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentã

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0 numar de 10 cu 2 zecimale

CREATE TABLE SALARIAT ( cod_ang NUMBER(5) NOT NULL, nume VARCHAR2(20), prenume VARCHAR2(20), data_angajarii DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2) DEFAULT 0); CREATE TABLE SALARIAT ( cod_ang NUMBER(5) nume VARCHAR2(20), prenume VARCHAR2(20), data_angajarii DATE , varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2) DEFAULT 0); CREATE TABLE SALARIAT ( cod_ang NUMBER(5) NOT NULL, nume VARCHAR2(20), prenume VARCHAR2(20), data_angajarii DATE, DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2), DEFAULT 0); 19. Care varianta este corecta pentru a redenumi tabelul SALARIAT cu numele SALARIATI? RENAME SALARIAT TO SALARIATI; RENAME SALARIAT WITH SALARIATI; RENAME TABLE SALARIAT TO TABLE SALARIATI; RENAME TABLE SALARIAT WITH TABLE SALARIATI;

Page 65: SOLUTII - Baze de Date - Adunate

20. Care ste comanda corecta care afiseaza codul departamentelor pentru care salariul minim depaseste 5000$? SELECT cod_departament FROM salariat WHERE MIN(salariu)>5000 GROUP BY cod_departament; SELECT cod_departament FROM salariat GROUP BY cod_departament HAVING MIN(salariu)>5000; SELECT cod_departament FROM salariat GROUP BY cod_departament MIN(salariu)>5000;

Page 66: SOLUTII - Baze de Date - Adunate

SGBD 2010

1. Care este varianta corecta pentru declararea urmatoarelor variabile?

a. v_valoare NUMBER(15) NOT NULL := 0; v_data_achizitie DATE DEFAULT SYSDATE; c_valoare CONSTANT NUMBER:=1000; v_cod_oper opere%TYPE;

b. v_valoare NUMBER(15) NOT NULL; v_data_achizitie DATE DEFAULT SYSDATE; c_valoare CONSTANT NUMBER; v_cod opera opere.cod_opera%TYPE;

c v_valoare NUMBER(15) NOT NULL := 0; v_data_achizitie DATE DEFAULT SYSDATE; c_valoare CONSTANT NUMBER:= 1000; v_ cod_opera opere.cod_opera%TYPE;

2. Care din urmatoarele declaratii de valabilitate este corecta?

a. v_id_student NUMBER(5); v_nume_student VARCHAR2(35) NOT NUL:=Ionescu; v_prenume_student CHAR(20); v_data DATE DEFAULT SYSDATE;

b. v_id_student NUMBER(5); v_nume_student VARCHAR2(35) NOT NUL:=’Ionescu’; v_prenume_student studenti.prenume%TYPE; v_data DATE:=SYSDATE+1;

c. v_id_student NUMBER(2):=150; v_nume_student studenti.nume%ROWTYPE:=’Ionescu’; v_prenume_student CHAR(20); v_data DATE:=SYSDATE+1;

3. Se da urmatorul bloc PL/SQL:

DECLARE carte VARCHAR2(20); autor VARCHAR(15) DEFAULT 'Eminescu' ; BEGIN DBMS_OUTPUT.PUT_LINE(carte||' '||autor); END; Care din urmatoarele afirmatii este corecta? a. Se va returna o eroare, deoarece variabila carte este utilizata nefiind initializata. b. Se va returna o eroare, deoarece nu se poate utiliza clauza DEFAULT pentru a initializa o

variabila de tip VARCHAR2. c. Blocul se executa fara erori si afiseaza 'null Eminescu'. d. Blocul se executa fara erori si afiseaza 'Eminescu'

Page 67: SOLUTII - Baze de Date - Adunate

4. Se da urmatorul bloc PL/SQL: DECLARE nume VARCHAR2(15); v_nr INTEGER; BEGIN SELECT LENGTH(nume) INTO v_nr FROM dual; DBMS_OUTPUT.PUT_LINE('Sirul are '||v_nr||'caractere'); END; Care din urmatoarele afirmatii este adevarata? a. Va fi generata o eroare deoarece variabila nume este utilizata nefiind initializata. b. Blocul se executa fara erori si afisaza 'Sirul are caractere'). c. Blocul se executa fara erori si afisaza 'Sirul are 0 caractere'). d. Va fi generata o eroare deoarece variabila v_nr este utilizata nefiind initializata 5. Se da urmatorul bloc PL/SQL DECLARE v_salariu NUMBER(8):=&p_salariu; v_bonus NUMBER(8); v_salariu_anual NUMBER(8); BEGIN v_salariu_anual:=v_salariu*12; IF v_salariu_anual>=20000 THEN v_bonus:=0.01 * v_salariu_anual; ELSIF v_salariu_anual >10000 AND v_salariu_anual <20000 THEN v_bonus:=0.02* v_salariu_anual; ELSE v_bonus:=100; END IF; DBMS_OUTPUT.PUT_LINE(Bonusul este'|| v_bonus); END; Care din urmatoarele afirmatii nu este corecta? a. Blocul genereaza o eroare, deoarece variabila p_salariu nu este initializata. b. Variabila p_salariu reprezinta o variabila de substitutie, a carei valoare poate fi data prin

utilizarea comenzii DEFINE din SQL*PLUS. c. Blocul se executa fara erori, asteptandu-se introducerea de la tastatura a unei valori pentru

variabila p_salariu,daca nu a fost deja data o valoare pentru aceasta. d. Daca valoarea variabilei v-salariu este 500, atunci blocul se executa fara erori si afiseaza

textul 'Bonusul este 100'.

Page 68: SOLUTII - Baze de Date - Adunate

6. Se da urmatorul bloc PL/SQL: BEGIN SELECT nume_job INTO :rezultat FROM angajat a, joburi b WHERE a.id_job=b.id_job AND id_angajat=100; DBMS_OUTPUT_LINE('Numele jobului este'|| :rezultat); END; Care din urmatoarele afirmatii este adevarata? a. Blocul se executa fara erori si afisaza numele jobului angajatului avand codul 100. b. Executia blocului se incheie cu o eroare, deoarece variabila de legatura rezultat nu este

declarata in afara blocului PL/SQL. c. Executia blocului se incheie cu o eroare, deoarece utilizarea clauzei INTO a comenzii

SELECT nu este corecta. d. Valoarea variabilei de legatura rezultat nu poate fi afisata decat din interiorul blocului

PL/SQL. 7. Se da urmatorul bloc PL/SQL: DECLARE v_cod_sal angajati.id_angajat%TYPE:= 100; v_cod_dept angajati.id_departament%TYPE:= 10; v_procent NUMBER(8):=20; BEGIN UPDATE angajati SET id_departament = v_cod_dept, salariu=salariu + (salariu* v_procent/100) WHERE id_angajat = v_cod_sal; IF SQL%ROWCOUNT = 0 THEN DBMS_OUTPUT.PUT_LINE (‘Nu exista un angajat cu acest cod’); ELSE COMMIT; DBMS_OUTPUT.PUT_LINE (‘Actualizare realizata’); END IF; END; Care dintre urmatoarele afirmatii este adevarata?

a. Executia blocului se incheie cu o eroare, deoarece comanda clauza SET a comenzii UPDATE este utilizata gresit.

b. Executia blocului se incheie cu o eroare, deoarece comanda COMMIT nu poate fi utilizata intr-un bloc PL/SQL.

c. Executia blocului se incheie cu o eroare, deoarece metoda ROWCOUNT este utilizata pentru un cursor nedeclarat.

d. Blocul se va executa fara erori si afiseaza mesajul ‘Nu exista un angajat cu acest cod’ daca angajatul avand codul 100 nu exista in tabelul angajati sau mesajul ‘Actualizare realizata’ in caz contrar.

Page 69: SOLUTII - Baze de Date - Adunate

8. Variabila g_mesaj declarata ca mai jos este: VARIABLE g_mesaj VARCHAR2 (50) BEGIN :g_mesaj := ‘Invat PL/SQL; END; a. Variabila de substitutie. b. De tip record. c. Variabila de legatura. d. De tip varray. 9. Care este varianta corecta pentru afisarea variabilei v_mesaj ? a. VARIABLE v_mesaj VARCHAR2 (50)

BEGIN :v_mesaj := ‘Invat PL/SQL’; PRINT v_mesaj; END; /

b. VARIABLE v_mesaj VARCHAR2 (30)

BEGIN :v_mesaj := ‘Invat PL/SQL’; END; /

c. VARIABLE v_mesaj VARCHAR2 (50)

BEGIN :v_mesaj := ‘Invat PL/SQL’; DBMS_OUTPUT.PUT_LINE ( v_mesaj); END; /

10. Blocul urmator afiseaza:

DECLARE v_x NUMBER(9,2):=10; v_y NUMBER(9,2); v_message VARCHAR2(20); BEGIN

v_y:= NULL; IF v_x !=v_y THEN v_message := ‘ NOT EQUAL’; ELSE v_message := ‘EQUAL’; END IF; DBMS_OUTPUT.PUT_LINE(v_message); END; a. NOT EQUAL b. EROARE c. EQUAL d. NIMIC

Page 70: SOLUTII - Baze de Date - Adunate

11. Pentru ca urmatorul bloc PL/SQL sa fie corect trebuie adaugat la linia 8 urmatorul cod: SQL > DECLARE 2 TYPE ang_record_type IS RECORD ( 3 nume VARCHAR2(20), 4 departament NUMBER); 5 ang_record ang_record_type; 6 BEGIN 7 SELECT nume, id_departament 8 9 FROM angajati WHERE id_angajat = 100; 11 DBMS_OUTPUT.PUT_LINE (‘Nume’ || ang_record.nume ||’ Departament ‘ || 13 ang_record.departament); 14 END; a. INTO ang_record_type%type b. INTO ang_record_type%rowtype c. INTO ang_record_type d. INTO ang_record 12. Pentru ca urmatorul bloc PL/SQL sa fie corect si sa afiseze codul, salariatul si jobul angajatului cu codul 100, trebuie adaugat la linia 10 urmatorul cod: SQL> DECLARE 2 TYPE type_ang IS RECORD ( 3 ang_cod angajati.id_angajat%TYPE, 4 sal angajati.salariu%TYPE, 5 job angajati.id_job%TYPE); 6 v_ang type_ang; 7 BEGIN 8 DELETE FROM angajati 9 WHERE id_angajat=100 10 11 INTO v_ang; 12 DBMS_OUTPUT.PUT_LINE (‘ Angajatul cu codul :’|| v_ang.ang_cod || 13 ‘ si jobul ‘ || v_ang.job || ‘ are salariul ‘ || v_ang.sal); 14 END; a. RETURNING angajati%rowtype b. RETURNING id_angajat, RETURNING salariu, RETURNING id_job c. RETURNING id_angajat, salariu, id_job d. RETURNING v_ang

Page 71: SOLUTII - Baze de Date - Adunate

13. Pentru ca urmatorul bloc PL/SQL sa fie corect trebuie adaugat la linia 6 urmatorul cod:

1 DECLARE 2 TYPE typetablou IS TABLE OF NUMBER; 3 tablou typetablou:= typetablou(); 4 BEGIN 5 FOR i IN 1..10 LOOP 6 7 tablou(i) :=i; 8 END LOOP; 9 END;

a. tablou.EXTEND; b. tablou:= typetablou(); c. tablou(i):= typetablou(); d. tablou(i).NEXT; 14. Care dintre urmatoarele blocuri se executa cu erori? a. declare

alfa interval year to month; begin alfa :=interval ‘2 - 5’ year to month; DBMS_OUTPUT.PUT_LINE(‘alfa = ‘|| alfa); end;

b. declare alfa interval year to month; begin alfa :=interval ‘8’ month; DBMS_OUTPUT.PUT_LINE(‘alfa = ‘|| alfa); end;

c. declare alfa interval year to month; begin alfa := ‘20 - 10’; DBMS_OUTPUT.PUT_LINE(‘alfa = ‘|| alfa); end;

d. declare alfa interval month; begin alfa :=interval ‘8’ month; DBMS_OUTPUT.PUT_LINE(‘alfa = ‘|| alfa); end;

Page 72: SOLUTII - Baze de Date - Adunate

15. Ce comanda SQL*Plus ar putea sa preceada blocul de mai jos pentru ca in acesta sa se utilizeze valoarea data variabilei sem?

DECLARE v_sem CHAR(2):=UPPER(‘&sem’); BEGIN CASE v_sem

WHEN ‘I’ THEN DBMS_OUTPUT.PUT_LINE(‘SEMESTRUL I’); WHEN ‘II’ THEN DBMS_OUTPUT.PUT_LINE(‘SEMESTRUL II’); ELSE DBMS_OUTPUT.PUT_LINE(‘este o eroare!’); END CASE; END; a. ACCEPT sem PROMPT ‘sem=’ b. VARIABLE sem=li c. DEFINE sem d. TYPE SEM=i 16. Sa se introduca in tabelul testare(cod NUMBER(2)) 5 inregistrari, avand codurile egale cu 1, 2, 3, 4 respectiv 5. Care din urmatoarele variante nu executa acest deziderat?

a. DECLARE

v_contor NUMBER(2) := 1; BEGIN LOOP INSERT INTO testare VALUES (v_contor); v_contor :=v_contor + 1; EXIT WHEN v_contor > 5; END LOOP; END;

b. DECLARE v_contor NUMBER(2) := 1; BEGIN WHILE v_contor < 6 LOOP INSERT INTO testare VALUES (v_contor); v_contor :=v_contor + 1; END LOOP; END;

c. DECLARE v_contor NUMBER(2) := 1; BEGIN FOR i IN 1…5 LOOP INSERT INTO testare VALUES (v_contor); END LOOP; END;

d. BEGIN FOR i IN 1…5 LOOP INSERT INTO testare VALUES (i); END LOOP; END;

Page 73: SOLUTII - Baze de Date - Adunate

17. Se da urmatorul bloc PL/SQL DECLARE TYPE tabimb IS TABLE OF VARCHAR2(50); tab1 tabimb; tab2 tabimb:= tabimb (); BEGIN IF tab1 IS NULL THEN

DBMS_OUTPUT.PUT_LINE(‘tab1 este NULL’); ELSE DBMS_OUTPUT.PUT_LINE(‘tab1 este NOT NULL’); END IF;

IF tab2 IS NULL THEN DBMS_OUTPUT.PUT_LINE(‘tab2 este NULL’); ELSE DBMS_OUTPUT.PUT_LINE(‘tab2 este NOT NULL’); END IF; END; In urma executiei acestui bloc se obtine urmatorul rezultat: a. tab1 este NOT NULL

tab2 este NOT NULL b. tab1 este NULL

tab2 este NOT NULL c. EROARE d. tab1 este NULL

tab2 este NULL 18. Se da urmatorul bloc PL/SQL DECLARE TYPE tablou_numar IS TABLE OF NUMBER INDEX BY PLS_INTEGER; v_tablou tablou_numar; BEGIN FOR i IN 1...10 LOOP v_tablour(i) := i*i*i; END LOOP; FOR i IN v_tablou.FIRST..v_tablou.LAST LOOP v_tablour(i) := NULL; END LOOP; DBMS_OUTPUT.PUT_LINE(‘tabloul are ‘ || v_tablou.COUNT || ‘elemente’); v_tablou.delete; DBMS_OUTPUT.PUT_LINE(‘tabloul are ‘ || v_tablou.COUNT || ‘elemente’); END; In urma executiei blocului se obtine urmatorul rezultat: a. tabloul are 10 elemente

tabloul are 10 elemente b. Eroare c. tabloul are 10 elemente

tabloul are 0 elemente d. tabloul are 0 elemente

tabloul are 0 elemente

Page 74: SOLUTII - Baze de Date - Adunate

19. Care este varianta corecta pentru a defini un tablou imbricat de numere care are ca elemente primele 10 numere naturale?

a. DECLARE

TYPE tablou IS TABLE OF NUMBER; tab tablou:= tablou(); BEGIN FOR i IN 1…10 LOOP tab.NEXT(i) tab(i) := i; END LOOP; END;

b. DECLARE TYPE tablou IS TABLE OF NUMBER; tab tablou:= tablou(); BEGIN FOR i IN 1…10 LOOP tab.EXTEND; tab(i) := i; END LOOP; END;

c. DECLARE TYPE tablou IS TABLE OF NUMBER; tab tablou:= tablou(); BEGIN FOR i IN 1…10 LOOP tab(i) := tab(i) + i; END LOOP; END;

d. DECLARE TYPE tablou IS TABLE OF NUMBER; tab tablou:= tablou(); BEGIN FOR i IN 1…10 LOOP tab(i) := i; END LOOP; END;

20. Care este varianta de bloc PL/SQL corecta pentru a mentine intr-un vector codurile angajatilor care au salariul mai mic decat 20000 si lucreaza in departamentul 90? a. DECLARE

TYPE t_id IS VARRAY(100) OF angajati.id_angajat%TYPE; v_id t_id :=t_id(); BEGIN SELECT id_angajat INTO v_id FROM angajati WHERE id_departement=90 AND salariu < 20000; END;

b. DECLARE TYPE t_id IS VARRAY(100) OF angajati.id_angajat%TYPE; v_id t_id :=t_id(); BEGIN SELECT id_angajat BULK COLLECT INTO v_id FROM angajati WHERE id_departament=90 AND salariu < 20000; END;

Page 75: SOLUTII - Baze de Date - Adunate

c. DECLARE TYPE t_id IS VARRAY(100) OF angajati.id_angajat%TYPE; v_id t_id :=t_id; BEGIN SELECT id_angajat BULK COLLECT INTO t_id FROM angajati WHERE id_departement=90 AND salariu < 20000; END;

21. Care este varianta corecta de cod PL/SQL care sterge din tabelul joburi, joburile pentru care salariul minim este 4000 sau 8200, daca aceste valori sunt mentinute intr-un vector? a. DECLARE

TYPE min_sal IS VARRAY(20) OF NUMBER; v_min_sal min_sal:=min_sal(4000,8200); BEGIN FORALL i IN v_min_sal.FIRST..v_min_sal. LAST DELETE FROM joburi WHERE salariu_min=v_min_sal(i); END;

b. DECLARE TYPE min_sal IS VARRAY(20) OF NUMBER; v_min_sal min_sal:=min_sal(4000,8200); BEGIN FOR i IN v_min_sal.FIRST..v_min_sal. LAST DELETE FROM joburi WHERE salariu_min=v_min_sal(i); END;

c. DECLARE TYPE min_sal IS VARRAY(20) OF NUMBER; v_min_sal min_sal; BEGIN FORALL i IN v_min_sal.FIRST..v_min_sal. LAST DELETE FROM joburi WHERE salariu_min=v_min_sal(i); END;

22. Care este varianta corecta prin care se adauga in tabelul angajati un nou camp numit telefon de tip tablou imbricat, pt care se vor stoca pt fiecare salariat numerele sale de telefon, si apoi se insereaza o linie noua in tabel? a. CREATE TYPE lista AS TABLE OF VARCHAR2(20);

ALTER TABLE angajati ADD (telefon lista) NESTED TABLE telefon STORE AS tabel_tel; INSERT INTO angajati VALUES(200,’xxx’,4000,40000,lista(0214567898,0214567899));

b. CREATE TYPE lista AS TABLE OF VARCHAR2(20); ALTER TABLE angajati ADD telefon lista; INSERT INTO angajati VALUES(200,’xxx’,4000,40000,lista(0214567898,0214567899));

c. CREATE TYPE lista AS TABLE OF VARCHAR2(20); ALTER TABLE angajati ADD (telefon lista) NESTED TABLE telefon STORE AS tabel_tel; INSERT INTO angajati telefon VALUES((lista(0214567897,0214567898,0214567899));

Page 76: SOLUTII - Baze de Date - Adunate

23. Care este varianta corecta prin care se incarca date dintr-un cursor intr-o colectie? RASPUNSUL CORECT ESTE d. NU ESTE PRINS IN GRILA… a. DECLARE

TYPE tip_job IS TABLE OF joburi.nume_job%TYPE; v_nume tip_job; CURSOR c_joburi IS SELECT nume_job FROM joburi; BEGIN OPEN c_joburi; SELECT c_joburi INTO v_nume; CLOSE c_joburi; END;

b. DECLARE TYPE tip_job IS TABLE OF joburi.nume_job%TYPE; v_nume tip_job; CURSOR c_joburi IS SELECT nume_job FROM joburi; BEGIN OPEN c_joburi; FETCH c_joburi BULK COLLECT INTO v_nume; CLOSE c_joburi; END;

c. DECLARE TYPE tip_job IS TABLE OF joburi.nume_job%TYPE; v_nume tip_job; CURSOR c_joburi IS SELECT nume_job FROM joburi; BEGIN OPEN c_joburi; FETCH c_joburi INTO v_nume; CLOSE c_joburi; END;

24. Care este varianta incorecta prin care se obtin numele si salariul angajatilor care au salariul mai mic decat 2500 si nu lucreaza in departamentul avand codul 80? a. DECLARE

v_nume angajati.nume%TYPE; v_sal angajati.salariu%TYPE; CURSOR c(var_sal NUMBER, var_dept NUMBER) IS SELECT nume, salariu FROM angajati WHERE salariu<var_sal AND id_departament<>var_dept; BEGIN OPEN c(2500,80); LOOP FETCH c INTO v_nume, v_sal; EXIT WHEN c%NOTFOUND; DBMS_OUTPUT.PUT_LINE(‘Salariatul ’||v_nume||’ are salariul ‘|| v_sal); END LOOP; CLOSE c; END;

Page 77: SOLUTII - Baze de Date - Adunate

b. DECLARE v_sal :=2500; v_dept := 80; BEGIN FOR ind IN (SELECT nume, salariu FROM angajati WHERE salariu<var_sal AND id_departament<>var_dept) LOOP DBMS_OUTPUT.PUT_LINE(‘Salariatul ’||ind_nume||’ are salariul ‘|| ind_salariu); END LOOP; END;

c. DECLARE CURSOR c(var_sal NUMBER, var_dept NUMBER) IS SELECT nume, salariu FROM angajati WHERE salariu<var_sal AND id_departament<>var_dept; BEGIN FOR ind IN c(2500,80) LOOP DBMS_OUTPUT.PUT_LINE(‘Salariatul ’||ind_nume||’ are salariul ‘|| ind_salariu); END LOOP; END;

25. Care este varianta corecta prin care se afiseaza numele si prenumele primelor 5 persoane angajate in luna martie in anul 1997? a. DECLARE

v_nume angajati.nume%TYPE; v_prenume angajati.prenume%TYPE; CURSOR c IS SELECT nume, prenume FROM angajati WHERE TO_CHAR(data_angajarii, MM-YYYY)=03-1997 ORDER BY data_angajarii ASC; BEGIN OPEN c; LOOP FETCH c INTO v_nume, v_prenume; EXIT WHEN c%ROWCOUNT>5; DBMS_OUTPUT.PUT_LINE(v_nume||’ ‘|| v_prenume); END LOOP; CLOSE c; END;

b. DECLARE v_nume angajati.nume%TYPE; v_prenume angajati.prenume%TYPE; CURSOR c IS SELECT nume, prenume FROM angajati WHERE TO_CHAR(data_angajarii, ‘MM-YYYY’)=’03-1997’ ORDER BY data_angajarii; BEGIN OPEN c; LOOP FETCH c INTO v_nume, v_prenume; EXIT WHEN c%ROWCOUNT>5 OR c%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_nume||’ ‘|| v_prenume); END LOOP; CLOSE c; END;

Page 78: SOLUTII - Baze de Date - Adunate

c. DECLARE v_nume angajati.nume%TYPE; v_prenume angajati.prenume%TYPE; CURSOR c IS SELECT nume, prenume FROM angajati WHERE TO_CHAR(data_angajarii, ‘MM-YYYY’)=’03-1997’ ORDER BY data_angajarii DESC; BEGIN OPEN c; LOOP FETCH c INTO v_nume, v_prenume; EXIT WHEN c%ROWCOUNT<5 AND c%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_nume||’ ‘|| v_prenume); END LOOP; END;

26. Se da urmatorul bloc PL/SQL: DECLARE v_nume angajati.nume%TYPE; v_data angajati.data_angajarii%TYPE; CURSOR c IS SELECT nume, data_angajarii FROM angajati; BEGIN OPEN c; LOOP INSERT INTO informatii (nume_angajat, data_angajarii) VALUES (v_nume, v_data); EXIT WHEN c%NOTFOUND; END LOOP; COMMIT; END; Care dintre urmatoarele afirmatii este adevarata? a. Blocul se executa fara erori, introducandu-se in tabelul informatii o linie cu toate valorile

null , respectiv toate liniile din tabelul angajati b. Executia blocului se incheie cu o eroare, deoarece cursorul c nu este inchis dupa ce este

utilizat c. Executia blocului se incheie cu o eroare, deoarece utilizarea comenzii COMMIT nu este

permisa in interiorul unui bloc PL/SQL d. Blocul se executa fara erori, introducandu-se in tabelul informatii toate liniile din tabelul

angajati 27. Parametrii unei functii pot fi: a. De intrare (IN), de intrare/iesire (IN/OUT) sau de iesire (OUT) b. Numai de intrare (IN) c. Numai de iesire (OUT) d. De intrare (IN) sau de iesire (OUT)

Page 79: SOLUTII - Baze de Date - Adunate

28. Care dintre urmatoarele variante apeleaza corect functia F_TEST care are un singur parametru numeric? a. SELECT F_TEST (80)

FROM DUAL ; b. DECLARE

nr NUMBER; BEGIN Nr:=F_TEST(); END;

c. VARIABLE nr NUMBER CALL F_TEST () INTO:nr; PRINT nr

d. VARIABLE nr NUMBER CALL FUNCTION F_TEST (80) INTO:nr; PRINT nr

29. Care dintre urmatoarele vizualizari poate fi folosita in urmatoarea comanda pentru a vizualiza codul complet al subprogramului P1: SELECT TEXT FROM …. WHERE NAME = UPPER(’P1’); a. USER_OBJECTS b. USER_ERRORS c. USER_FUNCTIONS d. USER_SOURCE 30. Ce trebuie adaugat la linia 9 pentru ca urmatoarea functie sa fie corect creata?

1. CREATE OR REPLACEFUNCTION nr_sal(v_dept NUMBER) 2. RETURN NUMBER IS 3. v_numar NUMBER(3); 4. BEGIN 5. SELECT COUNT(*) 6. INTO v_numar 7. FROM angajati 8. WHERE id_departament=v_dept; 9. ……………………………………………………….. 10. END nr_sal;

a. DBMS_OUTPUT.PUT_LINE(v_numar); b. COMMIT; c. RETURN v_numar; d. nu mai trebuie adaugat nimic.

Page 80: SOLUTII - Baze de Date - Adunate

31. Se da functia de mai jos ,care permite calcularea unui impozit pe salariu de 10%. CREATE FUNCTION impozit(p_value IN NUMBER) RETURN NUMBER IS BEGIN RETURN(p_value*0.1); END impozit; Care este sintaxa corecta pentru a apela aceasta functie? a. SELECT id_angajat, nume, salariu, impozit tax

FROM angajati WHERE id_departament=50;

b. VARIABILE tax:=impozit(salariu) SELECT id_angajat, nume, salariu, tax FROM angajati WHERE id_departament=50;

c. SELECT id_angajat, nume, salariu, impozit(salariu) tax FROM angajati WHERE id_departament=50;

d. DECLARE:tax NUMBER BEGIN :tax:= impozit(salariu);

32. Care tabel/vizualizare poate fi folosit/folosita in urmatoarea comanda pentru a obtine informatii despre procedurile si functiile detinute de utilizatorul curent? SELECT * FROM ….. WHERE OBJECT_TYPE IN (‘PROCEDURE’ , ‘FUNCTION’); a. USER_SOURCE b. DUAL c. USER_ERRORS d. USER_OBJECTS 33. Codul sursa de mai jos defineste un pachet cu ajutorul caruia, utilizand un subprogram functie si un cursor, se poate obtine salariul minim inregistrat pentru angajati si lista angajatilor care au salariul mai mare sau egal decat acel minim +1000. CREATE OR REPLACE PACKAGE pachet_min_sal AS CURSOR c_ang(nr NUMBER) RETURN angajati % ROWTYPE; FUNCTION f_min RETURN NUMBER ; END pachet_min_sal; CREATE OR REPLACE PACKAGE BODY pachet_min_sal AS CURSOR c_ang(nr NUMBER) RETURN angajati % ROWTYPE IS SELECT * FROM angajati WHERE salariu >nr+1000; FUNCTION f_min RETURN NUMBER IS minim NUMBER ; BEGIN SELECT Min(salariu) INTO minim FROM angajati; RETURN minim; END f_min; END pachet_min_sal;

Page 81: SOLUTII - Baze de Date - Adunate

Care este varianta corecta de apelare pentru a obtine lista dorita? a. DECLARE

val_min NUMBER ; BEGIN val_min:=pachet_min_sal.f_min; DBMS_OUTPUT.PUT_LINE(‘Salariul minim ’ || ’ ‘ || val_min); FORv_cursor IN pachet_min_sal .c_ang(val_min)LOOP DBMS_OUTPUT.PUT_LINE(v_cursor.nume||’ ‘|| v_cursor.salariu); END LOOP; END;

b. DECLARE val_min NUMBER ; BEGIN DBMS_OUTPUT.PUT_LINE(‘Salariul minim ’ || ’ ‘ || val_min); FORv_cursor IN pachet_min_sal .c_ang(val_min)LOOP DBMS_OUTPUT.PUT_LINE(v_cursor.nume||’ ‘|| v_cursor.salariu); END LOOP; END;

c. DECLARE val_min NUMBER ; BEGIN val_min:=pachet_min_sal.f_min; DBMS_OUTPUT.PUT_LINE(‘Salariul minim ’ || ’ ‘ || val_min); FORv_cursor IN pachet_min_sal .c_ang(val_min) DBMS_OUTPUT.PUT_LINE(v_cursor.nume||’ ‘|| v_cursor.salariu); END;

34. Care este varianta corecta pentru a crea specificatia unui pachet, care defineste un cursor pentru obtinerea datelor si o procedura ce actualizeaza campul id_job al unui angajat cu un anumit cod? a. CREATE OR REPLACE PACKAGE manager_pkg IS

CURSOR joburi_curs IS SELECT id_angajat, id_job FROM angajati; PROCEDURE update_job(p_ang_id IN angajati.id_angajat%TYPE, P_id_job OUT angajati.id_job%TYPE); END update_job; END manager_pkg;

b. CREATE OR REPLACE PACKAGE manager_pkg IS CURSOR joburi_curs IS SELECT id_angajat, id_job FROM angajati; PROCEDURE update_job(p_ang_id IN angajati.id_angajat%TYPE, P_id_job IN angajati.id_job%TYPE); END manager_pkg;

c. CREATE OR REPLACE PACKAGE manager_pkg IS CURSOR joburi_curs IS SELECT id_angajat, id_job FROM angajati; PROCEDURE update_job(p_ang_id IN angajati.id_angajat%TYPE, P_id_job OUT angajati.id_job%TYPE); END manager_pkg;

Page 82: SOLUTII - Baze de Date - Adunate

35. Ce trebuie adaugat la linia 11 pentru ca in urmatorul bloc PL/SQL sa se foloseasca corect cursorul?

1 DECLARE 2 CURSOR c_ang IS 3 SELECT * 4 FROM angajati 5 WHERE TO_CHAR(data_angajarii,’YYYY’)=2000 6 FOR UPDATE OF salariu NOWAIT; 7 BEGIN 8 FOR v_c_ang IN c_ang LOOP 9 UPDATE angajati 10 SET salariu=salariu+1000 11 ……………………….. 12 END LOOP; 13 END;

a. END UPDATE; b. WHERE CURRENT OF c_ang; c. FOR EACH ROW d. EXIT WHEN c_ang%NOTFOUND; 36. In blocul PL/SQL de mai jos VARIABLE rows_deleted VARCHAR(20) DECLARE v_dep_id angajati.id_departament%TYPE:=80; BEGIN DELETE FROM angajati WERE id_departament=v_dep_id; :rows_deleted:=SQL%ROWCOUNT||’rows deleted’; END; / PRINT rows_deleted apare: a. un cursor explicit b. nu apare nici un cursor c. un cursor implicit d. un ciclu cursor cu subcereri 37. Care dintre urmatoarele afirmatii nu este corecta? a. Un trigger poate fi redenumit utilizand o comanda ALTER TRIGGER. b. Dupa ce este definit, triggerul devine activ si va fi executat ori de cate ori au loc operatiile

declansatoare asociate acestuia. c. Un trigger poate fi recompilat utilizand o comanda ALTER TRIGGER. d. Un trigger la nivel de linie este executat o singura data, indiferent de numarul de linii afectate

de comanda declansatoare.

Page 83: SOLUTII - Baze de Date - Adunate

38. Care dintre urmatoarele afirmatii este corecta? a. Blocul PL/SQL care descrie actiunea unui trigger nu poate contine comanda COMIT. b. Corpul unui trigger nu poate contine comenzi LMD. c. Atunci cand un tabel este sters, triggeri asociati acestuia sunt dezactivati automat, nefiind

eliminati. d. In clauza ON din definitia unui trigger pot fi specificate mai multe tabele sau vizualizari. 39. Se presupune ca asupra tabelului angajati au fost definiti urmatorii 4 triggeri LMD:

- trigger 1 de tip BEFORE INSERT la nivel de comanda; - trigger 2 de tip BEFORE UPDATE la nivel de comanda; - trigger 3 de tip AFTER UPDATE la nivel de linie; - trigger 4 de tip AFTER DELETE la nivel de comanda.

O comanda UPDATE actualizeaza 3 inregistrari din tabelul angajati. In acest caz, de cate ori este executat fiecare trigger (in dreptul numelui triggerului este trecut numar de executii al acestuia)? a. Trigger1 - 1

Trigger2 - 1 Trigger3 - 3 Trigger4 - 1

b. Trigger1 - 0 Trigger2 - 3 Trigger3 - 3 Trigger4 - 0

c. Trigger1 - 0 Trigger2 - 1 Trigger3 - 3

40. Care este varianta corecta care defineste un trigger la nivel de comanda ce determina inserarea in tabelul audit_angajati a unui mesaj corespunzator tipului de comanda LMD executata asupra tabelului angajati? a. CREATE TRIGGER trigger_audit_angajati

AFTER INSERT OR DELETE OR UPDATE ON audit_angajati FOR EACH ROW BEGIN IF INSERTING THEN INSERT INTO audit_angajati (actiune) VALUES (:NEW.INSERT); ELSIF DELETING THEN INSERT INTO audit_angajati (actiune) VALUES (:OLD.DELETE); ELSE INSERT INTO audit_angajati (actiune) VALUES (:NEW.UPDATE’); END IF; END;

Page 84: SOLUTII - Baze de Date - Adunate

b. CREATE TRIGGER trigger_audit_angajati AFTER INSERT OR AFTER DELETE OR AFTER UPDATE ON angajati BEGIN IF INSERTING THEN INSERT INTO audit_angajati (actiune) VALUES (‘Inserare’); ELSIF DELETING THEN INSERT INTO audit_angajati (actiune) VALUES (‘Stergere’); ELSE INSERT INTO audit_angajati (actiune) VALUES (‘Actualizare’); END IF; END;

c. CREATE TRIGGER trigger_audit_angajati AFTER INSERT OR DELETE OR UPDATE ON angajati BEGIN IF INSERTING THEN INSERT INTO audit_angajati (actiune) VALUES (‘Inserare’); ELSIF DELETING THEN INSERT INTO audit_angajati (actiune) VALUES (‘Stergere’); ELSE INSERT INTO audit_angajati (actiune) VALUES (‘Actualizare’); END IF; END;

41. Se defineste un trigger care determina inserarea unei linii in tabelul angajati_log atunci cand salariul unui angajat este marit. Care dintre urmatoarele variante este corecta? a. CREATE TRIGGER trigger_salariu

AFTER UPDATE OF salariu ON angajati FOR EACH ROW BEGIN IF :NEW.salariu>:OLD.salariu THEN INSERT INTO angajati_log (utilizator, data, angajat, salariu_vechi, salariu_nou) VALUES (USER, SYSDATE, :OLD.id_angajat, :OLD.salariu, :NEW.salariu); END IF; END;

b. CREATE TRIGGER trigger_salariu AFTER UPDATE OF salariu ON angajati WHEN (:NEW.salariu>:OLD.salariu) BEGIN INSERT INTO angajati_log (utilizator, data, angajat, salariu_vechi, salariu_nou) VALUES (USER, SYSDATE, :OLD.id_angajat, :OLD.salariu, :NEW.salariu); END;

Page 85: SOLUTII - Baze de Date - Adunate

c. CREATE TRIGGER trigger_salariu BEFORE UPDATE OF salariu ON angajati_log FOR EACH ROW BEGIN IF NEW.salariu>OLD.salariu THEN INSERT INTO angajati_log (utilizator, data, angajat, salariu_vechi, salariu_nou) VALUES (USER, SYSDATE, :OLD.id_angajat, :OLD.salariu, :NEW.salariu); END IF; END;

42. Se presupune ca a fost creat tabelul dept(id_depatament, nr_angajati), care mentine pentru fiecare departament numarul de angajati care lucreaza in acesta. Prin comanda urmatoare se defineste vizualizarea view_angajati:

CREATE VIEW view_angajati AS SELECT id_angajat, nume, prenume, id_departament FROM angajati;

Care este varianta corecta prin care se defineste un trigger care va determina incrementarea cu 1 a numarului de angajati din tabelul dept daca in vizualizare este inserata o inregistrare, respective decrementarea cu 1 a numarului de angajati din tabelul dept daca din vizualizare este stearsa o inregistrare? a. CREATE TRIGGER trig_dept

INSTEAD OF INSERT OR DELETE ON view_angajati BEGIN IF INSERTING THEN UPDATE dept SET nr_angajati = nr_angajati +1; ELSE UPDATE dept SET nr_angajati = nr_angajati -1; END IF;END;

b. CREATE TRIGGER trig_dept INSTEAD OF INSERT OR DELETE ON view_angajati FOR EACH ROW BEGIN IF INSERTING THEN UPDATE dept SET nr_angajati = nr_angajati +1; WHERE id_departament = :NEW.id_departament; ELSE UPDATE dept SET nr_angajati = nr_angajati -1; WHERE id_departament = :OLD.id_departament; END IF;END;

c. CREATE TRIGGER trig_dept AFTER INSERT OR DELETE ON view_angajati FOR EACH ROW BEGIN IF INSERTING THEN UPDATE dept SET nr_angajati = nr_angajati +1; WHERE id_departament = :NEW.id_departament; ELSE UPDATE dept SET nr_angajati = nr_angajati -1; WHERE id_departament = :OLD.id_departament; END IF;END;

Page 86: SOLUTII - Baze de Date - Adunate

43. Urmatoarea comanda creaza tabelul audit:

CREATE TABLE audit (actiune VARCHAR2(20), utilizator VARCHAR2(30) DEFAULT USER, data DATE DEFAULT SYSDATE); Apoi, este definit urmatorul trigger: CREATE TRIGGER trig_audit AFTER ALTER ON SCHEMA BEGIN INSERT INTO audit(actiune) VALUES(‘Obiect modificat’); END; Care dintre actiunile urmatoare va determina declansarea triggerului creat si inserarea unei inregistrari in tabelul audit? a. O comanda prin care se adauga o constrangere de cheie primara unui table existent. b. O comanda prin care se modifica valorile unor inregistrari dintr-un tabel. c. O comanda prin care se creaza un tabel. d. O comanda prin care se eliminaun index. 44. Se presupune că într-o sală a unui muzeu pot fi expuse maximum 10 opere de artă. Pentru aceasta se creează următorul trigger: CREATE TRIGGER trigger_opere BEFORE INSERT OR UPDATE OF cod_sala ON opera FOR EACH ROW DECLARE v_max NUMBER := 10; v_nr NUMBER; BEGIN SELECT COUNT(*) INTO v_nr FROM opera WHERE cod_sala =:NEW.cod_sala; IF v_nr + 1>v_max THEN RAISE_APPLICATION_ERROR(-20000,’Prea multe opere de arta); END IF; END; Care dintre urmatoarele variante este corecta? a. Triggerul este creat fara erori la compilare si va functiona corect pentru toate comenzile

LMD utilizate asupra tabelului opera. b. Aceasta conditie poate fi implementata prin adaugarea unei constrangeri de tip CHECK

asupra tabelului opera. c. Triggerul este creat cu erori la compilare d. Triggerul este creat fara erori la compilare, dar in cazul anumitor comenzi LMD asupra

tabelului opera va genera eroarea “table mutating”.

Page 87: SOLUTII - Baze de Date - Adunate

Limbajul de definire a datelor (DDL). CREATE, ALTER, DROPDefinirea tabelelor

1. Creati tabelul salariat_*** având următoarea structură:

Nume Caracteristici Tipcod_ang NOT NULL NUMBER(4)nume VARCHAR2(25)prenume VARCHAR2(25)functia VARCHAR2(20)sef NUMBER(4)data_angajarii Valoare implicită data curentă DATE

varsta NUMBER(2)email CHAR(50)salariu Valoare implicită 0 NUMBER(9,2)

2. Afisati structura tabelului creat anterior.DESCRIBE salariat;

3. Se dau următoarele valori:

COD_ANG

NUME PRENUME FUNCTIA SEF DATA_ANG VARSTA EMAIL SALARIU

1 ..... ..... director null ........ 30 ..... 55002 ..... ..... fuctionar 1 ..... 25 ..... 03 ..... ..... economist 1 ..... 45 ..... 30004 ..... ..... functionar 1 ..... 35 ..... 1000

4. Inserati în tabelul salariat_*** prima înregistrare din tabelul de mai sus fără să precizati lista de coloane în comanda INSERT.INSERT INTO salariat VALUES (1, '.....', '.....', 'director', null ,’' , 30, '.....', 5500 );

5. Inserati a doua înregistrare folosind o listă de coloane din care excludeti data_angajarii si salariul care au valori implicite. Observati apoi rezultatul.

COD_ANG NUME PRENUME FUNCTIA SEF DATA_ANG VARSTA EMAIL SALARIU2 ..... ..... fuctionar 1 ..... 25 ..... 0

INSERT INTO salariat (cod_ang, nume, prenume, functia, sef, varsta, email) VALUES (2, '...', '...', 'functionar', 1, 25, '...' );

6. Inserati înregistrările 3 si 4.INSERT INTO salariat (cod_ang, nume, prenume, functia, sef, varsta, email, salariu) VALUES (3, '...', '...', 'economist', 1, 45, '...', 3000 );

INSERT INTO salariat (cod_ang, nume, prenume, functia, sef, varsta, email, salariu) VALUES (4, '...', '...', 'functionar', 1, 35, '...', 1000 );

1

Page 88: SOLUTII - Baze de Date - Adunate

7. Creati tabelul functionar_*** care să contină functionarii din tabelul salariat_***, având următoarele coloane: codul, numele, salariul anual si data angajării. Verificati cum a fost creat tabelul si ce date contine.

CREATE TABLE functionar AS SELECT cod_ang, nume, prenume, salariu, data_angajariiFROM salariat WHERE functia = 'functionar';DESCRIBE functionar;SELECT * FROM functionar;

8. Adăugati o nouă coloană tabelului salariat_*** care să contină data nasterii.ALTER TABLE salariatADD (datan DATE);

9. Modificati dimensiunea coloanei nume la 30 si pe cea a salariului la 12 cu 3 zecimale.

ALTER TABLE salariatMODIFY (nume VARCHAR2(30), salariu NUMBER(12,3));

10. Modificati tipul coloanei email la VARCHAR2.

ALTER TABLE salariatMODIFY (email VARCHAR2(50));

11. Modificati valoarea implicită a coloanei data_angajarii la data sistemului + o zi.

ALTER TABLE salariatMODIFY (data_angajarii DATE DEFAULT SYSDATE + 1);

12. Eliminati coloana varsta din tabelul salariat_***.

ALTER TABLE salariat DROP COLUMN varsta;

13. Redenumiti tabelul functionar_*** cu funct_***.

RENAME functionar to funct;

14. Recreati tabelul functionar_*** utilizând tabelul funct_***..

CREATE TABLE functionarAS SELECT cod_ang, nume, prenume, salariu, data_angajariiFROM funct;

15. Eliminati tabelul funct_***.

DROP TABLE funct;

16. Stergeti si apoi creati din nou tabelul salariat_*** cu următoarea structură.

NUME TIP CONSTRÂNGEREcod_ang NUMBER(4) Cheie primarănume VARCHAR2(25) NOT NULLprenume VARCHAR2(25)data_nasterii DATE data_nasterii<data_angajariifunctia VARCHAR2(9) NOT NULL

2

Page 89: SOLUTII - Baze de Date - Adunate

sef NUMBER(4) Referă ca si cheie externă cod_ang din acelasi tabel

data_angajarii DATEemail VARCHAR2(20) unicsalariu cod_dept NUMBER(4)

NUMBER(12,3) > 0

cod_dept NUMBER(4) CombinaŃia NUME + PRENUME să fie unică

Observatie: Constrângerile de tip CHECK se pot implementa la nivel de coloană doar dacă nu referă o altă coloană a tabelului.

DROP TABLE salariat;CREATE TABLE salariat (cod_ang NUMBER(4) PRIMARY KEY,nume VARCHAR2(25) NOT NULL,prenume VARCHAR2(25),data_nasterii DATE,functia VARCHAR2(9) NOT NULL,sef NUMBER(4) REFERENCES salariat (cod_ang),data_angajarii DATE DEFAULT SYSDATE,email VARCHAR2(20) UNIQUE,salariu NUMBER(9,2) CHECK (salariu > 0),cod_dep NUMBER(4),CONSTRAINT const_c CHECK (data_angajarii > data_nasterii),CONSTRAINT const_u UNIQUE (nume, prenume, data_nasterii));

17. Stergeti tabelul salariat_***, iar apoi recreati-l implementând toate constrângerile la nivel de tabel.Observatie: Constrângerea de tip NOT NULL se poate declara doar la nivel de coloană.

DROP TABLE salariat;CREATE TABLE salariat (cod_ang NUMBER(4),nume VARCHAR2(25) NOT NULL,prenume VARCHAR2(25),data_nasterii DATE,functia VARCHAR2(9) NOT NULL,sef NUMBER(4),data_angajarii DATE DEFAULT SYSDATE,email VARCHAR2(20),salariu NUMBER(9,2),cod_dep NUMBER(4),CONSTRAINT ccp PRIMARY KEY (cod_ang),CONSTRAINT cce FOREIGN KEY (sef) REFERENCES salariat (cod_ang),CONSTRAINT cu1 UNIQUE (email),CONSTRAINT cc1 CHECK (data_angajarii > data_nasterii),CONSTRAINT cc2 CHECK (salariu > 0),CONSTRAINT cu2 UNIQUE (nume,prenume,data_nasterii));

18. Creati tabelul departament_*** care să aibă următoarea structură.NUME TIP CONSTRÂNGERICOD_DEP NUMBER(4) Cheie primarăNUME VARCHAR2(20) Not nullORAS VARCHAR2(25)

CREATE TABLE departament (3

Page 90: SOLUTII - Baze de Date - Adunate

cod_dep NUMBER(4) PRIMARY KEY,nume VARCHAR2(20) NOT NULL,oras VARCHAR2(25));

Adăugarea constrângerilor ulterior creării tabelului, eliminarea, activarea sau dezactivarea constrângerilor (ALTER TABLE)- adaugă constrângeriALTER TABLE nume_tabelADD [CONSTRAINT nume_constr] tip_constr (coloana);- elimină constrângeriALTER TABLE nume_tabelDROP [CONSTRAINT nume_constr] tip_constr (coloana);- activare/dezactivare constrângereALTER TABLE nume_tabelMODIFY CONSTRAINT nume_constr ENABLE|DISABLE;sauALTER TABLE nume_tabelENABLE| DISABLE nume_constr;

19. Inserati o nouă înregistrare în salariat_*** de forma:

cod nume prenume data_n functia sef data_ang email salariu cod_dep2 N2 P2 11-JUN-1960 economist 1 Sysdate E2 2000 10

INSERT INTO salariat VALUES ( 2, 'N2' , 'P2' , '11-06-1960' , 'ECONOMIST', 1, SYSDATE, 'E2', 2000, 10 );/*EROARE la linia 1: ORA-02291: constrângere de integritate (SCOTT.CCE) violata - cheia parinte negasita

Ce observati? Introduceti înregistrarea dar specificând valoarea NULL pentru coloana sef.

INSERT INTO salariat VALUES ( 2, 'N2' , 'P2' , '11-06-1960' , 'ECONOMIST', Null, SYSDATE, 'E2', 2000, 10 ); /*1 înregistrare creatã.*/

20. Încercati să adăugati o constrângere de cheie externă pe cod_dep din salariat_***. Ce observati?ALTER TABLE salariatADD CONSTRAINT cce2 FOREIGN KEY (cod_dep) REFERENCES departament (cod_dep);/*EROARE la linia 2: ORA-02298: (SCOTT.CCE2) nu a putut fi validata - nu au fost gasite cheile parinte

21. Inserati o nouă înregistrare în departament_***. Apoi adăugati constrângerea de cheie externă definită anterior.

cod_dep nume loc10 Economic Bucuresti

INSERT INTO departament VALUES (10, 'Ecomomic', 'Bucuresti' );

Adaugam constrangerea de la ex.20:ALTER TABLE salariatADD CONSTRAINT cce2 FOREIGN KEY (cod_dep) REFERENCES departament (cod_dep);

22. Inserati noi înregistrări în salariat_***, respectiv în departament_***. Care trebuie să fie ordinea de inserare?

co num prenume data_n functi sef data_an emai salari cod_dep

4

Page 91: SOLUTII - Baze de Date - Adunate

d e a g l u3 N3 P3 11-

JUN-1967

jurist 2 Sysdate E3 2500 20

cod_dep nume loc

20 Juridic Constanta

INSERT INTO departament VALUES (20, 'Juridic', 'Constanta' );INSERT INTO salariat VALUES (3, ’N3’, ’P3 ’, ’11-06-1967’, ’JURIST ’, 2, ’’, ’E3’, 2500, 20 );

23. Stergeti departamentul 20 din tabelul departament_***. Ce observati?DELETE FROM departamentWHERE cod_dep=20;/*EROARE la linia 1: ORA-02292: constrângerea de integritate (SCOTT.CCE2) violata – gasita înregistrarea copil

24. Stergeti constrângerea cce2_***. Recreati această constrângere adăugând optiunea ON DELETE CASCADE.ALTER TABLE salariat DROP CONSTRAINT cce2;ALTER TABLE salariatADD CONSTRAINT cce2 FOREIGN KEY (cod_dep) REFERENCES departament (cod_dep) ON DELETE CASCADE;

25. Stergeti departamentul 20 din tabelul departament_***. Ce observati în tabelul salariat_***? Anulati modificările.DELETE FROM departamentWHERE cod_dep=20;ROLLBACK;

26. Stergeti constrângerea cce2_***. Recreati această constrângere adăugând optiunea ON DELETE SET NULL.ALTER TABLE salariat DROP CONSTRAINT cce2;ALTER TABLE salariatADD CONSTRAINT cce2 FOREIGN KEY (cod_dep) REFERENCES departament (cod_dep) ON DELETE SET NULL;

27. Încercati să stergeti departamentul 10 din tabelul departament_***. Ce observati?DELETE FROM departament WHERE cod_dep=10;/*1 înregistrare stearsã.

Verificam continutul tabelului departamentSELECT * FROM departament;

Consultarea dictionarului datelorInformatii despre tabelele create se găsesc în vizualizările :· USER_TABLES – informatii complete despre tabelele utilizatorului curent.· ALL_TABLES – informatii complete despre tabelele tuturor utilizatorilor.

5

Page 92: SOLUTII - Baze de Date - Adunate

· COLS – informatii despre coloane.· TAB – informatii de bază despre tabelele existente în schema utilizatorului curent.Informatii despre constrângeri găsim în :· USER_CONSTRAINTS – informatii despre constrângerile definite de utilizatorul curent;· ALL_CONSTRAINTS – informatii despre cosntrângerile definite de toti

Definirea vizualizărilor

Sintaxa simplificată a comenzii CREATE VIEW este:

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW nume_view [(alias, alias, ..)]AS subcerere[WITH CHECK OPTION [CONSTRAINT nume_constr]][WITH READ ONLY [CONSTRAINT nume_constr]];

- FORCE permite crearea vizualizarea înainte de a defini tabelele de bază;- subcererea poate fi oricât de complexă dar nu poate conŃine clauza ORDER BY;- WITH CHECK OPTION permite inserarea si modificarea prin intermediul vizualizării numai a liniilor ce sunt accesibile vizualizării; dacă lipseste numele constrângerii atunci sistemul asociază un nume implicit de tip SYS_Cn acestei constrângeri;- WITH READ ONLY asigură că prin intermediul vizualizării nu se pot executa operatii LMD.Eliminarea unei vizualizări se face prin comanda DROP VIEW :DROP VIEW nume_viz;

1. Să se creeze vizualizarea v_emp_*** care să contină codul si numele salariatilor din tabelul emp_***. Să se afiseze continutul acesteia. Să se insereze o nouă înregistrare în această vizualizare. Ce observati? Să se steargă vizualizarea v_emp_***.

Se creaza tabelul emp

CREATE TABLE emp (employee_id NUMBER(4) PRIMARY KEY,last_name VARCHAR2(64),email VARCHAR2(64),hire_date DATE DEFAULT SYSDATE,salary NUMBER(8,2) DEFAULT 1000,job_id VARCHAR2(10));

Se creaza vizualizarea v_emp

CREATE VIEW v_emp (cod, nume)AS SELECT employee_id, last_nameFROM emp;

Se afiseaza continutul vizualizarii

select * from v_emp;/*nici o înregistrare selectatã

Inseram o noua inregistrare

INSERT INTO v_empVALUES (400,’N1’);

Se sterge vizualizarea v_emp

6

Page 93: SOLUTII - Baze de Date - Adunate

DROP VIEW v_emp;

2. Să se creeze vizualizarea v_emp_*** care să contină codul, numele, emailul, data angajării, salariul si codul jobului salariatilor din tabelul emp_***. Să se analizeze structura si continutul vizualizării. Să se insereze o nouă înregistrare în această vizualizare. Să se verifice că noua înregistrare a fost inserată si în tabelul de bază.

CREATE VIEW v_empASSELECT employee_id, last_name, email, hire_date, salary,job_idFROM emp;DESC v_empSELECT * FROM v_emp;INSERT INTO v_empVALUES (400,’N1’,’E1’,SYSDATE,5000,’SA_REP’);SELECT employee_id, last_name, email, hire_date, salary, job_idFROM emp;/* restrictia unica (SCOTT.SYS_C002806) nu este respectata – linia 5 si 6

3. Să se mărească cu 1000 salariul angajatului având codul 400 din vizualizarea creată anterior. Ce efect va avea această actiune asupra tabelului de bază?

UPDATE v_emp SET salary = salary + 1000 WHERE employee_id = 400;SELECT * FROM v_emp;SELECT * FROM emp;/* salariul angajatului cu codul 400 devine 2000, in rest nu se schimba nimic

4. Să se steargă angajatul având codul 400 din vizualizarea creată anterior. Ce efect va avea această actiune asupra tabelului de bază?

DELETE FROM v_empWHERE employee_id =400;/* tabelul emp nu mai contine nici o inregistrare

5.a) Să se creeze vizualizarea v_emp_dept_*** care să contină employee_id, last_name, hire_date, job_id, department_id din tabelul emp_*** si coloana department_name din tabelul dept_***.

Cream tabelul deptCREATE TABLE dept (department_id NUMBER(2) PRIMARY KEY,department_descriere VARCHAR2(128));

Inseram in tabelul dept coloana department_nameAlter table deptAdd (department_name VARCHAR2(20));

Tabelul emp nu are coloana department_id asa ca trebuie creata pentru a putea continuaALTER TABLE emp ADD department_id NUMBER(2);

Se creaza vizualizareaCREATE VIEW v_emp_dept AS SELECT e.employee_id, e.last_name, e.hire_date, e.job_id, e.department_id, d.department_name

7

Page 94: SOLUTII - Baze de Date - Adunate

FROM emp e, dept dWHERE e.department_id =d.department_id;

5.b) Să încerce inserarea înregistrării (500, 'N2', 'E2',SYSDATE,’SA_REP’,30, 'Administrativ') în vizualizarea creată anterior.

INSERT INTO v_emp_dept VALUES (500, 'N2', 'E2', SYSDATE,'SA-REP',30, 'Administrativ');/*EROARE la linia 1: ORA-00913: prea multe valori

5.c) Care dintre coloanele vizualizării v_emp_dept_*** sunt actualizabile?

SELECT column_name, updatableFROM user_updatable_columnsWHERE UPPER(table_name) = UPPER('v_emp_dept');/* Toate sunt actualizabile in afara de departament_name

5.d) Adăugati tabelului emp_*** constrângerea de cheie externă care referă tabelul dept_***, apoi verificati ce coloane din vizualizarea v_emp_dept_*** sunt actualizabile.

ALTER TABLE emp ADD CONSTRAINT dep FOREIGN KEY (department_id) REFERENCES dept1(department_id);SELECT column_name, updatableFROM user_updatable_columnsWHERE UPPER(table_name) = UPPER('v_emp_dept');/* Toate sunt actualizabile in afara de departament_name

5.e) Recreati vizualizarea v_emp_dept_***, apoi verificati ce coloane sunt actualizabile.

CREATE OR REPLACE VIEW v_emp_dept AS SELECT e.employee_id, e.last_name, e.hire_date, e.job_id, e.department_id, d.departament_name FROM emp e, dept dWHERE e.department_id =d.department_id; SELECT column_name, updatableFROM user_updatable_columnsWHERE UPPER(table_name) = UPPER('v_emp_dept');/* Toate sunt actualizabile in afara de departament_name

6. Să se creeze vizualizarea v_dept_*** care să contine codul si numele departamentului, numărul de angajati din departamentul respectiv si suma alocată pentru plata salariilor. Această vizualizare permite actualizări?

CREATE VIEW v_dept (cod, nume, nr_angajati, val_salarii)AS SELECT e.department_id, department_name, COUNT(*) nr_angajati,SUM(salary) val_salariiFROM emp e, dept dWHERE e.department_id = d.department_idGROUP BY e.department_id, department_name;SELECT column_name, updatableFROM user_updatable_columnsWHERE UPPER(table_name) = UPPER('v_dept');/*Aceasta vizualizare nu permite actializari

8

Page 95: SOLUTII - Baze de Date - Adunate

7. a) Să se creeze vizualizarea v_emp30_*** care să contină numele, emailul, data angajării, salariul, codul jobului si codul departamentului celor care lucrează în departamentul 30. În această vizualizare nu se va permite modificarea sau inserarea liniilor ce nu sunt accesibile ei. Dati un nume constrângerii.

CREATE VIEW v_emp30ASSELECT employee_id, last_name, email, hire_date, salary, job_id,department_idFROM empWHERE department_id=30WITH CHECK OPTION CONSTRAINT ck_option1;

7. b) Să se listeze structura si continutul vizualizării v_emp30_***.

DESCRIBE v_emp30;SELECT * FROM v_emp30;/*nici o inregistrare selectata

7. c) Să se încerce prin intermediul vizualizării inserarea unui angajat în departamentul 10 si a unui angajat în departamentul 30

INSERT INTO v_emp30 VALUES ( 600, 'N5', 'E5', SYSDATE, 4000, 'ADMIN', 10);EROARE la linia 1: ORA-01402: în vizualizarea WITH CHECK OPTION clauza where este încãlcatã

INSERT INTO v_emp30 VALUES (600, 'N5', 'E5', SYSDATE, 4000, 'ADMIN', 30);/*Daca department_id este 30 se face inserarea, inregistrarea de regaseste in tabela emp.

7. d) Să se încerce prin intermediul vizualizării modificarea departamentului unui angajat.

UPDATE v_emp30SET department_id =20WHERE employee_id = 11;/*0 înregistrãri actualizate.

8. Să se creeze o vizualizare (v_dept_***) asupra tabelului dept_*** să nu permită efectuarea nici unei operatii LMD. Testati operatiile de inserare, modificare si stergere asupra acestei vizualizări.

CREATE VIEW v_deptAS SELECT * FROM deptWITH READ ONLY;/* EROARE la linia 1: ORA-00955: numele este deja utilizat de un obiect existent

CREATE OR REPLACE VIEW v_deptAS SELECT * FROM deptWITH READ ONLY;

9. Să se consulte informatii despre vizualizarea v_dept_***. Folositi vizualizarea dictionarului datelorUSER_VIEWS (coloanele VIEW_NAME si TEXT).Obs: Coloana TEXT este de tip LONG. În cazul selectării unei coloane de tip LONG trebuie utilizată comanda SET LONG n pentru a seta numărul de caractere afisate.

SET LONG 200SELECT view_name, textFROM user_views

9

Page 96: SOLUTII - Baze de Date - Adunate

WHERE UPPER(view_name)=UPPER(’v_dept’);

Definirea secventelor

Sintaxa comenzii CREATE SEQUENCE este:

CREATE SEQUENCE nume_secventă[INCREMENT BY n][START WITH valoare_start][ {MAXVALUE valoare_maximă | NOMAXVALUE} ][ {MINVALUE valoare_minimă | NOMINVALUE} ][ {CYCLE | NOCYCLE} ][ {CACHE n | NOCACHE} ];

Stergerea secventelor se realizează cu ajutorul comenzii DROP SEQUENCE.DROP SEQUENCE nume_secv;

10. Să se creeze o secventă care are pasul de incrementare 10 si începe de la 10, are ca valoare maximă 10000 si nu ciclează.

CREATE SEQUENCE secINCREMENT BY 10START WITH 10MAXVALUE 10000NOCYCLE;

11. Să se modifice toate liniile din tabelul emp_***, regenerând codul angajatilor astfel încât să utilizeze secventa sec_emp***. Să se anuleze modificările.

UPDATE empSET employee_id = sec_emp.NEXTVAL;ROLLBACK;

12. Să se introducă un nou salariat în tabelul emp_*** folosindu-se pentru codul salariatului secventa creată.

INSERT INTO emp VALUES (sec_emp.NEXTVAL, 'N5', 'E5', SYSDATE, 2500, 'admin', 30);

13. Să se afiseze valoarea curentă a secventei.

SELECT sec_emp.CURRVAL valoare FROM DUAL;

Exercitiua) Creati o secventă pentru generarea codurilor de departamente, seq_dept_***. Secventa va începe de la 200, va creste cu 10 la fiecare pas si va avea valoarea maximă 20000, nu va cicla.

CREATE SEQUENCE seq_deptSTART WITH 200INCREMENT BY 10MAXVALUE 20000NOCYCLE;

10

Page 97: SOLUTII - Baze de Date - Adunate

b) Să se selecteze informatii despre secventele utilizatorului curent (nume, valoare minimă, maximă, de incrementare, ultimul număr generat). Se va utiliza vizualizarea user_sequences.

SELECT * FROM user_sequences WHERE sequence_name='SEQ_DEPT';

c) Să se insereze o înregistrare nouă în DEPT_*** utilizând secventa creată.

INSERT INTO departments VALUES (seq_dept.NEXTVAL, 'contabil');

d) Să se selecteze valoarea curentă a secventei.

SELECT seq_dept.CURRVAL valoare FROM DUAL;

e) Să se steargă secventa.

DROP SEQUENCE seq_dept;

Definirea indecsilor

Sintaxa comenzii CREATE INDEX:

CREATE [UNIQUE] INDEX nume_indexON tabel (coloana1 [, coloana2…]);

Modificarea unui index se face prin comanda ALTER INDEX.Eliminarea unui index se face prin comanda: DROP INDEX nume_index;

14. Să se creeze un index neunic, emp_last_name_idx_***, asupra coloanei last_name din tabelul emp_***.

CREATE INDEX emp_last_name_idx ON EMP (last_name);

15. Să se creeze indecsi unici asupra codului angajatului (employee_id) si asupra combinatiei last_name, first_name, hire_date.

CREATE UNIQUE INDEX employee_id_idx ON emp (employee_id);CREATE UNIQUE INDEX employee_id_idx1 ON emp (last_name, hire_date);

16. Creati un index neunic asupra coloanei department_id din emp_*** pentru a eficientiza joinurile dintre acest tabel si dept_***.

CREATE INDEX emp_department_idx ON EMP(department_id);

Definirea sinonimelor

Comanda pentru crearea sinonimelor este:

CREATE [PUBLIC] SYNONYM nume_sinonimFOR obiect;

Eliminarea sinonimelor se face prin comanda DROP SYNONYM nume_sinonim;

11

Page 98: SOLUTII - Baze de Date - Adunate

17. Creati un sinonim public se_*** pentru tabelul emp_***.

CREATE SYNONYM se for emp;

18. Creati un sinonim pentru vizualizarea v_dept_***.

CREATE SYNONYM sy_dept FOR v_dept;

19. Utilizând sinonimele create anterior, afisati informatii depre salariti si despre departamente.

SELECT * FROM se;

SELECT * FROM sy_dept;

Limbajul de interogare al datelor (DQL). SELECT

CERERI MONOTABEL1. Analizati sintaxa simplificată a comenzii SELECT. Care dintre clauze sunt obligatorii?

SELECT { [ {DISTINCT | UNIQUE} | ALL] lista_campuri | *}FROM [nume_schemă.]nume_obiect ][, [nume_schemă.]nume_obiect …][WHERE condiŃie_clauza_where][GROUP BY expresie [, expresie …][HAVING condiŃie_clauza_having] ][ORDER BY {expresie | poziŃie} [, {expresie | poziŃie} …] ]

2. Să se listeze structura tabelelor din schema HR (EMPLOYEES, DEPARTMENTS, JOB_HISTORY, JOBS, LOCATIONS, COUNTRIES, REGIONS), observând tipurile de date ale coloanelor.Obs: Se va utiliza comanda SQL*Plus DESCRIBE nume_tabel

12

Page 99: SOLUTII - Baze de Date - Adunate

Se creaza tabelele:1. REGIONS TABLE – din fisierul hr_create.sql2. COUNTRIES TABLE– din fisierul hr_create.sql3. LOCATIONS TABLE– din fisierul hr_create.sql4. DEPARTAMENTS TABLE– din fisierul hr_create.sql5. JOBS TABLE– din fisierul hr_create.sql6. EMPLOYYES TABLE– din fisierul hr_create.sql7. JOB_HISTORY TABLE– din fisierul hr_create.sql8. JOB_GRADES TABLE– din fisierul hr_create.sql

2. Să se listeze structura tabelelor din schema HR (EMPLOYEES, DEPARTMENTS, JOB_HISTORY, JOBS, LOCATIONS, COUNTRIES, REGIONS), observând tipurile de date ale coloanelor.Obs: Se va utiliza comanda SQL*Plus DESCRIBE nume_tabel

DESCRIBE employees;DESCRIBE departments;DESCRIBE jobs;DESCRIBE job_history;DESCRIBE locations;DESCRIBE countries;DESCRIBE regions;

3.Să se listeze continutul tabelelor din schema considerată, afisând valorile tuturor câmpurilor. Obs: Se va utiliza comanda SQL SELECT * FROM nume_tabel;

13

Page 100: SOLUTII - Baze de Date - Adunate

SELECT * FROM employees;SELECT * FROM departments;SELECT * FROM jobs;SELECT * FROM job_history;SELECT * FROM locations;SELECT * FROM countries;SELECT * FROM regions;/*nici o înregistrare selectatã – trebuie sa inseram valori in fiecare tabel

1. Inseram datele in tabelul REGIONS – din fisierul hr_insert.sql2. Inseram datele in tabelul COUNTRIES – din fisierul hr_insert.sql3. Inseram date in tabelul LOCATIONS – din fisierul hr_insert.sql4. Inseram date in tabelul DEPARTMENTS – din fisierul hr_insert.sql5.Inseram date in tabelul JOBS – din fisierul hr_insert.sql6. Inseram date in tabelul EMPLOYEES– din fisierul hr_insert.sql7. Inseram date in tabelul JOB_HISTORY - din fisierul hr_insert.sql8. Inseram datele in tabelul JOB_GRADES - din fisierul hr_insert.sql

Reluam exercitiul

SELECT * FROM employees;/*106 înregistrãri selectate.*/SELECT * FROM departments;/*27 înregistrãri selectate.*/SELECT * FROM jobs;*//*19 înregistrãri selectate.*/SELECT * FROM job_history;/*10 înregistrãri selectate.*/SELECT * FROM locations;*/22 înregistrãri selectate.SELECT * FROM countries;*/22 înregistrãri selectate.SELECT * FROM regions;*/4 inregistrari */

4. Să se obtină încă o dată rezultatul cererii precedente, fără a rescrie cererea.Obs: Ultima comandă SQL lansată de către client este păstrată în buffer-ul SQL. Pentru rularea acesteia se utilizează “/” sau RUN.

RUN sau //* Acelasi rezultat ca la ex. 3

5. Listati structura tabelului EMPLOYEES si apoi dati comanda RUN (sau “/”). Ce observati? Comenzile SQL*Plus sunt păstrate în buffer?DESC employeesRUN/*Comenzile sunt pastrate in buffer.

6. Să se afiseze codul angajatului, numele, codul job-ului, data angajării. Salvati instruciunea SQL într-un fisier numit p1_14.sql.Obs: Pentru salvarea ultimei comenzi SQL se utilizează comanda SAVE. Precizarea extensiei „.sql” a fisierului nu este obligatorie.SELECT employee_id, last_name, job_id, hire_dateFROM employees;SAVE z:\…\ p1_14.sql

14

Page 101: SOLUTII - Baze de Date - Adunate

SELECT employee_id, last_name, job_id, hire_dateFROM employees;SAVE E:\Oracle\p1_14.sql

7. Reexecutati cererea folosind fisierul p1_14.sql.START z:\…\ p1_14.sql sau @ z:\…\ p1_14.sql

START E:\Oracle\p1_14.sql;@ E:\Oracle\p1_14.sql;

8. Editati fisierul p1_14.sql, adăugând coloanelor câte un alias (cod, nume, cod job, data angajarii).EDIT z:\…\ p1_14.sql

EDIT E:\Oracle\p1_14.sql;SELECT employee_id cod, last_name nume, job_id "cod job", hire_date "data angajarii"FROM employees;

9. Să se listeze, cu si fără duplicate, codurile job-urilor din tabelul EMPLOYEES.Obs. DISTINCT = UNIQUE

SELECT DISTINCT job_id FROM employees;sauSELECT UNIQUE job_id FROM employees;SELECT job_id FROM employees;

10. Să se afiseze numele concatenat cu prenumele, separate prin spatiu. Etichetati coloana “Nume si prenume”.Obs: Operatorul de concatenare este “||”. Sirurile de caractere se specifică între apostrofuri (NU ghilimele, caz în care ar fi interpretate ca alias-uri).

SELECT last_name||' '||first_name "Nume si prenume" FROM employees;

11. Să se listeze numele si salariul angajatilor care câstigă mai mult de 10000 $.

SELECT last_name, salaryFROM employeesWHERE salary > 10000;

12. Să se modifice cererea anterioară astfel încât să afiseze numele si salariul pentru toti angajatii al căror salariu este cuprins între 5000$ si10000$.Obs: Pentru testarea apartenentei la un domeniu de valori se poate utiliza operatorul [NOT] BETWEEN valoare1 AND valoare2

SELECT last_name, salaryFROM employeesWHERE salary BETWEEN 5000 AND 10000;

13. Să se creeze o cerere pentru a afisa numele angajatului si numărul departamentului pentru angajatul 104.

SELECT last_name, department_id FROM employees WHERE employee_id = 104;

14. Să se afiseze numele si salariul pentru toti angajatii din departamentele 10 sau 30, în ordine alfabetică a numelor.

15

Page 102: SOLUTII - Baze de Date - Adunate

Obs: Apartenenta la o multime finită de valori se poate testa prin intermediul operatorului IN, urmat de lista valorilor între paranteze si separate prin virgule:expresie IN (valoare_1, valoare_2, …, valoare_n)

SELECT last_name, salaryFROM employeesWHERE department_id IN (10, 30)ORDER BY last_name;/*afiseaza numai numele salariatilor in ordine alfabeticaSauSELECT last_name||' '||first_name "Nume complet", salaryFROM employees WHERE department_id IN (10,30)ORDER BY last_name, first_name; /* afiseaza last_mame si frist_name (numele complet) in ordine alfabetica.

15. Să listeze numele si salariile angajatilor care câstigă mai mult de 10000 $ si lucrează în departamentul 10 sau 30. Se vor eticheta coloanele drept Angajat si Salariu lunar.

SELECT last_name "Angajat", salary "Salariu lunar"FROM employeesWHERE department_id IN(10,30);

16. Care este data curentă? Obs: Pseudocoloana care returnează data curentă este SYSDATE. Pentru completarea sintaxei obligatorii a comenzii SELECT, se utilizează tabelul DUAL:SELECT SYSDATEFROM dual;Datele calendaristice pot fi formatate cu ajutorul functiei TO_CHAR(data, format), unde formatul poate fi alcătuit dintr-o combinatie a următoarelor elemente:

Element SemnificaieD Numărul zilei din săptămână (duminică=1;

luni=2; …sâmbătă=6).DD Numărul zilei din lună.DDD Numărul zilei din an.DY Numele zilei din săptămână, printr-o

abreviere de 3 litere (MON, THU etc.)DAY Numele zilei din săptămână, scris în

întregime.MM Numărul lunii din an.MON Numele lunii din an, printr-o abreviere de 3

litere (JAN, FEB etc.)MONTH Numele lunii din an, scris în întregime.Y Ultima cifră din anYY, YYY, YYYY Ultimele 2, 3, respectiv 4 cifre din an.YEAR Anul, scris în litere (ex: two thousand

four).HH12, HH24 Orele din zi, între 0-12, respectiv 0-24.MI Minutele din oră.SS Secundele din minut.SSSSS Secundele trecute de la miezul nopŃii.

SELECT sysdate FROM DUAL;

16

Page 103: SOLUTII - Baze de Date - Adunate

17. Să se afiseze numele si data angajării pentru fiecare salariat care a fost angajat în 1987. Se cer 2 solutii: una în care se lucrează cu formatul implicit al datei si alta prin care se formatează data.

Varianta1- cu formatul implicit al dateiSELECT last_name, hire_dateFROM employeesWHERE hire_date LIKE ('%87');Varianta 2 – cu data formatataSELECT last_name, hire_dateFROM employeesWHERE TO_CHAR(hire_date, 'YYYY' ) = 1987;Sunt obligatorii ghilimelele de la sirul ‘1987’? Ce observati? Nu sunt obligatorii.

18. Să se afiseze numele si job-ul pentru toti angajatii care nu au manager.

SELECT last_name, job_idFROM employeesWHERE manager_id IS NULL;

19. Să se afiseze numele, salariul si comisionul pentru toti salariatii care câstigă comisioane. Să se sorteze datele în ordine descrescătoare a salariilor, iar pentru cei care au acelasi salariu în ordine crescătoare a comisioanelor.

SELECT last_name, salary, commission_pctFROM employeesWHERE commission_pct IS NOT NULLORDER BY salary DESC, commission_pct ASC;

20. Să se listeze numele tuturor angajatilor care au a treia litera din nume 'a'.Obs: Pentru a forma măstile de caractere utilizate împreună cu operatorul LIKE cu scopul de a compara sirurile de caractere, se utilizează:% - reprezentând orice sir de caractere, inclusiv sirul vid; _ (underscore) reprezentând un singur caracter.

SELECT DISTINCT last_nameFROM employees WHERE last_name LIKE '__a%';

21. Folosind data curentă să se afiseze următoarele informatii:- numele zilei, numărul zilei din săptămână, numărul zilei din luna, respectiv numărul zilei din an;SELECT TO_CHAR(SYSDATE,'DAY,D,DD,DDD') FROM DUAL;

- numărul lunii din an, numele lunii cu abreviere la 3 caractere, respectiv numele complet al lunii;SELECT TO_CHAR(SYSDATE,'MM-MON-MONTH') FROM DUAL;

- ora curentă (ora, minute, secunde).SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') FROM DUAL;

22. Să se listeze numele departamentelor care functionează în locatia având codul 1700 si al căror manager este cunoscut.

SELECT department_name FROM departmentsWHERE location_id=1700 AND manager_id IS NOT NULL;

23. Să se afiseze codurile departamentelor în care lucrează salariati.

17

Page 104: SOLUTII - Baze de Date - Adunate

SELECT DISTINCT department_idFROM employeesWHERE department_id IS NOT NULLORDER BY department_id;

24. Să se afiseze numele si prenumele salariatilor angajati în luna mai 1987.

SELECT last_name, first_nameFROM employeesWHERE TO_CHAR(hire_date, 'MON,YYYY') = 'may-1987';

Sau SELECT last_name, first_nameFROM employeesWHERE TO_CHAR (hire_date, 'mm-YYYY') = '05-1987';

25. Să se listeze codurile angajatilor care au avut si alte joburi fată de cel prezent. Să se ordoneze rezultatul descrescător după codul angajatului.

SELECT department_name FROM departmentsWHERE manager_id IS NOT NULL;

26. Să se afiseze numele si data angajării pentru cei care lucrează în departamentul 80 si au fost angajati în luna martie a anului 1997.

SELECT last_name, hire_dateFROM employees WHERE TO_CHAR(hire_date, 'MON-YYYY') = 'MAR-1987' AND department_id = 80;

27. Să se afiseze numele joburilor care permit un salariu cuprins între 8300$ si 14000$.

SELECT DISTINCT j.job_title, s.salaryFROM jobs j, employees sWHERE j.job_id = s.job_id and salary BETWEEN 8300 AND 14000 ORDER BY salary DESC;

28. Care este grila de salarizare pentru un salariu de 10000$?

SELECT * FROM employees WHERE salary = 10000;

29. Să se listeze numele tuturor angajatilor care au 2 litere 'L' în nume si lucrează în departamentul 30 sau managerul lor este 123.

SELECT last_name||' '||first_name "Numele si prenumele"FROM employeesWHERE last_name LIKE '%L%L%'AND department_id = 30 OR manager_id = 123;

30. Să se afiseze numele, job-ul si salariul pentru toti salariatii al căror job contine sirul 'CLERK' sau 'REP' si salariul nu este egal cu 1000, 2000 sau 3000 $.

31. Să se afiseze numele, salariul si comisionul pentru toti angajatii al căror salariu este mai mare decât de 5 ori valoarea comisionului (salary*commission_pct*5).

18

Page 105: SOLUTII - Baze de Date - Adunate

SELECT last_name||' '||first_name "Numele si prenumele", commission_pctFROM employeesWHERE salary > commission_pct*5;

FUNCłII SQL (single-row)

Principalele functii SQL pot fi clasificate în următoarele categorii:· Functii single-row· Functii multiple-row (functii agregat)Functiile single-row returnează câte o linie rezultat pentru fiecare linie a tabelului sau vizualizăriiinterogate. Aceste functii pot apărea în listele SELECT, clauzele WHERE, START WITH, CONNECT BY si HAVING.

1. Analizati următoarele functii pentru prelucrarea sirurilor de caractere:

LOWER (expresie) - Converteste un sir de caractere la minuscule.LOWER ('AbCdE') = 'abcde'

UPPER (expresie) - Converteste un sir de caractereUPPER ('AbCdE') = 'ABCDE'

INITCAP (expresie) - Converteste un sir de caractere la un sir care începe cu majusculă si continuă cuINITCAP ('AbCdE') = 'Abcde'

INITCAP (expresie) - Converteste un sir de caractere la un sir care începe cu majusculă si continuă cu minuscule.INITCAP ('AbCdE') = 'Abcde'

SUBSTR (expresie, m[, n]) - Extrage din expresia de tip sir de caractere, n caractere începând cu pozitia m. Dacă lipseste argumentul n, atunci extrage toate caracterele până la sfârsitul sirului. Dacă m este negativ numărătoarea poziŃiilor începe de la sfârsitul sirului de caractere spre început.SUBSTR ('AbCdE', 2) = 'bCdE'SUBSTR ('AbCdE', -3,2) = 'Cd'SUBSTR ('AbCdE', -3) = 'CdE'

LENGTH (expresie) - Returnează numărul de caractere al expresiei.LENGTH ('AbCdE') = 5

INSTR (expresie, expr1[, m][, n]) - Returnează pozitia la care se găseste a n-a ocurentă a expresiei 'expr1' în cadrul expresiei 'expresie', căutarea începând de la poziŃia m. Daca m sau n lipsesc, valorile implicite sunt 1 pentru ambele.INSTR (LOWER('AbCdE aBcDe'), 'ab', 5) = 7INSTR (LOWER('AbC aBcDe'), 'ab', 5, 2) = 0

LTRIM (expresie[, expr1]) sau RTRIM (expresie[, expr1]) - Reversul functiilor LPAD, RPAD. Trunchează expresia RTRIM (expresie[, expr1]) caracter la stânga sau la dreapta prin eliminarea succesivă a caracterelor din expresia expr1. Implicit, daca lipseste, expr1 = 'abcde'RTRIM ('abcdeXXXX', 'X') = 'abcde'LTRIM (' abcde') = 'abcde'

TRIM (LEADING | TRAILING | BOTH caractere_trim FROM expresie) - Permite eliminarea caracterelor specificate (caractere_trim) de la începutul (leading) , sfârsitul (trailing) sau din ambele părti, dintr-o expresie caracter data.TRIM (LEADING 'X' FROM'XXXabcdeXXX') = 'abcdeXXX'

19

Page 106: SOLUTII - Baze de Date - Adunate

TRIM (TRAILING 'X' FROM'XXXabcdeXXX') = 'XXXabcde'TRIM ( BOTH 'X' FROMXXXabcdeXXX') = 'abcde'TRIM (' abcde ') = 'abcde'

2. Să se afiseze pentru fiecare angajat din departamentul 20 un sir de caractere de forma "Functia salariatului {prenume} {nume} este {cod functie}". Să se afiseze prenumele cu initiala litera mare, iar numele cu litere mari (Stephen KING), iar codul functiei să se afiseze cu litere mici.

SELECT 'Functia salariatului ' || INITCAP(first_name)||' '||UPPER(last_name) ||' este ' ||LOWER(job_id)||' .' AS "Angajatul si codul functiei"FROM employees WHERE department_id = 20;

3. Să se afiseze pentru angajatul cu numele 'HIGGINS' codul, numele si codul departamentului. Cum se scrie conditia din WHERE astfel încât să existe siguranta ca angajatul 'HIGGINS' va fi găsit oricum ar fi fost introdus numele acestuia? Căutarea trebuie să nu fie case-sensitive, iar eventualele blank-uri care preced sau urmează numelui trebuie ignorate.

SELECT employee_id, last_name, department_idFROM employeesWHERE UPPER(TRIM(last_name)) = 'HIGGINS';

4. Să se afiseze pentru toti angajatii al căror nume se termină în 'n', codul, numele, lungimea numelui si pozitia din nume în care apare prima data litera 'a'. Asociati aliasuri coloanelor returnate de cerere.

SELECT employee_id, last_name, LENGTH(last_name), INSTR(UPPER(last_name), 'A') FROM employeesWHERE SUBSTR(last_name,-1)='n';

5. Analizati următoarele functii aritmetice:

ROUND (expresie [, n]) - Returnează valoarea rotunjită a expresiei până la n zecimale. Daca n este negativ sunt rotunjite cifre din stânga virgulei. Valoarea implicită pentru n este 0.ROUND(1.6) = 2ROUND(1.4) = 1ROUND (1234.56,1) = 1234.6ROUND (1230.56, -2) = 1200ROUND (1260.56, -2) = 1300

MOD (m,n) - Returnează restul împărtirii lui m la n.MOD (11, 4) = MOD (11, -4) = 3MOD(-11, 4) = MOD (-11, -4) = -3

7. Să se afiseze numele, salariul si numărul de mii al salariului rotunjit la 2 zecimale pentru cei care nu au salariul divizibil cu 1000.

SELECT last_name, salary, ROUND(salary/1000 ,2) "MII LEI"FROM employeesWHERE MOD(salary,1000) !=0;

8. Analizati următoarele operatii pe expresii de tip dată calendaristică:date -/+ number - Date - Scade/Adaugă un număr de zile dintr-o / la o dată.

20

Page 107: SOLUTII - Baze de Date - Adunate

date1 - date2 - Number - Întoarce numărul de zile dintre două date calendaristice.date +/- number/24 – Date - Scade/Adaugă un număr de ore la o / dintr-o dată calendaristică.

9. Să se afiseze data (luna, ziua, ora, minutul si secunda) de peste 10 zile.SYSDATE+10

SELECT TO_CHAR(SYSDATE+30, ‘MONTH DD HH24:MM:SS’) “Data”FROM DUAL;

10. Să se afiseze numărul de zile rămase până la sfârsitul anului. ROUND(TO_DATE(’31-DEC-2009’)-SYSDATE)

SELECT ROUND(TO_DATE('31-DEC-2009') - SYSDATE) FROM DUAL;

11. a. Să se afiseze data de peste 12 ore. SYSDATE+12/24

SELECT SYSDATE + 12/24 FROM DUAL;Sau SELECT TO_CHAR(SYSDATE+12/24, ‘ DD/MM HH24:MM:SS’) “Data”FROM DUAL;

11. b. Să se afiseze data de peste 5 minute. SYSDATE+1/288

SELECT SYSDATE + 1/288 FROM DUAL;Sau – data, incluziv minutele si secundeleSELECT TO_CHAR(SYSDATE+1/288, ‘ DD/MM HH24:MM:SS’) “Data”FROM DUAL;

12. Analizati următoarele functii pentru prelucrarea datelor calendaristice:

SYSDATE - Întoarce data si timpul curentMONTHS_BETWEEN (date1, date2) - Returnează numărul de luni dintre data date1 si data date2. Rezultatul poate fi pozitiv sau negativ după cum date1 este mai recentă sau nu fată de date2. Zecimalele reprezintă parti dintr-o luna!ROUND(MONTHS_BETWEEN(SYSDATE + 31, SYSDATE)) = 1

ADD_MONTHS (date, n) - Adaugă n luni la o data specificată. Valoarea n trebuie să fie întreagă (pozitivă sau negativă).ADD_MONTHS (date, n)MONTHS_BETWEEN(ADD_MONTHS(SYSDATE, 3),SYSDATE) = 3

NEXT_DAY (date, char) - Returnează data corespunzătoare primei zile a săptămânii specificate (char) care urmează după date.NEXT_DAY('15-dec-2006','Monday') = '18-dec-2006'NEXT_DAY ('15-dec-2006',1) = '18-dec-2006'

13. Să se afiseze numele angajatului, data angajării si data negocierii salariului, care a avut loc în prima zi de Luni, după 6 luni de serviciu. Etichetati această coloană “Negociere”. NEXT_DAY(ADD_MONTHS(hire_date, 6), ‘Monday’)

SELECT last_name, hire_date, NEXT_DAY(ADD_MONTHS(hire_date, 6), 'Luni') "Negociere"FROM employees;

21

Page 108: SOLUTII - Baze de Date - Adunate

14. Pentru fiecare angajat să se afiseze numele si numărul de luni de la data angajării. Etichetati coloana“Luni lucrate”. Să se ordoneze rezultatul după numărul de luni lucrate. Se va rotunji numărul de luni la cel mai apropiat număr întreg.

SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) “Luni lucrate”FROM employeesORDER BY MONTHS_BETWEEN(SYSDATE, hire_date);SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) “Luni lucrate”FROM employeesORDER BY “Luni lucrate”;SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) “Luni lucrate”FROM employeesORDER BY 2;

15. Analizati următoarele functii de conversie:Obs. Conversiile implicite asigurate de server-ul Oracle sunt:de la VARCHAR2 sau CHAR la NUMBER;de la VARCHAR2 sau CHAR la DATE;de la NUMBER la VARCHAR2 sau CHAR;de la DATE la VARCHAR2 sau CHAR.

SELECT last_nameFROM employeesWHERE TO_CHAR(hire_date,'yyyy')=1994;/* afiseaza o singura coloana cu numele salariatilor care au fost angajati in anul 1994*/

SELECT last_nameFROM employeesWHERE hire_date='07-IUN-1994';/*afiseaza numele salariatilor care au fost angajati in 7 iunie 1994*/

SELECT employee_id||' '||last_name||' '||hire_dateFROM employeesWHERE department_id=10;/* afiseaza id angajat, numele si data angajarii salariatilor din departamentul cu id 10*/

16. Să se afiseze numele si prenumele pentru toti angajatii care s-au angajat în luna mai.

SELECT last_name, first_nameFROM employeesWHERE TO_CHAR(hire_date,'MON') = 'MAY';sauSELECT last_name, first_nameFROM employeesWHERE TO_CHAR(hire_date,'mm') = 05;

18. Să se afiseze numele angajatilor si comisionul. Dacă un angajat nu câstigă comision, să se scrie “Fara comision”. Etichetati coloana “Comision”.NVL(TO_CHAR(commission_pct), ‘Fara comision’)

UPDATE employees SET commission_pct = NULL WHERE last_name = ' Kochhar';SELECT last_name, NVL(TO_CHAR(commission_pct),'Fara comision') "Comision"FROM employees;

22

Page 109: SOLUTII - Baze de Date - Adunate

19. Să se listeze numele, salariul si comisionul tuturor angajatilor al căror venit lunar depăseste 10000$. salary * NVL(commission_pct, 0) venit_lunar

SELECT last_name, salary, commission_pctFROM employeesWHERE salary * NVL(commission_pct, 0) >10000;

21. Să se afiseze numele, codul functiei, salariul si o coloana care să arate salariul după mărire. Se stie că pentru IT_PROG are loc o mărire de 10%, pentru ST_CLERK 15%, iar pentru SA_REP o mărire de 20%. Pentru ceilalti angajati nu se acordă mărire. Să se denumească coloana "Salariu revizuit".IT_PROG >> 44ST_CLERK >> 55SA_REP >> 99

SELECT last_name, job_id, salary,DECODE(job_id, ‘IT_PROG’, salary*1.1, ’ST_CLERK’, salary*1.15, ‘SA_REP’, salary*1.2, salary ) “salariu revizuit”FROM employees;SELECT last_name, job_id, salary,CASE job_id WHEN ‘IT_PROG’ THEN salary* 1.1WHEN ’ST_CLERK’ THEN salary*1.15WHEN ‘SA_REP’ THEN salary*1.2ELSE salaryEND “salariu revizuit”FROM employees;SELECT last_name, job_id, salary,CASE WHEN job_id= ‘IT_PROG’ THEN salary* 1.1WHEN job_id=’ST_CLERK’ THEN salary*1.15WHEN job_id =‘SA_REP’ THEN salary*1.2ELSE salaryEND “salariu revizuit”FROM employees;

22. Să se afiseze numele salariatului si codul departamentului în care acesta lucrează. Dacă există salariati care nu au un cod de departament asociat, atunci pe coloana id_depratment să se afiseze: textul “fara departament”; valoarea zero.

SELECT last_name, NVL(TO_CHAR(department_id) , 'Fara departament') "department"FROM employees;

SELECT last_name, NVL(TO_CHAR(department_id) , 0) "department"FROM employees;

SELECT last_name, CASE WHEN department_id IS NULL THEN 'Fara departament'ELSE TO_CHAR(department_id)END "DEPARTAMENT"FROM employees;

SELECT last_name, CASE WHEN department_id IS NULL THEN 0ELSE department_idEND "DEPARTAMENT"FROM employees;

23

Page 110: SOLUTII - Baze de Date - Adunate

23. a. Să se afiseze numele angajatilor care nu au manager.

SELECT last_name FROM employees WHERE manager_id IS NULL;

sauSELECT last_name||' '||first_name FROM employees WHERE manager_id IS NULL;

23.b. Să se afiseze numele angajatilor si codul managerilor lor. Pentru angajatii care nu au manager să apară textul “nu are sef”.

SELECT last_name, CASE WHEN manager_id IS NULL THEN 'Nu are sef'ELSE TO_CHAR(manager_id)END "manager"FROM employees;

SauSELECT last_name||' '||first_name,CASE WHEN manager_id IS NULL THEN 'Nu are sef'ELSE TO_CHAR(manager_id)END "manager"FROM employees;

24. Să se afiseze numele salariatului si:· venitul anual dacă are comision;· salariul dacă nu are comision.Se va utiliza functia NVL2.

FunctieNVL2 (expr1, expr2, expr3)ExplicatieDacă expr1 este nenulă atunci returnează expr2, altfel Returnează expr3ExempluNVL2 (1, 2, 3) = 2NVL2 (NULL, 2, 3) = 3

24. Să se afiseze numele salariatului si:· venitul anual dacă are comision;· salariul dacă nu are comision.Se va utiliza functia NVL2.

/*si aici voi aduna salariul cu comisionul*/SELECT last_name NVL2(commission_pct, salary+commission_pct, 0) "It's about money"FROM employees;

/*nu am inteles exact ce ar trebui sa facem asa ca am pus sa afiseze si separat pe doua coloane */SELECT last_name, NVL2(commission_pct, salary+commission_pct, 0) "astia au comision",NVL2(commission_pct, 0, salary) "astia nu au comision"FROM employees;?????????

25. Să se afiseze numele salariatului, salariul si salariul revizuit astfel:- dacă lucrează de mai mult de 200 de luni atunci salariul va fi mărit cu 20%;- dacă lucrează de mai mult de 150 de luni, dar mai putin de 200 de luni, atunci salariul va fi mărit cu 15%;

24

Page 111: SOLUTII - Baze de Date - Adunate

- dacă lucrează de mai mult de 100 de luni, dar mai puŃin de 150 de luni, atunci salariul va fi mărit cu 10%;- altfel, salariul va fi mărit cu 5%.

SELECT last_name, salary,CASE WHEN ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) > 200 THEN salary*1.2WHEN ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) > 150 THEN salary*1.15 WHEN ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) > 100 THEN salary*1.1ELSE salary*1.05END "SALARIU REVIZUIT"FROM employees;

CERERI MULTITABEL, SUBCERERI

Tipuri de join:- equijoin (se mai numeste inner join sau simple join) - compunerea a două tabele diferite după o conditie ce contine operatorul de egalitate.

SELECT last_name, department_name, location_id, e.department_idFROM employees e, departments dWHERE e.department_id = d.department_id;

Obs: Numele sau alias-urile tabelelor sunt obligatorii în dreptul coloanelor care au acelasi numeîn mai multe tabele.

- nonequijoin - compunerea a două relatii tabele după o conditie oarecare, ce NU contine operatorul de egalitate.

SELECT last_name, salary, grade_levelFROM employees, job_gradesWHERE salary BETWEEN lowest_sal AND highest_sal;

- outerjoin - compunerea externă a două tabele diferite completând una dintre relatii cu valori NULL acolo unde nu există în aceasta nici un tuplu ce îndeplineste conditia de corelare. Relatia completată cu valori NULL este cea în dreptul căreia apare “(+)”. Operatorul (+) poate fi plasat în orice parte a conditiei de join, dar nu în ambele părti. Full outer join = Left outer join UNION Right outer join.

SELECT last_name, department_name,location_idFROM employees e, departments dWHERE e.department_id(+) = d.department_id;

- selfjoin - compunerea externă a unui tabel cu el însusi după o conditie dată.

SELECT sef.last_name, angajat.last_nameFROM employees sef, employees angajatWHERE sef.employee_id = angajat.manager_idORDER BY sef.last_name;

1. Pentru fiecare angajat să se afiseze numele, codul si numele departamentului.

SELECT last_name, e.department_id, department_nameFROM employees e, departments dWHERE e.department_id = d.department_id;

2. Să se afiseze numele angajatului, numele departamentului pentru toti angajatii care câstigă comision.

SELECT last_name, department_name25

Page 112: SOLUTII - Baze de Date - Adunate

FROM employees e, departments dWHERE e.department_id = d.department_id AND commission_pct IS NOT NULL;

3. Să se listeze numele job-urile care există în departamentul 30.

SELECT DISTINCT job_titleFROM employees e, jobs jWHERE e.job_id = j.job_idAND department_id = 30;

4. Sa se afiseze numele, job-ul si numele departamentului pentru tot angajati care lucrează în Seattle.

SELECT last_name, job_id, department_nameFROM employees e, departments d, locations sWHERE e.department_id = d.department_id AND d.location_id = s.location_id AND city = ‘Seattle’;

Sau

SELECT last_name, e.job_id, department_nameFROM employees e, departments dWHERE e.department_id = d.department_idAND location_id = (SELECT location_id FROM locations WHERE city = 'Seattle');

5. Să se afiseze numele, salariul, data angajării si numele departamentului pentru toti programatorii care lucrează în America.region_name = ‘Americas’job_title = ‘Programmer’

SELECT last_name, salary, hire_date, department_nameFROM employees e, departments d, locations s, countries c, regions r, jobs jWHERE e.department_id = d.department_id AND d.location_id = s.location_id AND s.country_id = c.country_id AND c.region_id = r.region_id AND e.job_id = j.job_id AND region_name = ‘Americas’ AND job_title = ‘Programmer’;

6. Să se afiseze numele salariatilor si numele departamentelor în care lucrează. Se vor afisa si salariatii care nu lucrează într-un departament (right outher join).

SELECT last_name, department_nameFROM employees e, departments dWHERE e.department_id = d.department_id(+);

7. Să se afiseze numele departamentelor si numele salariatilor care lucrează în ele. Se vor afisa sidepartamentele care nu au salariati (left outher join).

SELECT department_name, last_nameFROM employees e, departments dWHERE e.department_id(+) = d.department_id;

8. Să se afiseze numele, job-ul, numele departamentului, salariul si grila de salarizare pentru toti angajatii.

26

Page 113: SOLUTII - Baze de Date - Adunate

SELECT last_name, job_id, salary, department_name, grade_levelFROM employees e, departments d, job_gradesWHERE e.department_id = d.department_idAND salary BETWEEN lowest_sal AND highest_sal;

9. Să se afiseze codul angajatului si numele acestuia, împreună cu numele si codul sefului său direct. Se vor eticheta coloanele Ang#, Angajat, Mgr#, Manager. Să se salveze instrucsiunea într-un fisier numit p3_9.sql.

SELECT a.employee_id “Ang#”, a.last_name “Angajat”, b.employee_id “Mgr#”, b.last_name“Manager”FROM employees a, employees bWHERE a.manager_id = b. employee_id;

SAVE p3_9;

10. Să se modifice p3_9.sql pentru a afisa toti salariatii, inclusiv pe cei care nu au sef.

SELECT e.employee_id Ang#, e.last_name Angajat, e.manager_id Mgr#, m.last_name ManagerFROM employees e, employees mWHERE e.manager_id = m.employee_id(+);

11. Să se afiseze numele salariatului si data angajării împreună cu numele si data angajării sefului direct pentru salariatii care au fost angajati înaintea sefilor lor. Se vor eticheta coloanele Angajat, Data_ang, Manager si Data_mgr.

SELECT e.last_name Angajat, e.hire_date Data_ang, m.last_name Manager, m.hire_date Data_mgrFROM employees e, employees mWHERE e.manager_id = m.employee_id AND e.hire_date<m.hire_date;

12. Pentru fiecare angajat din departamentele 20 si 30 să afiseze numele, codul departamentului si toti colegii săi (salariatii care lucrează în acelasi departament cu el). Se vor eticheta coloanele corespunzător.

SELECT a.last_name “Angajat”, a.department_id ”Departament”, b.last_name “Coleg” FROM employees a, employees bWHERE a.department_id = b.department_idAND a.employee_id <> b.employee_idAND a.department_id IN (20,30)ORDER BY a.last_name;

13. Să se afiseze numele si data angajării pentru salariatii care au fost angajati după Fay.

SELECT last_name, hire_dateFROM employeesWHERE hire_date > (SELECT hire_dateFROM employeesWHERE last_name = ‘Fay’);

SauSELECT a.last_name, a.hire_dateFROM employees a, employees bWHERE UPPER(b.last_name)=’FAY’ AND a.hire_date>b.hire_date;

14. Scrieti o cerere pentru a afisa numele si salariul pentru toti colegii (din acelasi departament) lui Fay. Se va exclude Fay.

SELECT last_name, salary

27

Page 114: SOLUTII - Baze de Date - Adunate

FROM employeesWHERE last_name <> ‘Fay’AND department_id = (SELECT department_idFROM employeesWHERE last_name = ‘Fay’);

SauSELECT last_name, salaryFROM employeesWHERE department_id = (SELECT department_id FROM employees WHERE last_name = 'Fay')AND last_name != 'Fay';

15. Să se afiseze codul departamentului, codul si numele angajatilor care lucrează în acelasi departament cu cel putin un angajat al cărui nume contine litera “T”. Să se ordoneze după codul departamentului.

SELECT employee_id, last_name, department_idFROM employeesWHERE department_id IN (SELECT DISTINCT department_idFROM employeesWHERE UPPER(last_name) LIKE ‘%T%’)ORDER BY department_id;

16. Să se afiseze numele si salariul angajatilor condusi direct de Steven King.

SELECT last_name, salaryFROM employeesWHERE manager_id = (SELECT employee_idFROM employeesWHERE UPPER(last_name) ='KING'AND UPPER(first_name) ='STEVEN' );

17. Să se afiseze numele si job-ul tuturor angajatilor din departamentul ‘Sales’.

SELECT last_name, job_idFROM employees WHERE department_id = (SELECT department_idFROM departmentsWHERE department_name ='Sales');

18. Să se afiseze numele angajatilor, numărul departamentului si job-ul tuturor salariatilor al căror departament este localizat în Seattle.

SELECT last_name, job_id, department_idFROM employeesWHERE department_id IN (SELECT department_idFROM departmentsWHERE location_id = (SELECT location_idFROM locationsWHERE city = ‘Seattle’));

Rezolvati această problemă utilizând join-uri.

19. Să se afle dacă există angajati care nu lucrează în departamentul ‘Sales’ si al căror salariu si comision coincid cu salariul si comisionul unui angajat din departamentul ‘Sales’.

SELECT last_name, salary, commission_pct, department_id

28

Page 115: SOLUTII - Baze de Date - Adunate

FROM employeesWHERE (salary, commission_pct) IN (SELECT salary, commission_pctFROM employees e, departments dWHERE e.department_id = d.department_idAND department_name = ‘Sales’)AND department_id <> (SELECT department_idFROM departmentsWHERE department_name = ‘Sales’);

20. Scrieti o cerere pentru a afisa numele, numele departamentului si salariul angajatilor care nu câstigă comision, dar al căror manager coincide cu managerul unui angajat care câstigă comision.

SELECT last_name, department_name, salaryFROM employees e, departments dWHERE e.department_id = d.department_idAND e.manager_id IN (SELECT DISTINCT manager_idFROM employees WHERE commission_pct IS NOT NULL)AND commission_pct IS NULL;

21. Scrieti o cerere pentru a afisa angajatii care câstigă mai mult decât oricare functionar. Sortati rezultatele după salariu, în ordine descrescătoare.

SELECT last_name, salary, job_idFROM employeesWHERE salary > (SELECT MAX(salary)FROM employeesWHERE job_id LIKE '%CLERK')ORDER BY salary DESC;

22. Să se afiseze codul, numele si salariul tuturor angajatilor care câstigă mai mult decât salariul mediu.

SELECT employee_id, last_name, salaryFROM employeesWHERE salary > (SELECT AVG(salary)FROM employees);

23. Să se afiseze pentru fiecare salariat angajat în luna martie numele său, data angajării si numele jobului.

SELECT last_name, hire_date, job_titleFROM employees e, jobs jWHERE TO_CHAR(hire_date,'MON') = 'MAR'AND e.job_id = j.job_id;

24. Să se afiseze pentru fiecare salariat al cărui câstig total lunar este mai mare decât 12000, numele său, câstigul total lunar si numele departamentului în care lucrează.

SELECT last_name, salary+commission_pct "castig total lunar" , department_nameFROM employees e, departments dWHERE salary+commission_pct > 12000AND e.department_id = d.department_id;

25. Să se afiseze pentru fiecare angajat codul său si numele joburilor sale anterioare, precum si intervalul de timp în care a lucrat pe jobul respectiv.??

SELECT employee_id, job_id, start_date "data angaj job anterior",end_date"data final job anterior",29

Page 116: SOLUTII - Baze de Date - Adunate

ROUND(MONTHS_BETWEEN(end_date, start_date)) "interval angajare"FROM Job_history;/* Nu stiu daca este bine

EMPLOYEE_ID JOB_ID data angaj data final interval angajare----------- ---------- ---------- ---------- ----------------- 102 IT_PROG 13-01-1993 24-07-1998 66 101 AC_ACCOUNT 21-09-1989 27-10-1993 49 101 AC_MGR 28-10-1993 15-03-1997 41 201 MK_REP 17-02-1996 19-12-1999 46 114 ST_CLERK 24-03-1998 31-12-1999 21 122 ST_CLERK 01-01-1999 31-12-1999 12 176 SA_REP 24-03-1998 31-12-1998 9 176 SA_MAN 01-01-1999 31-12-1999 12 200 AC_ACCOUNT 01-07-1994 31-12-1998 54 200 AD_ASST 17-09-1987 17-06-1993 69

26. Să se modifice cererea de la punctul 25 astfel încât să se afiseze si numele angajatului, respectiv codul jobului său curent.

SELECT last_name, job_id, hire_date "data angajarii", SYSDATE "data curenta", ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) "Vechime in firma"FROM employees;

27. Să se modifice cererea de la punctul 26 astfel încât să se afiseze si numele jobului său curent.

SELECT last_name, e.job_id, job_title, hire_date "data angajarii", SYSDATE "data curenta", ROUND(MONTHS_BETWEEN(SYSDATE, hire_date))||' ' ||'luni' "Vechime in firma"FROM employees e, jobs jWHERE e.job_id = j.job_id;

28. Să se afiseze salariatii care au acelasi manager ca si angajatul având codul 140.

SELECT first_name||' '||last_nameFROM employeesWHERE manager_id = ( SELECT manager_id FROM employees WHERE employee_id = 140);

29. Să se afiseze numele departamentelor care functionează în America.

Functii multiple-row (grup). Gruparea datelor.

Aceste tipuri de functii pot fi utilizate pentru a returna informatia corespunzătoare fiecăruia dintre grupurile obtinute în urma divizării liniilor tabelului cu ajutorul clauzei GROUP BY.

Pot apărea în clauzele SELECT, ORDER BY si HAVING. Server-ul Oracle aplică aceste functii fiecărui grup de linii si returnează un singur rezultat pentru fiecare

multime.Exemple de functii grup: AVG, SUM, MAX, MIN, COUNT etc.Tipurile de date ale argumentelor functiilor grup pot fi CHAR, VARCHAR2, NUMBER sau DATE.Functiile AVG si SUM, operează numai asupra valorilor numerice. Functiile MAX si MIN pot opera

asupra valorilor numerice, caracter sau dată calendaristică.Toate functiile grup, cu exceptia lui COUNT(*), ignoră valorile null. COUNT(expresie)

30

Page 117: SOLUTII - Baze de Date - Adunate

returnează numărul de linii pentru care expresia dată nu are valoarea null. FuncŃia COUNT returnează un număr mai mare sau egal cu zero si nu întoarce niciodată valoarea null.

Când este utilizată clauza GROUP BY, server-ul sortează implicit multimea rezultată înordinea crescătoare a valorilor coloanelor după care se realizează gruparea.

Absenta clauzei GROUP BY conduce la aplicarea funcŃiei grup pe mulŃimea tuturor liniilortabelului.

În clauza GROUP BY se trec obligatoriu toate coloanele prezente în clauza SELECT, care nu sunt argument al functiilor grup.

1. Să se afiseze cel mai mare salariu, cel mai mic salariu, suma si media salariilor tuturor angajatilor.Etichetati coloanele Maxim, Minim, Suma, respectiv Media. Să se rotunjească rezultatele.

SELECT MIN(salary) min, MAX(salary) max, SUM(salary) suma, ROUND(AVG(salary)) mediaFROM employees;

2. Utilizând functia grup COUNT să se determine:

a. numărul total de angajati;SELECT COUNT(*) "Total - angajati" FROM employees;

b. numărul de angajati care au manager;SELECT COUNT(*) "angajari cu manager" FROM employees WHERE manager_id IS NOT NULL;

c. numărul de manageri.SELECT COUNT(*) "Numar manageri" FROM employees WHERE manager_id IS NULL;

3. Să se afiseze diferenta dintre cel mai mare si cel mai mic salariu. Etichetati coloana “Diferenta”.

SELECT MAX(salary) - MIN(salary) "Diferenta" FROM employees;

4. Să se listeze numărul de angajati din departamentul având codul 50.

SELECT COUNT(*) "ANGAJATI - DEP_50" FROM employees WHERE department_id = 50;

5. Cati angajati din departamentul 80 câstigă comision?

SELECT COUNT(*) "ANGAJATI CU COMISION" FROM employees WHERE commission_pct IS NOT NULL;

6. Să se selecteze valoarea medie si suma salariilor pentru toti angajatii care sunt reprezentanti de vânzări (SA_MAN, SA_REP).

SELECT AVG(salary) media, SUM(salary) FROM employeesGROUP BY job_id IN ( SA_MAN, SA_REP);

7. Să se selecteze data angajării primei persoane care a fost angajată de companie.

SELECT MIN(hire_date) FROM employees;

8. Să se afiseze numărul de angajati pentru fiecare job.

SELECT job_id, COUNT(employee_id) nr_angajatiFROM employees

31

Page 118: SOLUTII - Baze de Date - Adunate

GROUP BY job_id;

9. Să se afiseze minimul, maximul, suma si media salariilor pentru fiecare departament.

SELECT department_id, MIN(salary), MAX(salary), SUM(salary), AVG(salary) FROM employeesGROUP BY department_id;

10. Să se afiseze codul departamentului si media salariilor pentru fiecare job din cadrul acestuia.

SELECT department_id, job_id, AVG(salary)FROM employeesGROUP BY department_id, job_id;

11. a. Să se afiseze codul departamentelor pentru care salariul minim depăseste 5000$.

SELECT department_id, MIN(salary)FROM employeesGROUP BY department_idHAVING MIN(salary)>5000;

11.b. Să se modifice cererea anterioară astfel încât să se afiseze si orasul în care functionează aceste departamente.

SELECT department_id, MIN(salary), cityFROM employees, locations GROUP BY department_id, cityHAVING MIN(salary) > 5000;

12. Să se obtină codul departamentelor si numărul de angajati al acestora pentru departamentele care au cel putin 10 angajati.

SELECT department_id, COUNT(employee_id)FROM employeesGROUP BY department_idHAVING COUNT(employee_id) >= 10;

13. Să se obtină codul departamentelor si suma salariilor angajatilor care lucrează în acestea, în ordine descrescătoare după sumă. Se consideră angajatii care au comision si departamentele care au mai mult de 5 angajati.

SELECT department_id, SUM(salary)FROM employeesWHERE commission_pct IS NOT NULLGROUP BY department_idHAVING COUNT(employee_id) > 5ORDER BY SUM(salary) DESC;

14. Să se obtină job-ul pentru care salariul mediu este minim.

SELECT job_idFROM employeesGROUP BY job_idHAVING AVG(salary) = (SELECT MIN(AVG(salary))FROM employees

32

Page 119: SOLUTII - Baze de Date - Adunate

GROUP BY job_id);

15. Să se afiseze cel mai mare dintre salariile medii pe departamente.

SELECT AVG(salary)FROM employeesGROUP BY department_idHAVING AVG(salary) = (SELECT MAX(AVG(salary)) FROM employees GROUP BY department_id);

16. a. Să se afiseze codul, numele departamentului si suma salariilor pe departamente.SELECT d.department_id, department_name,a.sumaFROM departments d, (SELECT department_id ,SUM(salary) sumaFROM employeesGROUP BY department_id) aWHERE d.department_id =a.department_id;

b. Dati o altă metodă de rezolvare a acestei probleme.

SELECT d.department_id, department_name, SUM(salary)FROM employees e, departments dWHERE e.department_id = d.department_idGROUP BY d.department_id, department_name;

17. a. Scrieti o cerere pentru a afisa numele departamentului, numărul de angajati si salariul mediu pentru angajatii din acel departament. Coloanele vor fi etichetate Departament, Nr. angajati, Salariu Mediu.

SELECT department_name “Departament”,(SELECT COUNT(employee_id)FROM employeesWHERE department_id = d.department_id ) ” Nr. angajati”,(SELECT AVG(salary)FROM employeesWHERE department_id = d.department_id) ”Salariu mediu”FROM departments d;

b. Dati o altă metodă de rezolvare pentru problema anterioară.

SELECT department_name "Departament", COUNT(employee_id) "Nr. angajati", AVG(salary) "Salariu mediu"FROM employees e, departments dWHERE e.department_id = d.department_idGROUP BY department_name;/* nu returneaza departmanetele care nu au angajati*/

18. Să se creeze o cerere prin care să se afiseze numărul total de angajati si, din acest total, numărul celor care au fost angajati în 1997, 1998, 1999 si 2000. Datele vor fi afisate în forma următoare:

Total 1997 1998 1999 2000--------------------------------------------------------------50 10 5 25 1

SUM(DECODE(TO_CHAR(hire_date,'yyyy'),1997,1,0))

SELECT COUNT(employee_id) "Total",SUM(DECODE(TO_CHAR(hire_date,'yyyy'),1997,1,0)) "1997",SUM(DECODE(TO_CHAR(hire_date,'yyyy'),1998,1,0)) "1998",SUM(DECODE(TO_CHAR(hire_date,'yyyy'),1999,1,0)) "1999",

33

Page 120: SOLUTII - Baze de Date - Adunate

SUM(DECODE(TO_CHAR(hire_date,'yyyy'),2000,1,0)) "2000"FROM employees;

/*afiseaza

Total 1997 1998 1999 2000---------- ---------- ---------- ---------- ---------- 106 28 23 18 11

Operatorii ROLLUP si CUBEClauza GROUP BY permite gruparea liniilor selectate după valorile expresiilor precizate în aceasta.

Pentru fiecare grup, va fi returnată o singură linie de informatie. Clauza GROUP BY poate produce grupări superagregat utilizând extensiile CUBE sau ROLLUP.

ROLLUP - grupează liniile selectate pe baza valorilor primelor n, n - 1, …, 0 expresii din specificatia

GROUP BY si returnează o singură linie pentru fiecare grup. - creează grupări prin deplasarea într-o singură direcŃie, de la dreapta la stânga, de-a

lungul listei de coloane specificate în clauza GROUP BYApoi, se aplică functia agregat acestor grupări. Dacă sunt specificate n expresii în operatorul ROLLUP,

numărul de grupări generate va fi n + 1. Liniile care se bazează pe valoarea primelor n expresii se numesc linii obisnuite, iar celelalte se numesc linii superagregat.

GROUP BY ROLLUP (expr_1, expr_2, …, expr_n) generează n+1 tipuri de linii, corespunzătoare următoarelor grupări:· GROUP BY (expr_1, expr_2, …, expr_n-1, expr_n)· GROUP BY (expr_1, expr_2, …, expr_n-1)· …· GROUP BY (expr_1, expr_2)· GROUP BY (expr_1)· GROUP BY () – corespunzător absentei clauzei GROUP BY si deci, calculului funcŃiilorgrup din cerere pentru întreg tabelul.

CUBE grupează liniile selectate pe baza valorilor tuturor combinatiilor posibile ale expresiilor specificate si returnează câte o linie totalizatoare pentru fiecare grup. Acest operator este folosit pentru a produce multimi de rezultate care sunt utilizate în rapoarte. În vreme ce ROLLUP produce subtotalurile doar pentru o parte dintre combinatiile posibile, operatorul CUBE produce subtotaluri pentru toate combinatiile posibile de grupări specificate în clauza GROUP BY, precum si un total general.

Dacă există n coloane sau expresii în clauza GROUP BY, vor exista 2n combinatii posibile superagregat.

19. Să se afiseze codurile departamentelor în care lucrează cel putin un angajat, iar pentru fiecare dintre acestea si pentru fiecare manager care lucrează în departamentul respectiv să se afiseze numărul de salariati. De asemenea, să se afiseze numărul de salariati pentru fiecare departament indiferent de manager si numărul total de angajati din companie.

SELECT department_id, manager_id, COUNT(employee_id)FROM employeesWHERE manager_id IS NOT NULL AND department_id IS NOT NULLGROUP BY ROLLUP (department_id, manager_id);

20. Să se afiseze codurile departamentelor în care lucrează cel putin un angajat, iar pentru fiecare dintre acestea si pentru fiecare manager care lucrează în departamentul respectiv să se afiseze numărul de salariati. De asemenea, să se afiseze numărul de salariati pentru fiecare departament indiferent de manager, numărul de angajati subordonati unui manager indiferent de departament si numărul total de angajati din companie.

34

Page 121: SOLUTII - Baze de Date - Adunate

SELECT department_id, manager_id, COUNT(employee_id)FROM employeesWHERE manager_id IS NOT NULL AND department_id IS NOT NULLGROUP BY CUBE (department_id, manager_id);

21. Pentru fiecare departament, job, respectiv an al angajării să se afiseze numărul de salariati. De asemenea se va afisa numărul de angajati:- pentru fiecare departament si job, indiferent de anul angajării;- pentru fiecare departament, indiferent de job si de anul angajării;- la nivel de companie.

Exemplu:Să se afiseze valoarea totală a operelor de artă ale unui autor, expuse în cadrul fiecărei galerii având codul mai mic decât 50. De asemenea, să se afiseze valoarea totală a operelor din fiecare galerie având codul mai mic decât 50, valoarea totală a operelor fiecărui autor indiferent de galerie si valoarea totală a operelor din galeriile având codul mai mic decât 50.

SELECT cod_galerie, cod_artist, SUM(valoare)FROM operaWHERE cod_galerie < 50GROUP BY CUBE(cod_galerie, cod_artist);

22. Să se afiseze suma alocată pentru plata salariilor pe joburi (codul jobului), în cadrul departamentului (codul departamentului). De asemenea, să se afiseze valoarea totală necesară pentru plata salariilor la nivel de departament, valoarea totală necesară pentru plata salariilor la nivel de job, indiferent de departament si valoarea totală necesară pentru plata salariilor la nivel de companie.

23. Functia GROUPING(expresie) întoarce:- valoarea 0, dacă expresia a fost utilizată pentru calculul valorii agregat- valoarea 1, dacă expresia nu a fost utilizată.

24. Să se afiseze numele departamentelor, titlurile job-urilor si valoarea medie a salariilor, pentru:- fiecare departament si, în cadrul său pentru fiecare job;- fiecare departament (indiferent de job);- întreg tabelul.De asemenea, să se afiseze si o coloană care indică intervenŃia coloanelor department_name si job_title în obtinerea rezultatului.

SET LINESIZE 100COLUMN job FORMAT ‘99’COLUMN dept FORMAT ‘99’ SELECT department_name, job_title, AVG(salary) medie, GROUPING(department_name) dept, GROUPING(job_title) job FROM employees e, departments d, jobs jWHERE e.department_id = d.department_id AND e.job_id = j.job_idGROUP BY ROLLUP(department_name, job_title);

25. Modificati cererea anterioară astfel încât să se afiseze numele departamentelor, titlurile job-urilor si valoarea medie a salariilor, pentru:- fiecare departament si, în cadrul său pentru fiecare job;- fiecare departament (indiferent de job);- fiecare job(indiferent de departament);- întreg tabelul.

35

Page 122: SOLUTII - Baze de Date - Adunate

Cum intervin coloanele în obtinerea rezultatului? Să se afiseze ’Dept’, dacă departamentul a intervenit în agregare si ‘Job’, dacă job-ul a intervenit în agregare.DECODE(GROUPING(department_name), 0, ‘Dept’)

SELECT department_name, job_title, AVG(salary) medie,DECODE(GROUPING(department_name), 0, ‘Dept’) dept,DECODE(GROUPING(job_title), 0, ‘Job’) jobFROM employees e, departments d, jobs jWHERE e.department_id = d.department_id AND e.job_id = j.job_idGROUP BY CUBE(department_name, job_title);

26. Utilizati cererea de la punctul 20.a. Eliminati clauza WHERE din această cerere. Analizati rezultatul obtinut.b. Modificati cererea obtinută astfel încât să se identifice dacă o valoare null din rezultat este stocată pe una dintre coloanele manager_id sau department_id sau este produsă de operatorul CUBE.

/*Cererea de la pct.20*/SELECT department_id, manager_id, COUNT(employee_id)FROM employeesWHERE manager_id IS NOT NULL AND department_id IS NOT NULLGROUP BY CUBE (department_id, manager_id);/* 54 de inregistrari selectate*/

SELECT department_id, manager_id, COUNT(employee_id)FROM employeesGROUP BY CUBE (department_id, manager_id);/*58 înregistrãri selectate.*//* se afiseaza departamentele care nu au angajati si angajatii care nu fac parte din nici un departament

27. Clauza GROUPING SETS. Permite obtinerea numai a anumitor grupări superagregat. Acestea pot fi precizate prin intermediul clauzei:GROUP BY GROUPING SETS ((expr_11, expr_12, …, expr_1n), (expr_21, expr_22, …expr_2m),…)

28. Să se afiseze numele departamentelor, numele job-urilor, codurile managerilor angajatilor, maximul si suma salariilor pentru:- fiecare departament si, în cadrul său, fiecare job;- fiecare job si, în cadrul său, pentru fiecare manager;- întreg tabelul.GROUPING SETS ((department_name, job_title), (job_title, e.manager_id), ());

SELECT department_name, job_title, e.manager_id, MAX(salary) “Maxim”, SUM(salary) “Suma” FROM employees e, departments d, jobs jWHERE e.department_id = d.department_id AND e.job_id = j.job_idGROUP BY GROUPING SETS ((department_name, job_title), (job_title, e.manager_id), ());

Limbajul de control al datelor (DCL). COMMIT, SAVEPOINT, ROLLBACK.

· Comanda COMMIT permanentizează modificările care au fost realizate de tranzactia curentă (o tranzactie este un set de comenzi LMD); comanda suprimă toate punctele intermediare definite în tranzactie si eliberează blocările tranzactiei.

36

Page 123: SOLUTII - Baze de Date - Adunate

Observatie:Sistemul realizează COMMIT implicit:- la închiderea normală a unui client Oracle (de exemplu SQL*Plus),- după fiecare comandă LDD (CREATE, ALTER, DROP).

· Comanda SAVEPOINT marchează un punct intermediar în procesarea tranzactiei. În acest mod este posibilă împărtirea tranzactiei în subtranzactii.

Comanda SAVEPOINT are sintaxa:

SAVEPOINT nume_pct_intermediar;

· Comanda ROLLBACK permite renuntarea la modificările efectuate; aceasta determină încheierea tranzactiei, anularea modificărilor asupra datelor si restaurarea stării lor precedente.

Comanda ROLLBACK are sintaxa:

ROLLBACK [TO SAVEPOINT nume_punct_salvare];

Observatii:- sistemul realizează ROLLBACK implicit dacă se închide anormal (defectiune hardware sau software, pană de curent etc.);- nici o comanda LDD (CREATE, ALTER; DROP) nu poate fi anulată.

1. Ce efect are următoarea secventă de instructiuni?

CREATE TABLE dept1AS SELECT * FROM departments;SELECT * FROM dept1;SAVEPOINT a;/* punct de salvare creat*/DELETE FROM dept1;INSERT INTO dept1VALUES (300,’Economic’,100,1000);/*EROARE la linia 1:ORA-00913: prea multe valori*/INSERT INTO dept1VALUES (350,’Cercetare’,200,2000);/*EROARE la linia 1:ORA-00913: prea multe valori*/SAVEPOINT b;/* punct de salvare creat*/INSERT INTO dept1VALUES (400,’Juritic’,150,3000);SELECT COUNT(*)FROM dept1;*/ COUNT(*)---------- 0*/ROLLBACK TO b;/* revenire incheiataSELECT COUNT(*)FROM dept1; */COUNT(*)---------- 0*/

37

Page 124: SOLUTII - Baze de Date - Adunate

ROLLBACK TO a;*/ punct de salvare creatINSERT INTO dept1VALUES (500,’Contabilitate’,175,1500);*/EROARE la linia 1: ORA-00913: prea multe valori*/COMMIT;*/Confirmare finalizatã.*/SELECT *FROM dept1; */nici o înregistrare selectatã*/

Limbajul de prelucrare a datelor (DML). INSERT, UPDATE, DELETE.

1. Să se creeze tabele emp_*** si dept_***, având aceeasi structură si date ca si tabelele employees,respectiv departments.CREATE TABLE emp AS SELECT * FROM employees;CREATE TABLE dept AS SELECT * FROM departments;

2. Să se selecteze toate înregistrările din cele două tabele create anterior.SELECT * FROM emp;SELECT * from dept;

3.Stergeti toate înregistrările din cele 2 tabele create anterior. Salvati modificările.

DELETE FROM emp;DELETE FROM dept;COMMIT;

4. Să se listeze structura tabelului employees si să se compare cu structura tabelului emp_***. Ce observati?

DESCRIBE employees;DESCRIBE emp;/*Au aceeasi structura.*/

5. Sintaxa simplificată a comenzii INSERT

- pentru inserarea unei singure linii:INSERT INTO nume_tabel [(col1,col2,...)]VALUES (expresie1, expresie2, ...);

- pentru inserarea liniilor rezultat ale unei comenzi SELECT:INSERT INTO nume_tabel [(col1,col2,...)]comanda_SELECT;

6. Să se exemplifice câteva dintre erorile care pot să apară la inserare si să se observe mesajul returnat de sistem.

- lipsa de valori pentru coloane NOT NULL (coloana department_name este definită NOT NULL)INSERT INTO dept (department_id, location_id)VALUES (200, 2000);*/EROARE la linia 1: ORA-01400: nu poate fi inserat NULL în ("SCOTT"."DEPT3"."DEPARTMENT_NAME")*/

- nepotrivirea listei de coloane cu cea de expresiiINSERT INTO deptVALUES (200, 2000);INSERT INTO dept(department_id, department_name,location_id)VALUES (200, 2000);

38

Page 125: SOLUTII - Baze de Date - Adunate

*/EROARE la linia 2: ORA-00947: valori prea putine*/

- nepotrivirea tipului de dateINSERT INTO dept (department_id, location_id)VALUES (‘D23’, 2000);*/EROARE la linia 2: ORA-01722: numãr eronat*/

- valoare prea mare pentru coloanăINSERT INTO dept_*** (department_id, location_id)VALUES (15000, 2000);7. Inserati în tabelul emp_*** salariatii (din tabelul employees) al căror comision depăseste 25% din salariu.

INSERT INTO empSELECT * FROM employees WHERE salary*0.25 < commission_pct ;

8. Creati tabele emp1_***, emp2_*** si emp3_*** cu aceeasi structură ca tabelul employees. Inserati, utilizând o singură comandă INSERT, informatii din tabelul employees:- în tabelul emp1_*** salariatii care au salariul mai mic decât 6000;- în tabelul emp2_*** salariatii care au salariul cuprins între 6000 si 10000;- în tabelul emp3_*** salariatii care au salariul mai mare decât 10000.Verificati rezultatele, apoi stergeti toate înregistrările din aceste tabele.Obs. Clauza ALL a comenzii INSERT determină evaluarea tuturor conditiilor din clauzele WHEN. Pentru cele a căror valoare este TRUE, se inserează înregistrarea specificată în optiunea INTO corespunzătoare.

CREATE TABLE emp1_1 AS SELECT * FROM employees WHERE 1=0;CREATE TABLE emp2_1 AS SELECT * FROM employees WHERE 1=0;CREATE TABLE emp3_1 AS SELECT * FROM employees WHERE 1=0;INSERT ALLWHEN salary < =6000 THENINTO emp1_1WHEN salary > = 6000 AND salary <= 10000 THENINTO emp2_1ELSE INTO emp3_1SELECT * FROM employees;DELETE FROM emp1_1;DELETE FROM emp2_1;DELETE FROM emp3_1;COMMIT;

9. Să se creeze tabelul emp0_*** cu aceeasi structură ca tabelul employees. Inserati, utilizând o singurăcomandă INSERT, informatii din tabelul employees:- în tabelul emp0_*** salariatii care lucrează în departamentul 80;- în tabelul emp1_*** salariatii care au salariul mai mic decât 6000 (care nu se regăsesc în tabelulemp0_***);- în tabelul emp2_*** salariatii care au salariul cuprins între 6000 si 10000 (care nu se regăsesc întabelele emp0_*** si emp1_***);- în tabelul emp3_*** salariatii care au salariul mai mare decât 10000 (care nu se regăsesc în tabeleleemp0_***, emp1_*** si emp2_***).Obs.Clauza FIRST a comenzii INSERT determină inserarea corespunzătoare primei clauze WHEN a cărei conditie este evaluată TRUE. Toate celelalte clauze WHEN sunt ignorate.

39

Page 126: SOLUTII - Baze de Date - Adunate

CREATE TABLE emp0_1 AS SELECT * FROM employees WHERE 1=0;INSERT FIRST WHEN department_id = 80 THEN INTO emp0_1 WHEN salary <= 6000 THEN INTO emp1_1 WHEN salary > = 6000 AND salary <= 10000 THEN INTO emp2_1 ELSE INTO emp3_1 SELECT * FROM employees;

10. Sintaxa simplificată a comenzii DELETEDELETE FROM nume_tabel[WHERE conditie];

11. Stergeti toate înregistrările din tabelele emp_*** si dept_***. Inserati în aceste tabele toate înregistrările corespunzătoare din employees, respectiv departments. Permanentizati tranzactia.

DELETE FROM dept;DELETE FROM emp;INSERT INTO empSELECT * FROM employees;INSERT INTO deptSELECT * FROM departments;COMMIT;

12. Stergeti angajatii care nu au comision. Anulati modificările.DELETE FROM emp_***WHERE commission_pct IS NULL;ROLLBACK;

DELETE FROM empWHERE commission IS NULL;ROLLBACK;

13. Eliminati departamentele care nu au nici un angajat. Anulati modificările.

DELETE FROM deptWHERE department_id NOT IN (SELECT DISTINCT department_idFROM empWHERE department_id IS NOT NULL);ROLLBACK;

14. Eliminati angajatii care nu apartin unui departament valid. Anulati modificările.

DELETE FROM empWHERE department_id NOT IN (SELECT department_idFROM dept)OR department_id IS NULL;ROLLBACK;

15. Sintaxa simplificată a comenzii UPDATE:

40

Page 127: SOLUTII - Baze de Date - Adunate

UPDATE nume_tabel [alias]SET col1 = expr1[, col2=expr2][WHERE conditie];sauUPDATE nume_tabel [alias]SET (col1,col2,...) = (subcerere)[WHERE conditie];

16. Măriti salariul tuturor angajatilor din tabelul emp_*** cu 5%. Anulati modificările.

UPDATE empSET salary = salary * 1.05;ROLLBACK;

17. Schimbati jobul tuturor salariatilor din departamentul 80 care au comision în 'SA_REP'. Anulati modificările.

UPDATE empSET job_id = 'SA_REP'WHERE department_id=80 AND commission_pct IS NOT NULL;ROLLBACK;

UPDATE empSET job_id = 99WHERE department_id=80 AND commission IS NOT NULL;ROLLBACK;

18. Să se modifice jobul si departamentul angajatului având codul 114, astfel încât să fie la fel cu cele ale angajatului având codul 205.

UPDATE empSET (job_id, department_id) = (SELECT job_id, department_idFROM empWHERE employee_id = 205)WHERE employee_id = 114;ROLLBACK;

19. Schimbati salariul si comisionul celui mai prost plătit salariat din firmă, astfel încât să fie egale cu salariul si comisionul directorului.

DELETE FROM emp WHERE employee_id = 123;UPDATE empSET (salary, commission) = (SELECT salary, commissionFROM empWHERE manager_id IS NULL)WHERE salary = (SELECT MIN(salary)FROM emp);ROLLBACK;

20. Pentru fiecare departament să se mărească salariul celor care au fost angajaŃi primii astfel încât să devină media salariilor din companie.

UPDATE emp eSET salary = (SELECT AVG(salary)FROM emp)WHERE hire_date = (SELECT MIN(hire_date)

41

Page 128: SOLUTII - Baze de Date - Adunate

FROM empWHERE department_id=e.department_id);ROLLBACK;

21. Să se modifice valoarea emailului pentru angajatii care câstigă cel mai mult în departamentul în care lucrează astfel încât acesta să devină initiala numelui concatenată cu prenumele. Dacă nu are prenume atunci în loc de acesta apare caracterul ‘.’. Anulati modificările.

UPDATE empSET email = LOWER(SUBSTR(first_name,1,1)) || LOWER(NVL(last_name, '. '))WHERE (department_id, salary) IN (SELECT department_id, MAX(salary)FROM empGROUP BY department_id);ROLLBACK;

42

Page 129: SOLUTII - Baze de Date - Adunate

baze_de_date

Probleme pentru examenul de licenta

1. O baza de date relationala este

a.

b.

c.

d.

O colectie de date interrelationate gestionate ca o singura unitate Un produs software furnizat de un producator de baze de date

O structura de date, cum ar fi un tabel, o vizualizare sau un index

Definita in acelasi mod de toti producatorii de software

2. Un Obiect al unei baze de date este

a.

b.

c.

d.

O colectie de inregistrari inrudite, stocate ca o singura unitate Un produs software furnizat de un producator de baze de date

O structura, cum ar fi un tabel, o vizualizare sau un index

O colectie de date interrelationate gestionate ca o singuraunitate

Care din urmtoarele baze de date nu este un RDBMS (sistem de gestionare a bazelorde date relatioanale)

3.

a.

b.

c.

d.

Oracle Database MySQL

Excel Database

Microsoft SQL Server

Un sistem RDBMS(sistem de gestionare a bazelor de date relatioanale) nu include serviciu

urmatorul

4.

a.

b.

Acceptarea unui limbaj de interogare Mecanisme de securitate, pentru a impiedica accesul si modificarea neautorizata a

datelor

Mutarea datelor in si din fisiere de date, dupa cum este necesar

Generarea diagramelor ERD (Entity Relationship Diagram)

c.

d.

Componentele unei baze de date relationale nu includ

5.

a.

b.

c.

d.

Tabele Diagrame

ERD

Restrictii Relatii Printre tipurile de restrictii care pot fi folosite in bazele de date relationale, nu se numara

6.

a.

b.

c.

d.

e.

NOT NULL

Relatii

CHECK

Cheie primara Unicitate

Normalizarea nu rezolva

7.

a.

b.

c.

d.

Anomalia de stergere Anomalia de actualizare

Anomalia de inserare

Anomalia de creare

Un identificator unic (cheie primara)

8.

a. Poate fi compus numai dintr-un singur atribut

Page 130: SOLUTII - Baze de Date - Adunate

b.

c.

d.

Poate fi compus din atribute concatenate Poate fi compus din atribute cu valoarea NULL

Poate fi compus din zero, unul sau mai multe atribute

9. Prima forma normala rezolva anomaliile cauzate de

a.

b.

c.

d.

Grupurile repetitive si atributele multivaloare Dependentele partiale de cheia primara

Dependentele tranzitive

Relatiile de tip unu-la-mai-multi A doua forma normala rezolva anomaliile cauzate de

10.

a.

b.

c.

d.

Grupurile repetitive

Dependentele partiale de cheia primara Grupurile repetitive si atributele multi valoare

Dependentele tranzitive

11. A treia forma normala rezolva anomaliile cauzate de

a.

b.

c.

d.

Dependentele partiale de cheia primara Grupurile repetitive

Dependentele tranzitive

Atributele multivaloare

Problemele de dependenŃă tranzitivă

12.

a.

b.

c.

d.

Sunt rezolvate de a doua formă normală Sunt rezolvate de prima formă normală Apar atunci când un atribut non-cheie depinde doar de o parte a cheii primare

Sunt rezolvate de a treia formă normală

SQL este

13.

a. b.

c.

d.

Un limbaj procedural

Un limbaj neprocedural

Un limbaj orientat spre obiecte

Un limbaj grafic, folosit pentru definirea diagramelor ER si a diagramelor

conceptuale

Un model de date reprezinta o colectie integrata de concepte care nu descriu

14.

a.

b.

c.

d.

date relatii dintre date date despre echipa realizatoare a modelului

constrângeri existente asupra datelor sistemului real analizat.

15. Nu este caracteristica a modelului relational

a.

b.

c.

prezenta tuplurilor identice articolele unui domeniu sunt omogene

toate valorile unui domeniu corespunzatoare tuturor cazurilor nu mai pot fi

descompuse in alte valori (sunt atomice)

fiecare coloana defineste un domeniu distinct si nu se poate repeta in cadrul

aceleiasi relatii

d.

Modelul relational nu are ca regula de integritate structurala

16.

a.

b.

Unicitatea cheii. Cheia primara trebuie sa fie unica si minimala. Integritatea entitatii. Atributele cheii primare trebuie sa fie diferite de valoarea

null.

Page 131: SOLUTII - Baze de Date - Adunate

c. Integritatea referirii. O cheie externa trebuie sa corespunda unei valori a cheii

primare asociate. d. Integritatea referirii. O cheie externa trebuie sa fie ori null in intregime, ori sacorespunda unei valori a cheii primare asociate.

17. Relatia m:n devine in modelul relational

a. tabel asociativ cu cheia primara formata numai din doua chei externe pentru cele doua tabele asociate

tabel asociativ cu cheia primara formata din doua chei externe pentru cele

doua tabele asociate plus eventuale coloane aditionale chei externe

entitate independenta

b.

c.

d.

Care nu este un concept utilizat pentru a descrie formal - uzual - fizic elementele dbaza ale organizarii datelor

18.

a.

b.

c.

d.

relatie - tablou- fisier tuplu - linie- inregistrare atribut - coloana - camp

domeniu - zona- functie

Instructiunile SQL nu fac parte din categoria

19.

a.

b.

c.

d.

Limbajul de interogare a datelor (DQL) Limbajul de definire a datelor (DDL - Data Definition Language)

Limbajul de selectare a datelor (DSL - Data Selection Language)

Limbajul de manipulare a datelor (DML - Data Manipulation Language)

20. Limbajul de definire a datelor (DDL - Data Definition Language) nu include urmatoarea instructiune

a.

b.

c.

d.

DELETECREATE

ALTER DROP

Limbajul de manipulare a datelor (DML – Data Manipulation Language) nu include instructiuniea

21.

a. b.

c.

d.

INSERT

UPDATE DELETE

ALTER

Tipurile de date temporale standard nu includ

22.

a.

b.

c.

d.

DATE

DATETIME TIME

TIMESTAMP

Valorile NULL

23.

a.

b.

c.

d.

Sunt egale cu alte valori NULL Este acelasi lucru ca si spatiile libere

Sunt intotdeauna permise in mod prestabilit

Pot fi folosite pentru reprezentarea datelor care lipsesc sau nu sunt

cunoscute

24. Definitia unei coloane din instructiunea CREATE TABLE nu poate include

a.

b.

c.

Numele tabelului O clauza DEFAULT

O clauza NULL sau NOT NULL

Page 132: SOLUTII - Baze de Date - Adunate

d. Numele coloanei

25. Sintaxa corecta pentru o restrictie NOT NULL este

a.

b.

c.

d.

nume_coloana nume_coloana

nume_coloan

a

REFERENCES NOT NULL tip_de_DATA IS NOT NULL

tip_de_DATA NOT NULL DEFAULT [NULL | NOT NULL]

26. Sintaxa corecta pentru o restrictie UNIQUE este

a.

b.

c.

d.

[CONSTRAINT nume_restrictie] UNIQUE {nume_coloana[,nume coloana...]) [CONSTRAINT nume_restrictie] UNIQUE (nume_tabel)

nume_coloana REFERENCES UNIQUE nume_tabel

DEFAULT UNIQUE (nume_coloana) Sintaxa corecta pentru o restrictie referentiala asupra unei coloane este

27.

a.

b.

c.

d.

CONSTRAINT nume_restrictie] REFERENCES nume_tabel nume_coloana REFERENCES nume_tabel

FOREIGN KEY nume_coloana REFERENCES nume_tabel (nume_coloana)

REFERENCES nume_tabel (nume_coloana)

Utilizarile valide ale instructiunii ALTER TABLE nu include

28.

a.

b.

c.

d.

Adaugarea coloanelor Eliminarea unei chei primare

Redenumirea unui tabel

Adaugarea unei restrictii

29. Nu este functie SQL standard pentru siruri de caractere

a.

b.

c.

d.

UPPER LENGTH sau LEN

LOWER

LIKE

Operatorul UNION

30.

a.

b.

Include randurile duplicate in setul de rezultate

Combina seturile de rezultate a doua interogari intr-un singur set de

rezultate si elimina randurile duplicate din setul de rezultate Combina doua interogari intr-o singura interogare de tip join

Este numit JOIN in unele implementari SQL

c.

d.

O instructiune SQL care contine o functie de agregare

31.

a.

b.

c.

d.

Nu poate include, in acelasi timp, o clauza GROUP BY si o clauza ORDER BY Trebuie sa includa o clauza GROUP BY

Trebuie sa includa o clauza ORDER BY

Poate contine si coloane obisnuite si coloane calculate

32. Care este varianta corecta pentru a crea tabelul Salariat, cu caracteristicile de mai jos?

de dimensiunenumar de 10

COD _ANG

NUME

PRENUME

DATA_ANG VARST

A

EMAIL

SALARIU

not null numeric de 5

sir

caractere de

maxim

20

sir caractere

de maxim 20

date,

valoare

implicita

data curentă

numeric

de 2

sir de

caractere de

dimensiune

fixa, de 30

valoare

implicita

0

cu 2

zecimale

Page 133: SOLUTII - Baze de Date - Adunate

a. CREATE TABLE SALARIAT (

cod_ang NUMBER(5) NOT

NULL, nume VARCHAR2(20),

prenume VARCHAR2(20),

data_angajarii DATE DEFAULT

SYSDATE, varsta NUMBER(2),

email CHAR(50),

salariu NUMBER(10,2) DEFAULT 0);

CREATE TABLE SALARIAT ( cod_ang NUMBER(5)

nume VARCHAR2(20),

prenume VARCHAR2(20),

data_angajarii DATE ,

varsta NUMBER(2),

email CHAR(50),

salariu NUMBER(10,2) DEFAULT 0);

CREATE TABLE SALARIAT (

cod_ang NUMBER(5) , NOT NULL,

nume VARCHAR2(20),

prenume VARCHAR2(20),

data_angajarii DATE , DEFAULT SYSDATE,

varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2) , DEFAULT 0);

b.

c.

33. Pentru a insera in tabelul SALARIAT inregistrari

implicita

10 cu 2

care varianta este incorecta?

a. INSERT INTO SALARIAT(COD _ANG, NUME, PRENUME, DATA_ANG, VARSTA, EMAIL,

SALARIU) VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘[email protected]’, 2500.50)

INSERT INTO SALARIAT(COD _ANG, NUME, PRENUME, VARSTA, EMAIL)

VALUES(5, ‘Ene’, ‘Ana’, 20, ‘[email protected]’)

INSERT INTO SALARIAT(COD _ANG, NUME,PRENUME,VARSTA,EMAIL,

SALARIU) VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘[email protected]’)

INSERT INTO SALARIAT

VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘[email protected]’, 2500.50)

b.

c.

d.

34. Care este varianta corecta pentru a crea tabelul CARTE, cu caracteristicile de mai jos, indicand cheile la nive

de coloana?

(Tabelele DOMENIU_CARTE si CARTE sunt in relatia 1:M)

CARTE(codc CHAR(5), titlu VARCHAR2(30), autor VARCHAR2(30), pret NUMBER(8,2), nrex

NUMBER(3), coddom CHAR(5))

a. CREATE TABLE CARTE

COD _ANG

NUME

PRENUME DATA_AN

G

VARSTA

EMAIL

SALARIU

not null numeric de 5

sir

caractere de

maxim 20

sir caractere

de maxim 20

date,

valoare

implicita data

curentă

numeric de 2

sir de

caractere

de

dimensiune

fixa, de 30

valoare

0

numar de

zecimale

Page 134: SOLUTII - Baze de Date - Adunate

(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));

35. 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?

CARTE(codc CHAR(5) , titlu VARCHAR2(30), autor VARCHAR2(30), pret NUMBER(8,2), nrex

NUMBER(3), coddom CHAR(5))

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),

Page 135: SOLUTII - Baze de Date - Adunate

coddom CHAR(5) NOT NULL REFERENCES DOMENIU(coddom));

c. CREATE TABLE CARTE

(codc

titlu

auto

r

pret

CHAR(5),

VARCHAR2(30),

VARCHAR2(30),

NUMBER(8,2), nrex NUMBER(3),

coddom CHAR(5) NOT

NULL, PRIMARY KEY

(codc),

FOREIGN KEY (coddom)

REFERENCES DOMENIU

36. Sa se creeze tabelul asociativ imprumuta, a carui structura este data mai jos(codc, codcit si

dataim sunt chei primare). Sa se precizeze legatura cu tabelele carte si cititor, aflate in relatia M:M

(mai multi la mai multi)

a. IMPRUMUTA (

codc

codcit

dataim

datare

s

dataef

CHAR(5),

CHAR(5),

DATE DEFAULT

SYSDATE,

DATE, DATE, PRIMARY KEY (codel, codec, dataim),

FOREIGN KEY (codc)

REFERENCES CARTE

(codc), FOREIGN KEY (codcit)

REFERENCES

CITITOR(codcit)); b. IMPRUMUTA (

codc codcit

dataim

datares

dataef

CHAR(5) PRIMARY KEY, CHAR(5) PRIMARY KEY,

DATE DEFAULT SYSDATE PRIMARY KEY,

DATE,

DATE,

FOREIGN KEY (codc) REFERENCES CARTE (codc),

FOREIGN KEY (codcit)

REFERENCES CITITOR(codcit));

IMPRUMUTA ( c.

codc codcit

dataim

datares

dataef

CHAR(5) REFERENCES CARTE (codc), CHAR(5) REFERENCES CITITOR(codcit),

DATE DEFAULT SYSDATE,

DATE,

DATE,

PRIMARY KEY (codel, codec, dataim));

37. Sa se creeze tabelul CARTE_INFO(codc, titlu, autor) prin copiere din tabelu

Page 136: SOLUTII - Baze de Date - Adunate

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 titlu

autor

CHAR(5), VARCHAR2(30),

VARCHAR2(30),

FROM CARTE PRIMARY KEY (codc),

FOREIGN KEY (coddom)

REFERENCES DOMENIU (coddom));

b. CREATE TABLE CARTE_INFO (codc CHAR(5) PRIMARY

KEY, titlu

autor

VARCHAR2(30),

VARCHAR2(30),

FROM CARTE WHERE coddom = ’I’;

CREATE TABLE CARTE_INFO

AS SELECT codc, titlu, autor

FROM CARTE

WHERE coddom = ’I’;

c.

38. Pentru a introduce in tabelul SALARIAT

0

10 cu 2

doua coloane: Cod_Funct si Email ce varianta folosim?

a. ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER COLUMN ADD Email char(25);

ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ADD Email CHAR(25);

ALTER TABLE SALARIAT ADD (Cod_Funct NUMBER(2) , Email CHAR(25));

ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER ADD Email

char(25);

b. c.

d.

39. Ce comanda creeaza tabelul SALARIAT_1 care să aiba aceeiasi structura c

tabelul SALARIAT

implicita

numar de

COD _ANG

NUME

PRENUME DATA_AN

G

VARST

A

EMAIL

SALARIU

not null numeric de 5

sir de

caractere de

maxim 20

sir caractere

de maxim 20

date,

valoare

implicita data

curentă

numeric

de 2

sir de caractere

de

dimensiune

fixa, de 30

valoare

0

COD

_ANG

NUME

PRENUME DATA_AN

G

VARSTA

SALARIU

not null numeric de 5

sircaractere

de maxim 20

sir caractere

de maxim 20

date,

valoare

implicita data

curentă

numeric de 2

valoare

implicita

numar de

zecimale

Page 137: SOLUTII - Baze de Date - Adunate

si sa contina salariatii care au salariu >100? a. CREATE TABLE SALARIAT_1

SELECT * FROM SALARIAT WHERE SALARIU>100;

CREATE TABLE SALARIAT_1

AS SELECT * FROM SALARIAT WHERE SALARIU>100;

CREATE TABLE SALARIAT_1 AS SELECT FROM SALARIAT WHERE SALARIU>100;

CREATE TABLE SALARIAT_1 AS SELECT COD_ANG, SALARIU FROM SALARIAT WHERE SALARIU>100;

b.

c.

d.

40. Ce comanda sterge din tabelul SALARIAT

implicita

numar de

zecimale

coloana nume si coloana salariu?

a. ALTER TABLE SALARIAT DROP nume, salariu;

ALTER TABLE SALARIAT

DROP COLUMN (nume, salariu);

ALTER TABLE

SALARIAT DROP (nume,

salariu);

ALTER TABLE SALARIAT

DROP COLUMN nume, COLUMN salariu;

b.

c.

d.

41. Ce comanda creeaza corect tabelul SALARIAT, specificand constrangerile?

numar de

zecimale

a. CREATE TABLE salariat(

cod_ang NUMBER(5) PRIMARY

KEY, nume VARCHAR2(20) NOT

NULL, prenume VARCHAR2(20),

data_ang DATE DEFAULT

SYSDATE, varsta NUMBER(2),

email CHAR(30) UNIQUE,

salariu NUMBER(10,2) CHECK (salariu >

0));

COD _ANG

NUME

PRENUME DATA_AN

G

VARSTA

EMAIL

SALARIU

cheie

primara numeric de 5

not null

sir de caractere de

maxim 20

sir caractere

de maxim 20

date, valoare

implicita data

curentă

numeric de 2

unic

sir de caractere

de

dimensiun

e fixa,

de

30

> 0

10 cu 2

COD

_ANG

NUME

PRENUME DATA_AN

G

VARSTA

EMAIL

SALARIU

not null numeric de 5

sir de

caractere de

maxim 20

sir caractere

de maxim 20

date, valoare

implicita

data curentă

numeric

de

2

sir de

caractere

de

dimensiune

fixa, de 30

valoare

0

10 cu 2

10 cu 2

zecimale

Page 138: SOLUTII - Baze de Date - Adunate

b. CREATE TABLE salariat(

cod_ang NUMBER(5) PRIMARY KEY,

nume VARCHAR2(20) NOT NULL,

prenume VARCHAR2(20),

data_ang DATE DEFAULT SYSDATE,

varsta NUMBER(2), email CHAR(30) UNIQUE, salariu NUMBER(10,2) > 0));

c. CREATE TABLE salariat(

cod_ang NUMBER(5) PRIMARY KEY,

nume VARCHAR2(20) NOT NULL,

prenume VARCHAR2(20),

data_ang DATE DEFAULT SYSDATE,

varsta NUMBER(2),

email CHAR(30),

salariu NUMBER(10,2) CHECK (salariu > 0));

42. 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; ALTER TABLE IMPRUMUTA

ADD PRIMARY KEY cod_cititor, cod_carte, data_imprumut;

ALTER TABLE IMPRUMUTA

ADD CONSTRAINT cp PRIMARY KEY (cod_cititor, cod_carte,

data_imprumut);

ALTER TABLE IMPRUMUTA ADD PRIMARY KEY (cod_cititor, cod_carte, data_imprumut);

b.

c.

d.

43. Pentru tabelul Salariat

care este comanda corecta, pentru a modifica salariu la 3000, pentru angajatii care lucreaza in departamentu10 si au salariul<3000?

a. UPDATE salariat SET salariu=3000

WHERE cod_depart=10 AND salariu<3000;

MODIFY salariat SET salariu=3000

WHERE cod_depart=10 , salariu<3000;

UPDATE salariat SET cod_depart=10 AND

salariu<3000 WHERE salariu=3000;

MODIFY salariat SET salariu=3000 WHERE cod_depart=10 AND salariu<3000;

b.

c.

d.

44. Să se insereze în tabelul CARTE toate cărŃile din tabelul CARTE_INFO, presupunând că tabelul

CARTE_INFO a fost deja creat. a. CREATE TABLE CARTE

AS SELECT codc, titlu, autor

FROM CARTE_INFO;

INSERT INTO CARTE

SELECT

b.

FROM CARTE_INFO; c. CREATE TABLE CARTE

cod_depart cod_ang# nume pren salariu cod_funct

Page 139: SOLUTII - Baze de Date - Adunate

AS SELECT * FROM CARTE_INFO;

d. INSERT INTO

CARTE SELECtT

*

FROM CARTE_INFO;

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

UPDATE PROF SET CUMUL = ROUND([CUMUL]*1.1,2)

WHERE TITULAR="Y";

a. UPDATE PROF SET CUMUL = (CUMUL*1.1)

WHERE TITULAR=’Y’; MODIFY PROF SET CUMUL = ROUND(CUMUL*1.1,2)

WHERE TITULAR=’Y’;

UPDATE PROF SET CUMUL = ROUND(CUMUL*1.1,2

WHERE TITULAR=’Y’;

UPDATE PROF SET CUMUL = ROUND(CUMUL*1.1,2);

b.

c.

d.

Sã 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 c

suma preturilor cartilor scrise de ‘BARBU’.

46.

a. UPDATE CARTE

SET pret =

(SELECT

FROM

WHERE

SUM(pret)

CARTE

autor = ’BARBU’)WHERE nrex < (SELECT AVG(nrex)

FROM MODIFY CARTE

SET pret = (SELECT

FROM

WHERE

CARTE); b.

SUM(pret) carte

autor = ’BARBU’)

WHERE nrex < (SELECT AVG(nrex)

FROM UPDATE CARTE

pret = ( SUM(pret)

FROM

WHERE

CARTE); c.

carte

autor = ’BARBU’)

WHERE nrex < ( AVG(nrex) FROM CARTE);

UPDATE CARTE

pret = (SELECT SUM(pret)

FROM carte

WHERE autor = ’BARBU’ and

nrex < ( AVG(nrex)

FROM CARTE);

d.

47. Pentru tabelele:

PROF

TOTALURI

cod_prof# cod_fac nume pren salariu cod_fuct

Page 140: SOLUTII - Baze de Date - Adunate

care este secventa corecta pentru o instructiune INSERT cu o instructiune SELECT interna, pentru a insera in

tabelul TOTALURI, un rand pentru fiecare facultate din tabelul PROF, care sa contina numarul de profesori

din facultate si suma salariilor lor?

a. INSERT TO TOTALURI

SELECT COD_FAC, COUNT(*) , SUM(SALARIU)

FROM PROF ORDER BY COD_FAC;

INSERT INTO TOTALURI

SELECT COD_FAC, COUNT(*) AS NR_PROF, SUM(SALARIU) AS TOTAL_SAL

FROM PROF ;

INSERT INTO TOTALURI

SELECT COD_FAC, COUNT(*) AS NR_PROF, SUM(SALARIU) AS

TOTAL_SAL FROM PROF GROUP BY COD_FAC;

b.

c.

48. Pentru tabelul PROF

care este secventa corecta pentru a modifica salariile cu 10% , care nu contin valori NULL?

a. UPDATE PROF SET SALARIU = SALARIU*1.1 WHERE SALARIU NOT NULL;

UPDATE PROF SET SALARIU = SALARIU*1.1

WHERE SALARIU IS NOT NULL;

UPDATE PROF SElLECT SALARIU = SALARIU*1.1

WHERE SALARIU <>0;

b.

c.

49. Pentru tabelul PROF

care este secventa corecta pentru a sterge toate cadrele didactice care sunt profesori consultanti?

a. b. c.

d.

DELETE FROM PROF WHERE COD_FUNCT=’C’; DELETE PROF WHERE COD_FUNCT<>’C’; DROP FROM PROF WHERE COD_FUNCT=’C’;

DROP PROF WHERE COD_FUNCT=’C’;

50. Pentru tabelul:

FAC

care este secventa corecta pentru o inserare, folosind instructiunea SELECT

a. INSERT INTO FAC

(COD_FAC, DENUMIRE, ADRESA) SELECT VALUES(MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA')

INSERT INTO FAC

SELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA'

FROM FAC; INSERT INTO FAC

(COD_FAC, DENUMIRE, ADRESA)

SELECT MAX(COD_FAC)+1, 'LIMBI', 'ION

GHICA' FROM FAC;

b.

c.

Pentru tabelul PROF

51.

cod_fac# denumire adresa

cod_prof# cod_fac nume pren salariu cod_funct

cod_prof# cod_fac pren salariu

cod_fac# nr_prof total_sal

Page 141: SOLUTII - Baze de Date - Adunate

care este secventa corecta pentru a afisa toti profesorii impreuna cu media _ salariu pentru fiecare

facultate , rotunjita la doua pozitii zecimale

a. SELECT COD_FAC, ROUND (AVG (SALARIU), 2)

FROM PROF ORDER BY COD_FAC;

SELECT COD_FAC,

ROUND (AVG (SALARIU, 2) FROM PROF

GROUP BY COD_FAC;

SELECT COD_FAC,

ROUND (AVG (SALARIU), 2)

FROM PROF

GROUP BY COD_FAC;

AS medie_salariu

b. AS medie_salariu

c.

AS medie_salariu

d. SELECT FROM PROF COD_FAC, ROUND AVG (SALARIU), 2 AS

medie_salariu

GROUP BY COD_FAC;

52. Pentru tabelul

care este secventa corecta pentru a afisa suma salariilor tuturor profesorilor din universitate.

a. SELECT SUM (Salariu) AS Total_Salariu

FROM PROF;

SELECT SUM (Salariu) AS Total_Salariu

FROM PROF GROUP BY COD_FAC;

SELECT SALARIU, SUM (Salariu) AS

Total_Salariu FROM PROF;

SELECT COD_FAC, SUM (Salariu) AS Total_Salariu

FROM PROF;

b.

c.

d.

53. Pentru tabelul

care este secventa corecta pentru a afisa toti profesorii pentru care COD_FAC =1

salariu>=1200, sau toti profesorii pentru care COD_FAC =3 si salariu < 2000.

si

a. SELECT COD_FAC, COD_PROF, NUME, SALARIU FROM PROF

WHERE (COD_FAC=1 OR SALARIU >1200)

AND (COD_FAC =3 OR SALARIU<2000);

b. SELECT COD_FAC, COD_PROF, NUME,SALARIUFROM PROF

WHERE (COD_FAC=1 AND SALARIU >1200)

AND (COD_FAC =3 AND SALARIU<2000);

cod_prof# cod_fac nume pren salariu

cod_prof# cod_fac nume pren salariu

cod_prof# cod_fac nume pren salariu

Page 142: SOLUTII - Baze de Date - Adunate

c. SELECT COD_FAC, COD_PROF, NUME, SALARIU

FROM PROF

WHERE (COD_FAC=1 AND SALARIU >1200)

OR (COD_FAC =3 AND SALARIU<2000);

d. SELECT COD_FAC, COD_PROF, NUME,SALARIU

FROM PROF WHERE COD_FAC=1 OR SALARIU >1200

OR (COD_FAC =3 OR SALARIU<2000);

54. Pentru tabelul PROF

care secventa este corecta pentru a afisa citi profesori nu au o valoare introdusa pe coloana salariu?

a. SELECT COUNT(salariu) FROM PROF

WHERE SALARIU =0;

SELECT COUNT(*)

FROM PROF

WHERE SALARIU =NULL;

SELECT COUNT(*)

FROM PROF WHERE SALARIU IS NOT NULL;

SELECT

COUNT(*) FROM

PROF

WHERE SALARIU IS NULL;

b.

c.

d.

O uniune (join) fara o clauzä WHERE sau o clauza JOIN

55.

a.

b.

c.

d.

Nu returneaza nici un rand din setul de rezultate Reprezinta o uniune interna (inner join)

Are ca rezultat un produs cartezian

Reprezinta o uniune externa(outer join)

56. O uniune externa (outer join) nu

a.

b.

c.

d.

Poate fi scrisa in Oracle SQL folosind un simbol (+) in clauza FROM Poate fi scrisa in Oracle SQL folosind un simbol (+) in clauza WHERE

Returneaza toate randurile din unul sau din ambele tabele

Poate fi catre stanga, catre dreapta sau completa

57. Pentru tabelele:

PROF

FAC

care este secventa corecta pentru o interogare de uniune interna(inner join) care sa afiseze toti profesorii si denumirile facultatilor la care predau, in ordinea crescatoare a denumirilor

a. SELECT NUME, PREN, DENUMIRE

FROM FAC, PROF WHERE A.COD_FAC =B.COD_FAC

ORDER BY FAC.DENUMIRE;

cod_fac# denumire adresa

cod_prof# cod_fac nume pren salariu

cod_prof# cod_fac nume pren salariu

Page 143: SOLUTII - Baze de Date - Adunate

b. SELECT NUME, PREN, DENUMIRE

FROM FAC, PROF

WHERE

FAC.COD_FAC=PROF.COD_FAC ORDER

BY FAC.DENUMIRE;

c. SELECT NUME, PREN, DENUMIRE

FROM FAC, PROF WHERE FAC.COD_FAC=PROF.COD_FAC;

58. Să se obtinapentru fiecare carte, codul sau şi 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 GROUP BY codc; d. SELECT COUNT(*)

FROM

IMPRUMUTA

WHERE dataef =0 GROUP BY codc;

Care este secventa corecta care să afişeze numărul cărŃilor împrumutate cel puŃin de două ori (pentru fiecare carte împrumutată mai mult decât o dată să se obŃină numărul de câte o

a fost împrumutată).

59.

a. SELECT COUNT(COUNT(codel))

FROM imprumuta

GROUP BY codcarte

HAVING COUNT(*)>1;

SELECT COUNT(codel)

b.

FROM GROUP BY

HAVING

imprumuta codcarte

COUNT(*)>1; c. SELECT COUNT(COUNT(codel))

FROM imprumuta

WHERE SELECT

FROM

COUNT(*)>1; COUNT(codel)

imprumuta

d.

ORDERBY BY codcarte

HAVING COUNT(*)>1;

Care este secventa corecta care afiseaza pentru fiecare domeniu de carte, numărul

cărŃilor din domeniu, media preŃurilor şi numărul total de exemplare

60.

a. SELECT codcarte, COUNT(*), AVG(pret)

FROM CARTE

Page 144: SOLUTII - Baze de Date - Adunate

GROUP BY codcarte; SELECT coded, AVG(pret), SUM(nrex)

FROM CARTE

GROUP BY codcarte;

SELECT codcarte, COUNT(*), AVG(pret),

SUM(nrex) FROM CARTE GROUP BY codcarte;

SELECT COUNT(*), AVG(pret), SUM(nrex)

FROM CARTE

ORDER BY codcarte;

b.

c.

d.

61. Pentru tabelele:

PROF

FAC

care este secventa corecta pentru o interogare de uniune externa catre stanga, care sa afiseze toti profesorii si denumirile facultatilor la care predau

a. SELECT NUME, PREN, DENUMIRE FROM FAC PROF LEFT OUTER JOIN ON A.COD_FAC = B.COD_FAC;

SELECT NUME, PREN, DENUMIRE

FROM FAC LEFT OUTER JOIN PROF ON

A.COD_FAC = B.COD_FAC;

SELECT NUME, PREN, DENUMIRE

FROM FAC A LEFT OUTER JOIN PROF B ON A.COD_FAC = B.COD_FAC;

b.

c.

62. Pentru tabelele:

PROF

FUNCTII

care este secventa corecta pentru o subinterogare necorelata, care sa afiseze toate functiile pentru care nuexista profesorii incadrati

a. SELECT cod_funct, nume_funct

FROM functii

WHERE cod_funct NOT IN

(SELECT DISTINCT cod_funct FROM

prof);

SELECT cod_funct, nume_funct FROM functii

WHERE cod_funct NOT IN

SELECT DISTINCT cod_funct FROM prof; SELECT cod_funct, nume_funct

FROM functii WHERE cod_funct IN

(SELECT cod_funct FROM prof);

b.

c.

63. Care este comanda corecta care pentru fiecare facultate, se 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

cod_funct# nume_funct

cod_prof# cod_fac nume pren salariu cod_funct

cod_fac# denumire adresa

cod_prof# cod_fac nume pren salariu

Page 145: SOLUTII - Baze de Date - Adunate

SELECT COD_FAC, COUNT(*) , SUM(SALARIU) FROM PROF ORDER BY COD_FAC; INSERT INTO TOTALURI

SELECT COD_FAC, COUNT(*) , SUM(SALARIU)

FROM PROF ;

INSERT INTO TOTALURI

SELECT COD_FAC, COUNT(*) ,

SUM(SALARIU) FROM PROF

GROUP BY COD_FAC; INSERT INTO TOTALURI

SELECT COD_FAC, SUM(COD_PROF), SUM(SALARIU)

FROM PROF GROUP BY COD_FAC;

b.

c.

d.

64. Să se obŃină titlurile şi preŃurile cărŃilor mai scumpe decât cartea având titlul “Baze de date”, al cărui

autor este Popescu (self join).

a. SELECT FROM

WHERE

AND

AND

SELEC

T

FROM

WHEREAND

AND

SELECT

FROM

WHERE

AND

AND

SELECT

FROM

WHERE

AND

x.titlu, x.pret carte x, y

x.pret < y.pret

y.titlu = ’Baze de date’

y.autor = ’Popescu’;

x.titlu, x.pret

carte x, carte y

x.pret > y.pret y.titlu = ’Baze de date’

y.autor = ’ Popescu’;

x.titlu, x.pret

carte x, carte y

x.pret > y.pret

titlu = ’Baze de date’

autor = ’ Popescu’;

x.titlu, x.pret

carte x, carte y

x.pret > y.pret

y.titlu = ’Baze de date’, y.autor = ’ Popescu’;

b.

c.

d.

65. Pentru tabelele PROFESORI(codp, nume, pren, salariu)

COPII (codp, nume_c, virsta)

care este secventa corecta pentru a afisa profesorii cu copii

a. SELECT a.nume, a.pren

FROM PROFESORI A

WHERE a.codp IN (SELECT DISTINCT

codp

FROM COPII); SELECT a.nume, a.pren

FROM PROFESORI A

WHERE codp IN (SELECT codp

FROM COPII);

b.

Page 146: SOLUTII - Baze de Date - Adunate

c. SELECT a.nume, a.pren FROM PROFESORI A

WHERE a.codp IN COPII;

SELECT a.nume, a.pren

FROM PROFESORI A

WHERE a.codp IN DISTINCT codp

FROM COPII;

d.

66. Pentru tabelele

PROFESORI(codp, nume, pren, salariu)

COPII (codp, nume_c, virsta)

care este secventa corecta pentru a afisa profesorii fara copii

a. SELECT a.nume, a.pren FROM PROFESORI A

WHERE codp NOT IN (SELECT codp FROM COPII);

SELECT a.nume, a.pren

FROM PROFESORI A

WHERE a.codp NOT IN (SELECT DISTINCT codp FROM

COPII); SELECT a.nume, a.pren

FROM PROFESORI A

WHERE a.codp NOT IN SELECT codp FROM copii;

SELECT a.nume, a.pren

FROM PROFESORI A

WHERE a.codp IS NOT (SELECT DISTINCT codpFROM COPII

b.

c.

d.

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), valoar 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

67.

a. SELECT a.seriain, a.seriasf, b.nume

FROM actiuni a, actionari b

WHERE a.codact=b.codact AND

b.nume=‘&x’;SELECT a.seriain, a.seriasf, b.nume

FROM actiuni , actionari

WHERE a.codact=b.codact AND nume=‘&x’;

SELECT a.seriain, a.seriasf, b.nume

FROM actiuni a, actionari b

WHERE a.codact=b.codact ;

SELECT a.seriain, a.seriasf, b.nume

FROM actiuni a, actionari b

WHERE a.codact=b.codact OR b.nume=‘&x’;

b.

c.

d.

68. Se considera pentru actionarii unei firme, tabelul

ACTIUNI (cod_act number(5), seriain number(8), seriasf number(8), valoar number(8))

(unde seriain si seriasf reprezinta seria de inceput, respectiv de sfarsit al intervalului de actiuni pe

care il are un actionar).

Page 147: SOLUTII - Baze de Date - Adunate

Care este secventa corecta care afiseaza suma necesara firmei pentru plata tuturor

devidentelor (numrul de actiuni inmultit cu valoarea unei actiuni)? a. SELECT SUM((seriain+seriasf)*valoare))

FROM ACTIUNI;

SELECT SUM((seriasf-seriasf)*valoare))

FROM ACTIUNI;

SELECT SUM((seriain-seriasf)*valoare))

FROM ACTIUNI;

SELECT SUM((seriasf-

seriain+1)*valoare)) FROM

ACTIUNI;

b.

c.

d.

69. 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’;

SELECT Sum(SALARIU) AS SALARIU_CUMULAT

FROM salariat, are_functia WHERE NUME='ENE' , PREN='ANA’;

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’;

b.

c.

70. Pentru tabelele:

PROF

FAC

care este secventa corecta pentru o subinterogare corelata, care sa afiseze toate facultatile pentru care sumasalariile profesorilor este mai mare 10000

a. SELECT DISTINCT DENUMIRE FROM FAC WHERE 10000< (SELECT sum(salariu)

FROM PROF WHERE A.COD_FAC=B.COD_FAC);

SELECT DISTINCT

DENUMIRE FROM FAC A

WHERE 10000< ( SELECT sum(salariu)

FROM PROF B WHERE A.COD_FAC=B.COD_FAC);

SELECT DISTINCT DENUMIRE

FROM FAC A

WHERE 10000< SELECT sum(salariu) FROM PROF B WHERE A.COD_FAC=B.COD_FAC;

b.

c.

71. Care este comanda corecta pentru a afisa toti salariatii , in ordine crescatoare dupa nume, care sunt manageri ?

a. SELECT DISTINCT sef.nume, angajat.cod_manager

FROM salariati sef, salariati angajat

cod_fac# denumire adresa

cod_prof# cod_fac nume pren salariu cod_funct

Page 148: SOLUTII - Baze de Date - Adunate

WHERE sef.cod_salariat= angajat.cod_manager ORDER BY sef.nume; SELECT DISTINCT sef.nume, angajat.cod_manager

FROM salariati sef, salariati angajat WHERE cod_salariat= cod_manager

ORDER BY sef.nume;

SELECT DISTINCT nume, cod_manager FROM salariati sef, salariati angajat

WHERE sef.cod_salariat= angajat.cod_manager; ELECT DISTINCT nume, cod_manager

FROM salariati sef, salariati angajat

WHERE cod_salariat= cod_manager

ORDER BY sef.nume;

b.

c.

d.

72. Care este comanda corecta care sa afiseze 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’);

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’);

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

b.

c.

73. Care este comanda corecta care afiseaza numarul total de carti imprumutate si restituite pentru fiecare citito

al unei biblioteci?

a. SELECT cod_cititor, COUNT() FROM imprumuta

WHERE data_restituirii NOT NULL

GROUP BY cod_cititor;

SELECT cod_cititor, COUNT(*) FROM imprumuta WHERE data_restituirii IS NOT NULL;

SELECT cod_cititor, COUNT(*)

FROM imprumuta GROUP BY cod_cititor;

SELECT cod_cititor,

COUNT(*) FROM imprumuta

WHERE data_restituirii IS NOT

NULL

GROUP BY cod_cititor;

b.

c.

d.

Page 149: SOLUTII - Baze de Date - Adunate

74. Care este comanda corecta care determina micsorarea salariilor cu 10%, cu rotunjire la 2 zecimale , a

angajatilor care nu sunt titulari?

a. UPDATE salariat SET salariu=ROUND(salariu*0.9, 2); UPDATE salariat

SET salariu=ROUND(salariu*1.1)

WHERE titular =’N’;

UPDATE salariat

SET salariu = ROUND(salariu*0.9,

2) WHERE TITULAR=’N’;

UPDATE salariat

SET salariu=ROUND(salariu+salariu*0.1)

WHERE titular =’Y’;

b.

c.

d.

75. Care este comanda corecta care afiseaza numele si salariul angajatilor condusi direct de ‘ENE DAN’?

a. SELECT nume, salariu FROM salariati

WHERE cod_ang = (SELECT cod_manager FROM salariati WHERE UPPER(nume) ='ENE' , UPPER(pren) ='DAN' );

SELECT nume, salariu

FROM salariati WHERE cod_manager IN (SELECT cod_ang FROM salariati

WHERE nume ='ENE' , pren ='DAN' ); SELECT nume, salariu

FROM salariati

(SELECT cod_ang FROM salariati WHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN' );

SELECT nume, salariu

FROM salariati

WHERE cod_manager = (SELECT cod_ang FROM salariati

WHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN

);

b.

c.

d.

76. Care este comanda corecta care afiseaza numele cititorilor care au carti nerestituite?

a. SELECT nume_cititor

FROM imprumuta WHERE data_restituirii = NULL;

SELECT nume_cititor

FROM imprumuta WHERE data_restituirii IS NOT NULL;

SELECT nume_cititor

FROM imprumuta

WHERE data_restituirii IS NULL;

SELECT nume_cititor FROM imprumuta

WHERE data_restituirii > SYSDATE;

b.

c.

d.

77. Care este comanda corecta care sterge valoarea coloanei salariu pentru angajatii care sunt angajati cu contract

de colaborare?

a. DELETE salariu FROM salariati

WHERE contract=’colaborare’;

b. UPDATE salariati

Page 150: SOLUTII - Baze de Date - Adunate

SET salariu IS null WHERE contract=’colaborare’;

c. DROP salariu

FROM salariati WHERE contract=’colaborare’;

d. UPDATE salariati

SET salariu=null

WHERE contract=’colaborare’;

78. Care este comanda corecta care afiseaza codul departamentelor, numele departamentelor si suma salariilor

pentru fiecare departament?

a. SELECT cod_departament, nume_departament, SUM(salariu) FROM salariati s, departamente d

GROUP BY cod_departament, nume_departament;

SELECT cod_departament, nume_departament, SUM(salariu)

FROM salariati s, departamente d

WHERE s.cod_departament=d.cod_departament

GROUP BY cod_departament;

SELECT cod_departament, nume_departament,

SUM(salariu) FROM salariati s, departamente d

WHERE s.cod_departament=d.cod_departament

GROUP BY cod_departament, nume_departament;

SELECT cod_departament, nume_departament, SUM(salariu)

FROM salariati, departamente WHERE s.cod_departament=d.cod_departament GROUP BY cod_departament, nume_departament;

b.

c.

d.

79. 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);

SELECT nume

FROM salariati

WHERE salariu > (SELECT AVG(salariu) FROM

salariati) ORDER BY salariu;

SELECT nume FROM salariati WHERE salariu > (SELECT AVG(salariu) FROM salariati

ORDER BY salariu); SELECT nume

FROM salariati

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

ORDER BY 1;

b.

c.

d.

80. 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

Page 151: SOLUTII - Baze de Date - Adunate

(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);

Page 152: SOLUTII - Baze de Date - Adunate

Intrebări şi probleme la cursul de Baze de date, anul III, toate formele de învăŃământ

PARTEA I. Concepte despre Bazele de date relaŃionale. Normalizare

Probleme

1. Să se normalizeze tabelul CURS_SUDENT Presupunem că tabela Curs_Student conŃine următoarele date: CURS_SUDENT

NrMatricol NumeSt PrenumeSt Grupa Cursuri-Nota 458 Predescu Alexandru 114 engleza-7,germana-8 521 Radu George 122 desen-tehnic-10,franceza-7 627 Cristescu Lucian 243 programare-8,engleza-10 746 Irimia Diana 361 analiza numerica-9 782 Tanase Daciela 341 gernana-6,programare-10 982 Bunea Mihaela 114 rezistenta materialelor-8 1204 Dragnea Liviu 412 educatie fizica-10 S1520 Popa Marius 452 analiza numerica-7,engleza-9

Coloana Cursuri conŃine mult prea multa informaŃie. Să presupunem că am înlocui coloana Cursuri cu două noi coloane: CURS_SUDENT

NrMatricol NumeSt PrenumeSt Grupa Curs1 Nota1 Curs2 Nota2 458 Predescu Alexandru 114 engleza 7 germana 8 521 Radu George 122 desen tehnic 10 franceza 7 627 Cristescu Lucian 243 programare 8 engleza 10 746 Irimia Diana 361 analiza numerica 9 782 Tanase Daciela 341 germana 6 programare 10

982 Bunea Mihaela 114 rezistenta materialelor 8

1204 Dragnea Liviu 412 educatie fizica 10 1520 Popa Marius 452 analiza numerica 7 engleza 9

1.1 Să se aducă tabela CURS_SUDENT la FN1. Pentru aceasta să se creeeze

tabelul CURS_SUDENT modificat corespunzător FN1. Amintim că o tabelă este în prima formă normală(FN1) dacă valorile tuturor

atributelor care o compun sunt atomice (indivizibile). În plus, nu trebuie să existe atribute sau grupuri de atribute repetitive.

1.2 Să se aducă tabela CURS_SUDENT la FN2. Pentru aceasta să se creeeze

tabelele CURS_SUDENT modificat corespunzător FN2 şi tabelele SUDENT şi CURS, rezultate în urma normalizării la FN1.

Page 153: SOLUTII - Baze de Date - Adunate

Amintim că o tabelă este în FN2, dacă este în FN1 şi fiecare atribut care nu face

parte din cheia primară este dependent de întreaga cheie primară. Pentru a obŃine o relaŃie FN2 se poate aplica regula Casey-Delobel. α∪β � mulŃimea atributelor care intervin în dependenŃele funcŃionale; α∪γ � reprezintă reuniunea determinantului cu restul atributelor lui A. . 1.3 Este tabela CURS_SUDENT realizată la 1.2 în FN3? (JustificaŃi răspunsul) 2. Să se aducă tabelul Profesor la FN3 şi să se creeze tabela Titlu, rezultat în urma normalizării PROFESOR

Amintim că o tabelă este în FN3 dacă este în FN2 şi toate coloanele care nu fac

parte din cheia primară sunt mutual independente (depind direct de cheia primară şi numai de ea)

3. Tabelele Profesor şi Titlu sunt în relaŃia 1:m (un Titlu corespunde la mai

multe cadre didactice). Tabele de mai sus păstrează regulile de integritate? Amintim ca regulile de integritate sunt; - unicitatea cheii primare - integritatea entităŃii – valorile cheii primare sa fie diferite de valoarea null(o

valoare necunoscuta sau lipseşte) - integritatea referenŃială ) o cheie secundară trebuie să fie null în întregime

sau să corespundă unei valori a cheii primare asociate.(in tabela asociată nu trebuie să existe valori fără corespondent).

IdProf Nume Catedra IdTitlu Titlu Salariu 1 Popescu Marin Matematici 1 lector dr. 1300 2 Dragnea Ion Limbi straine 4 asistent 950 3 Iosif Irina Educatie fizica 3 lector 1100 4 Ilie Daniel Informatica 2 conferentiar dr. 1700 5 Savu Cristina Limbi straine 5 prepartor 680 6 Cristea George Fizica 6 profesor dr. 2150 7 Ene Horia Informatica 1 lector dr. 1300

Page 154: SOLUTII - Baze de Date - Adunate

4. Să se determine anomaliile pentru tabelul Avion (RedundanŃă logică, Anomalie la inserŃie, Anomalie la ştergere şi Anomalie la modificare).

Avion A# nume capacitate localitate

1 AIRBUS 250 PARIS

2 AIRBUS 250 PARIS

3 AIRBUS 250 LONDRA

4 CAR 100 PARIS

5 B707 150 LONDRA

6 B707 150 LONDRA

Constrângere: toate avioanele cu acelaşi nume au aceeaşi capacitate.

5. Să se implementeze FN1 pentru tabelul MASINA:

Persoana Vehicul

Eu R25 - W14 - R21

Tu 205

El R5 - 305

noi BX - 305 - R12 - R25

6. Să se aducă la FN2 tabelul ATASAT_LA, prin spargerea lui în 2 tabele ATASAT_LA _2A şi ATASAT_LA_ 2B

ATASAT_LA

COD_SALARIAT# JOB_COD NR_PROIECT# FUNCTIA SUMA

S1 PROGRAMATOR P1 SUPERVIZOR 60

S1 PROGRAMATOR P2 CERCETATOR 25

S1 PROGRAMATOR P3 AUXILIAR 10

S3 VANZATOR P3 SUPERVIZOR 60 S5 INGINER P3 SUPERVIZOR 60

7. Tabelul ATASAT_LA _2A rezultat de la 6. să se aducă la FN3, realizând tabelele ATASAT_LA _3A şi ATASAT_LA _3B

Page 155: SOLUTII - Baze de Date - Adunate

8. Presupunem că un şantier poate executa mai multe lucrări de bază şi că o

lucrare poate fi executată de mai multe şantiere. Pentru relaŃia EXECUTA să se specifice dependenŃele, realizând relaŃia

EXECUTA_1! Avem relaŃiile următoare LUCRARE(cod_obiectiv#, cod_lucrare#, nume); SANTIER(nr_santier#, specialitate, sef); EXECUTA(cod_obiectiv#, cod_lucrare#, nr_santier#, descriere, functie,

conducator, data_inceput, data_sfarsit). 9.Să se aducă relaŃia EXECUTA_1 rezultat de la 8, în FN3 cu regula Casey-

Delobel! 10. Să se aducă la forma BCNF (Forma normală Boyce-Codd ) INVESTESTE_IN(cod_contractant#, cod_obiectiv#, nr_contract, cota_parte), realizand INVESTESTE_IN _1 şi INVESTESTE_IN_2. (Formal, o relaŃie R este în forma normală Boyce-Codd dacă şi numai dacă pentru orice dependenŃă funcŃională totală X → A, X este o cheie (candidat) a lui R.)

Intrebări

AlegeŃi răspunsurile corecte pentru fiecare din următoarele întrebări cu răspunsuri multiple. Întrebările pot avea mai multe răspunsuri corecte.

1. SQL este

a. Un limbaj realizat de Dr. E. F. Codd

b. Un limbaj folosit pentru comunicarea cu bazele de date relaŃionale

c. Un limbaj folosit pentru definirea diagramelor ERD

d. Folosit pentru definirea şi modificarea obiectelor unei baze de date

e. Folosit pentru definirea paginilor web

Page 156: SOLUTII - Baze de Date - Adunate

2. O bază de date este

a. O structură denumită de date, cum ar fi un tabel, o vizualizare sau un index

b. Un produs software furnizat de un producător de baze de date

c. O colecŃie de date interrelaŃionate gestionate ca o singură unitate

d. Definită în acelaşi mod de toŃi producătorii de software

e. Implementată diferit de diferiŃi producători

3. Un sistem de gestionare a bazelor de date este

a. O structură, cum ar fi un tabel, o vizualizare sau un index

b. O colecŃie de date interrelaŃionate gestionate ca o singură unitate

c. Un produs software furnizat de un producător de baze de date

d. Deseori abreviat sub forma DBMS

e. O structură denumită de date, cum ar fi un tabel, o vizualizare sau un index

4. Exemple de sisteme RDBMS sunt

a. EXCEL

b. MySQL

c. PostgreSQL

d. Oracle Database

e. Microsoft SQL Server

5. Componentele unei baze de date relaŃionale includ

a. RelaŃii

b. Tabele

c. Vizualizări de utilizator

d. Diagrame ERD

e. RestricŃii

Page 157: SOLUTII - Baze de Date - Adunate

6. Printre tipurile de restricŃii care pot fi folosite în bazele de date se numără

a. NOTNULL

b. RelaŃie

c. Cheie primară

d. CHECK

e. Unicitate

7. Scopul normalizării este de a rezolva următoarele probleme

a. Anomalia de inserare

b. Performante reduse

c. Anomalia de creare

d. Anomalia de ştergere

e. Anomalia de actualizare

8. Procesul de normalizare

a. Începe de la tabele, pentru a ajuta proiectanŃii să descopere vizualizările de utilizator

b. A fost dezvoltat de Dr. E. F. Codd

c. A fost dezvoltat de Oracle

d. Este aplicat sistematic fiecărei vizualizări de utilizator

9. Un identificator unic(cheie)

a. Trebuie determinat înaitea procesului de normalizare

b. Poate fi compus dintr-un singur atribut

c. Poate fi compus din zero sau mai multe atribute

d. Poate fi compus din mai multe atribute concatenate

10. Prima formă normală rezolvă anomaliile cauzate de

a. DependenŃele parŃiale de cheia primară

Page 158: SOLUTII - Baze de Date - Adunate

b. Grupurile repetitive

c. DependenŃele tranzitive

d. Atributele multivaloare

e. RelaŃiile de tip unu-la-mai-mulŃi

11. A doua formă normală rezolvă anomaliile cauzate de

a. DependenŃele parŃiale de cheia primară

b. Grupurile repetitive

c. DependenŃele tranzitive

d. Atributele mulŃi valoare

e. RelaŃiile de tip unu-la-mai-mulŃi

12. A treia formă normală rezolvă anomaliile cauzate de

a. DependenŃele parŃiale de cheia primară

b. Grupurile repetitive

c. DependenŃele tranzitive

d. Atributele multivaloare

e. RelaŃiile de tip unu-la-mai-mulŃi

13. Pentru aducerea în prima formă normală a unei relaŃii ne-normalizate

a. Atributele care depind doar de o parte a cheii sunt eliminate

b. Atributele multivaloare sunt mutate într-o nouă relaŃie

c. Atributele care sunt dependente tranzitiv sunt eliminate

d. Grupurile repetitive sunt mutate într-o nouă relaŃie

e. Identificatorul unic al relaŃiei originale este copiat în noua relaŃie

14. Problemele de dependenŃă parŃială

a. Sunt rezolvate de FN2

b. Sunt rezolvate de FN3

Page 159: SOLUTII - Baze de Date - Adunate

c. Pot apărea în relaŃiile cu chei primare concatenate

d. Apar cand un atribut non-cheie depinde doar de o parte a cheii primare

e. Apar cand un atribut non-cheie depinde de un alt atribut non-cheie

Partea a_II_a Access

1. 1.Deschideti o aplicatie de baze de date. 2.Creati o baza de date noua in diirectorul My Documents. 3.Creati o tabela cu urmatoarele campuri: Cod_valuta Number Valuta Currency Curs Number 4.In tabela create, stabiliti Cod_valuta ca fiind cheie primara. 5.Creati un formulat nou. 6.Cu ajutorul formularului introduceti urmatoarele 5 inregistrari in tabela: 2 euro 35.0003 dolar 33.0001 franc 5 lira 4 7.Creati un filtru de tipul Filter By Selection pentru tabela create. 8.Deschideti tabela create. 9.Mutati atributul 3 inaintea atributului 1 10.Salvati datele si deschideti aplicatia de baze de date.

2. 1.Deschideti baza de date 1.mdb. 2.Utilizati instrumentul de cautare, pentru a gasi in tabela Profesor inregistrarea cu

numele Maria. 3.In aceasta inregisrare modificati numele in Alina. 4.Creati o interogare asupra tabelei Profesor, in care afisati toate atributele pentru

profesorii cu o vechime mai mare de 15 ani. 5.Rulati interogarea creata. 6.Creati o interogare asupra tabelei Universitate in care afisati doar campurile 1 si

3. 7.Stabiliti atributul Nr_profesori din tabela Catedra ca fiind indexat fara duplicate. 8.Creati un raport asupra tabelei Profesori.

Page 160: SOLUTII - Baze de Date - Adunate

9.Grupati datele din raport dupa atributul Vechime. 10. Salvati modificarile facute si inchideti aplicatia de baze de date .

3. 1.Deschideti o aplicatie de baze de date. 2.Creati o baza de date noua in directorul My Documents. 3.Creati o tabela cu urmatoarele campuri: A Number (cheie primara) B Text 4.Creati o tabela cu urmatoarele campuri: A Number E Date 5.Craeti o legatura intre tabele prin intermediul campului A . 6.Stabiliti atributul E ca fiind indexat fara duplicate. 7.Ctreati un filtr de tipul Filter By Selection pentru prima tabela. 8.Creati o interogare asupra tabelei 2 in care afisati doar canpul 2. 9.Modificati orientarea paginii. 10. Salvati toate datele si inchideti aplicatia de baze de date. 1.Deschideti baza de date 3.mdb. 2.Stergeti tabela Informatii, din baza de date. 3.Deschideti tabela Casete si modificati dimensiunea atributului Nume_film la

100. 4.Deschideti un formular existent. 5.Cu ajutorul formei selectati inregisrarea 3 si modificati Nr_casete la 10. 6.Utilizati comanda Undo pentru a reface operatia anterioara. 7.Modificati lungimea unei coloane in tabela Casete. 8.Utilizati instrumentul de cautare, pentru a gasi intregistrarea cu valoarea

Richard Gere pentru atributul Actor. 9.Stergeti aceasta inregistrare. 10. Inchideti aplicatia de baze de date.

4. 1.Deschideti aplicatia de baze de date. 2.Creati o baza de date noua in direcctorul My Documents. Salvati-o cu numele

dumneavoastra. 3.Creati o tabela cu urmatoarele campuri: Inregistrare 1 Number-Long Integer

Page 161: SOLUTII - Baze de Date - Adunate

Inregistrare 2 Text- dimensiune 50 Inregistrare 3 Currency 4.Salvati tabela cu numele Numere. 5.Creati un formular nou asupra tabelei Numere. 6.Salvati formularul cu denumirea Formular Numere. 7.Introduceti 2 inregistrari in tabela Numere. cu ajutorul formei create. Inregistrare 1 Inregistrare 2 Inregistrare 3

100 Prima valoare 31 300 A doua valoare 32

8.Utilizati instrum,entul de cautare, pentrua gasi inregistrarea in care campul

Inregisrare 3 ia valoare 31. 9.Modificati Prima valoare cu Prima_Valoare. 10.Salvati modificarile facute si inchideti aplicatia de baze de date. 1.Deschideti baza de date cu 4.mdb. 2.Adaugati atributul Adresa_firma tabelei Comenzi. 3.Stergeti tabela Informatii din baza de date. 4.Modificati tipul coloanei Nume_produs in tabela Produs. 5.Creati o interogare asupra tabelei Produs, in caer afisati doar campurile ce au

unitatea de masura « litrii » 6.Creati un raport asupra tabelei Produs. 7.Introduceti in antetul raportului o imagine. 8.Mutati imaginea in partea stanga a antetului. 9.Salvati raportul cu denumirea Raport_Produs. 10.Salvati modificarile facute si inchideti aplicatia de baze de date.

5. 1.Deschideti aplicatia de baze de date. 2.Craeti o baza de date noua cu nmele baza de date pe C:/ 3.In baza de date nou create , construiti o tabela cu urmatorele atribute : Tara Text-dimensiune 20 Data_curenta Date/Time- Short Date Nume_firma Texe-dimensiune 30 Cheie_primara Autonumber 4.Stabiliti atributul Data_curenta ca find indexat cu dupliacte. 5.Mutati atributul Cheie_primara astfel incat sa devina primul atribut din tabela.

Page 162: SOLUTII - Baze de Date - Adunate

6.Creati o regula de validare pentru atributul Cheie_primara, astfel incat sa nu primesca valori mai mari de 256.

7.Introduceti in tabela creata 5 inregistrari. 8.Imprimati toate inregistrarile din tabela. 10.Inchideti aplicatia de baze de date. 1.Deschideti baze de date 5.mdb. 2.Creati un filtru de tipul Filter By Selection pentru tabela Carte. 3.Sortarti datele din tabela Autor in ordine alfabetica dupa numele autorului. 4.Aplicati filtrul creat asupra tabelei Carte. 5.Creati un formular pentru tabela Autor. 6.Cu ajutorul formularului selectati inregistrarea 2 si modificati numele autorului. 7.Stergeti inregisrarea cu nr 1 din tabela. 8.Creati un raport asupra tabelei Carte. 9.Modificati dimensiunea paginii din A4 in Letter. 10.Salvati modificarile facute si inchideti aplicatia de baze de date.

6. 1.Deschideti aplicatia de baze de date. 2.Creati o baza de date noua si salvati-o in directorul My Documents. 3.Utilizati functia Help pentru a cauta informatii despre tabele. 4.Creati o tabela noua si denumiti-o Informatii. 5.Introduce-ti in tabela 3 atribute. 6.In tabela creata stabiliti primul camp ca fiind cheie primara. 7.Creati un raport asupra acestei tabele. 8.Grupati datele din raport in functie de al doilea atribut. 9.Salvati raportul cu numele Raport. 10.Inchideti baza de date creata. 1.Deschideti aplicatia de baze de date. 2.Deschideti baza de date 6.mdb. 3.Stergeti tabela Campuri din baza de date. 4.Modificati lungimea unei coloane in tabela Autor. 5.Creati un formular pentru tabela Autor. 6.Adaugati numele dumneavoastra in antetul formularului creat. 7.Creati o interogare cu date din tabelele Autor si Carte. 8.Salvati interogarea cu numele Query. 9.Rulati interogarea creata. 10.Salvati modificarile facute si inchideti aplicatia de baze de date.

7.

1.Deschideti aplicatia de baze de date. 2.Creati o baza de date noua datele dumneavoastra pe directorul C :

Page 163: SOLUTII - Baze de Date - Adunate

3.Afisati pe ecran bara de instrumente WEB. 4.Creati o tabela cu urmatoarele atribute : COD Numeric Byte NUME Text dimensiune 15 caractere SUMA Currency Euro 5.Creati o noua tabela cu urmatoarele atribute : Nr_Crt Autonumber Cod Numeric Byte Firma Text dimensiune 20 Adresa Text dimensiune 25 6.Stabiliti in prima tabela ca cheie primara COD. 7.Creati o legatura intre cele doua tabele dupa campul COD 8.Salvati modificarile facute 9.Mutati in tabela 2 campul Firma dupa campul Adresa 10.Inchideti aplicatia de baze de date 1.Deschideti o aplicatie de baze de date 2.Deschideti baza de date 7.mdb 3.Modificati lungimea unei coloane in tabela Catedra 4.Cautati inregistrarea cu nr 3 si modificati cod profesor ca fiind egal cu 10 5.Creati o interogare cu date din tabelele Catedra si Profesor. 6.Sortati datele din tabela Profesor in ordine alfabetica dupa Nume_profesor 7.Creati un raport asupra tabelei Universitate. 8.Modificati orientarea paginii. 9.Imprimati toate datele obtinute in raportul anterior creat 10.Salvati toate modificarile facute si inchideti baza de date.

8. 1.Deschideti o aplicatie de baze de date 2.Creati o baza de date noua in directorul C : 3.Creati o tabela in care introduceti 5 campuri.Dintre acestea 2 vor fi de tip

Text,2 vor fi numerice si 1 de tip data calendaristica 4.Creati un formular nou asupra tabelei create anterior. 5.Cu ajutorul noului formular introduceti in tabela 5 inregistrari 6.Adaugati numele dumneavoastra in antetul formei.

7.Creati o interogare care sa contina numai campurile 1 si 2 8.Rulati interogarea creata. 9.Imprimati doar inregistrarile selectate din tabela creata 10.Salvati toate datele si inchideti aplicatia de baze de date 1.Deschideti baza de date 8.mdb

Page 164: SOLUTII - Baze de Date - Adunate

2.Deschideti tabela Masini si introduceti urmatorul atribut Nume. 3.Stergeti legatura dintre tabelele Masini si Masini Disponibile 4.Sortati datele din tabela Masini, in ordine crescatoare dupa atributul

Masini_disponibile 5.Creati un raport asupra tabelei Masini 6.Introduceti in subsolul raportului numele dvs. 7.Grupati datele din raport dupa atributul Masini_disponibile 8.Modificati dimensiunea paginii din A4 in Letter 9.Imprimati raportul la o imprimanta disponibila 10.Salvati modificarile facute si inchideti apllicatia de baze de date.

9. 1. Deschideti o aplicatie de baze de date. 2. Creati o baza de date noua in directorul My Documents. 3. Creati o tabela cu urmatoarele campuri:

Numar_intrare Number Data_intrare Date Cantitate_intrata Number Denumire_produs Text

4. In tabela create stabiliti atributul Numar_Intrare ca fiind cheie primara. 5. Creati un formular nou. 6. Cu ajutorul formularului introduceti 5 inregistrari in tabela. 7. Creati un filtru de tipul Filter Exculding Selection. 8. Deschideti tabela creata in Desing View. 9. Mutati atributul 3 inaintea atributului 1. 10. Salvati datele si inchideti aplicatia de baze de date.

1. Deschideti baza de date 9.mdb. 2. Utilizati instrumentul de cautare, pentru a gasi inregistrarea cu valoarea 2 pentru

atributul Cod_caseta din tabela Casete. 3. In aceasta inregistrare modificati numele filmului ca fiind Film5. 4. Creati o interogare asupra tabelei Casete in care afisati doar campurile 1,3,5. 5. Rulati interogarea creata. 6. Creati o interogare asupra tabelei Casete, in care afisati doar campurile pentru care

atributul Tip_film are valoarea Actiune. 7. Stabiliti atributul Nume_film ca fiind indexat cu duplicate. 8. Creati un raport asupra tabelei Casete. 9. Grupati datele din raport dupa atributul Cod_imprumut. 10. Salvati modificarile facute si inchideti aplicatiile de baze de date.

10. 1. Deschideti o aplicatie de baze de date. 2. Creati o baza de date noua in directorul My Documents.

Page 165: SOLUTII - Baze de Date - Adunate

3. Creati o tabela denumita Elevi ce va contine urmatoarele campuri: Nume_elevi Text Data_nasterii Date Varsta Number - Integer Nr_scoala Number - Integer

4. Creati o tabela denumita Clasa ce va contine urmatoarele campuri : Nume Text Clasa Number Medie Number Nr_scoala Number - Integer

5. Creati o legatura intre tabela Elevi si tabela Clasa. 6. stabiliti atributul Nr_scoala ca fiind indexat fara duplicate. 7. Creati un filtru de tipul Filter By Form pentru tabela Elevi. 8. Creati o interogare asupra ambelor tabele in care afisati campurile Nume_elevi,

Varsta, Clasa, Media. 9. modificati orientarea paginii. 10. Salvati toate datele si inchideti aplicatia de baze de date.

1. Deschideti baza de date 10.mdb. 2. Adaugati urmatorul atribut Numar_telefon tabelei Autor. 3. Stergeti tabela Campuri din baza de date. 4. Modificati lungimea coloanei Nume in tabela Autor la 100 de caractere. 5. Creati o interogare asupra tabelei Carte, in care afisati doar cartile ce au codul mai

mare de 100. 6. Creati un raport asupra tabelei Autor. 7. Introduceti in antetul raportului o imagine. 8. Mutati imaginea in partea stanga a antetului. 9. Salvati raportul cu denumirea Raport autor. 10. Salvati modificarile facute si inchideti aplicatia de baze de date.

11. 1. Deschideti aplicatia de baze de date. 2. creati o baza de date noua si salvati-o in directorul My Documents. 3. Utilizati functia Help pentru a cauta informatii despre tabele. 4. Creati o tabela noua si denumiti-o Informatii. 5. Introduceti in tabela 3 atribute. 6. in tabela creata, stabiliti primul camp ca fiind cheie primara. 7. Creati un raport asupra acestei tabele. 8. Grupati datele din raport in functie de al doilea atribut. 9. Salvati raportul cu numele de Raport. 10. Inchideti baza de date creata.

Page 166: SOLUTII - Baze de Date - Adunate

1. Deschideti baza de date 11.mdb. 2. Stergeti tabela Informatii din baza da date. 3. Deschideti tabela Produs si modificati dimensiunea atributului Cantitate. 4. Deschideti formularul Produs. 5. Cu ajutorul formularului selectati inregistrarea 3 si modificati Cantitatea la 250. 6. Utilizati comanda Undo pentru a reface operatia anterioara. 7. Modificati lungimea unei coloane in tabela Comenzi. 8. Utilizati instrumental de cautare, pentru a gasi inregistrarea cu Cod_produs 4. 9. Stergeti aceasta inregistrare. 10. Inchideti aplicatia de baze de date.

12. 1. Deschideti aplicatia de baze de date. 2. Creati o baza de date noua in directorul My Documents. Salvati-o cu numele

dumneavoastra. 3. Creati o tabela cu urmatoarele campuri: CNP Number Double Nume Text dimensiune 50 Data Date/Time Medium Date 4. Salvati tabela cu numele Persoana. 5. Creati un formular nou asupra tabelei Persoana. 6. Salvati formularul cu denumirea Formular Persoana. 7. Introduceti doua inregistrari in tabela Persoana, cu ajutorul formei create.

8.Utilizati instrumental de cautare, pentru a gasi inregistrarea cu CNP-ul 102. 9. Modificati numele persoanei in Andrei. 10. Salvati modificarile facute si inchideti aplicatia de baze de date.

1. Deschideti baza de date 12.mdb. 2. Adaugati urmatorul atribut – Adresa_mail – tabelei Profesor. 3. Stergeti tabela De sters din baza de date. 4. Modificati lungimea unei coloane in tabela Profesor. 5. Creati o interogare asupra tabelei Universitate, in care afisati doar campurile care au

valoarea atributului Cod_Catedra mai mare decat 100. 6. Creati un raport asupra tabelei Universitate. 7. Introduceti in antetul raportului o imagine. 8. Mutati imaginea in partea stanga a antetului. 9. Salvati raportul cu denumirea Universitate.

CNP Nume Data 102 Alina 19-Jun-94 98 Maria 18-Feb-2002

Page 167: SOLUTII - Baze de Date - Adunate

10. Salvati modificarile facute si inchideti aplicatia de baze de date.

13. 1. Deschideti aplicatia de baze de date. 2. Creati o baza de date noua cu numele baza de date pe C:\ 3. In baza de date noua creata, construiti o tabela cu urmatoarele atribute :

Oras Text dimensiune 20 Data examinarii Date/Time Short Date Nume Centru Text dimensiune 30 Numar curent Autonumber

4. Stabiliti atributul Nume Centru ca fiind indexat cu duplicate. 5. Mutati atributul Numar Curent, astfel incat sa devina primul atribut din tabela. 6. Creati o regula de validare pentru atributul Numar Curent, astfel incat sa nu

primeasca valori mai mari de 256. 7. Introduceti in tabela creata 5 inregistrari. 8. Imprimati toate inregistrarile din tabela. 9. Salvati toate datele. 10. Inchideti aplicatia de baze de date.

1. Deschideti aplicatia de baze de date. 2. Deschideti baza de date 13.mdb. 3. Stergeti tabela Informatii din baza de date. 4. Modificati tipul atributului Cantitate, din tabela Produs, din Text in Number. 5. Deschideti formularul Produs. 6. Adaugati numele dumneavoastra in antetul formulaului Produs. 7. Creati o interogare cu date in tabelele Produs si Comenzi in care sa afisati din tabela

Produs campurile Nume_produs si Unitate_de_masura, iar din tabela Comenzi campurile Nume_firma si Cantitate_ceruta, pentru acele inregistrari pentru care cod_produs din tabela Produs este egal cu cod_produs din tabela Comenzi.

14. 1. Deschideti aplicatia de baza de date. 2. Creati o baza de date noua si salvati-o in directorul My Documents. 3. Utilizati functia Help pentru a cauta informatii despre tabele. 4. Creati o tabela noua si denumiti-o Informatii. 5. Introduceti in tabele 3 atribute . 6. In tabela creata stabiliti primul camp ca fiind cheie primara . 7. Creati un raport asupra acestei tabele . 8. Grupati datele din raport in functie de al 2-lea atribut . 9. Salvati raportul cu numele Raport. 10. Inchideti baza de date creata . 1. Deschideti baza de date 14.mdb. 2. Deschideti tabela Casete imprumutate si introduceti atributul

Data_imprumut de tip Date .

Page 168: SOLUTII - Baze de Date - Adunate

3. Stergeti legatura dintre tabelele Casete si Casete imprumutate. 4. Sortati datele din tabela Casete in ordine descrescatoare dupa atributul

Actor. 5. Creati un raport asupra tabelei Casete . 6. Introduceti in antetul raportului , numele dumneavoastra si data curenta . 7. Grupati datele din raport dupa atributul Tip_film . 8. Modificati dimensiunea paginii din Letter in A4 . 9. Imprimati raportul la o imprimanta disponibila . 10. Salvati modificarile facute si inchideti aplicatia de baza de date .

15. 1. Deschideti aplicatia de baza de date . 2. Creati o baza de date noua cu numele dumneavoastra pe directorul C: 3. Afisati pe ecran bara de instrumente Database . 4. Creati o tabela cu urmatoarele atribute : Atribut 1 Numeric Byte Atribut 2 Text dimensiune 15 caractere Atribut 3 Currency tip Euro 5. Creati o noua tabela cu urmatoarele atribute : Atribut 1 Numeric Byte Atribut 4 Text dimensiune 20 caractere Atribut 5 Text dimensiune 25 caractere 6. Stabiliti in prima tabela ca cheie primara Atribut 1 . 7. Creati o legatura intre cele doua tabele dupa campul Atribut 1. 8. Salvati modificarile facute . 9. Mutati in tabela 2 campul Atribut 5 inaintea campului Atribut 4 . 10.Inchidetai aplicatia de baza de date . 1. Deschideti baza de date 15.mdb. 2. Utilizati instrumentul de cautare , pentru a gasi in tabela Profesor inregistrarea

cu numele Maria . 3. In aceasta inregistrare modificati numele in Andreea . 4. Creati o interogare asupra tabelei Profesor , in care afisati toate atributele

pentru profesorii cu o vechime mai mare de 15 ani . 5. Rulati interogarea creata . 6. Creati o interogare aspura tabelei Universitatea in care afisati doar campurile 1

si 3 . 7. Stabiliti atributul Nr_profesori din tabela Catedra ca fiind indexat fara

duplicitate . 8. Creati un raport asupra tabelei Profesori . 9. Grupati datele din raport dupa atributul Vechime . 10.Salvati modificarile facute si inchideti aplicatia de baza de date .

Page 169: SOLUTII - Baze de Date - Adunate

16. 1. Deschideti o aplicatie de baze de date . 2. Creati o baza de date noua in directorul My Documents . 3. Creati o tabela cu urmatoarele campuri : A Number (Cheie primara) B Text 4. Creati o tabela cu urmatoarele campuri : A Number E Date 5. Creati o legatura intre tabelele prin intermediul campului A . 6. Stabiliti atributul E ca fiind indexat fara duplicitate . 7. Creati un filtru de tipul Filter By Selection pentru prima tabela . 8. Creati o interogare asupra tabelei 2 in care afisati doar campul 2. 9. Modificati orientarea paginii . 10.Salvati toate datele si inchideti aplicatia de baze de date . 1. Deschideti baza de date 16.mdb . 2. Adaugati atributul Adresa_firma tabelei Comenzi . 3. Stergeti tabela Informatii din baza de date . 4. Modificati tipul coloanei Nume_produs din tabela Produs . 5. Creati o interogare asupra tabelei Produs , in care afisati doar campurile ce au

unitatea de masura "litri" . 6. Creati un rapot asupra tabelei Produs . 7. Introduceti in antetul raportului o imagine . 8. Mutati imaginea in partea stanga a antetului . 9. Salvati raportul cu denumirea Raport_produs . 10.Salvati modificarile facute si inchideti baza de date .

17. 1. Deschideti o aplicatie de baza de date . 2. Creati o baza de date noua in directorul C : 3. Creati o tabela in care introduceti 5 campuri . Dintre acestea doua vor fi de tip

Text ,doua vor fi numerice si unul de tip data calendaristica . 4. Creati un formular nou asupra tabelei create anterior . 5. Cu ajutorul noului formular introduceti in tabela 5 inregistrari . 6. Adaugati numele dumneavoastra in antetul formei . 7. Creati o interogare care sa contina numai campurile 1 si 2 . 8. Rulati interogarea creata . 9. Imprimati doar inregistrarile selectate din tabela creata . 10.Salvati toate datele si inchideti aplicatia de baza de date .

Page 170: SOLUTII - Baze de Date - Adunate

1. Deschideti baza de date 17.mdb 2. Stergeti tabela Date din baza de date . 3. Deschideti tabela Casete imprumutate si modificati tipul atributului

Nr_casete_imprumutate ca fiind Integer . 4. Deschideti un formular existent . 5. Cu ajutorul formei selectati intregistrarea 4 si modificati Nr_casete la 15 . 6. Utilizati comanda Undo pentru a reface operatia anterioara . 7. Modificati lungimea unei colane din tabela Produs . 8. Utilizati instrumentul de cautare , pentru a gasi inregistrarea cu valoare Desene

animate pentru atributul Tip_film . 9. Stergeti aceasta inregistrare . 10.Inchideti aplicatia de baza de date .

18. 1. Deschideti aplicatia de baze de date . 2. Creati o baza de date noua in directorul My Documents . Salvati-o cu

numele dumneavoastra . 3. Creati o tabela cu urmatoarele campuri : CNP Number Double Nume Text dimensiune 50 Data Date/Time Medium Date 4. Salvati tabela cu numele Persoana . 5. Creati un formular nou asupra tabelei Persoana . 6. Salvati formularul cu denumirea Formular Persoana . 7. Introduceti doua inregistrari in tabela Persoana cu ajutorul formei create .

CNP Nume Data 102 Alina 19-Jun-94 98 Maria 18-Feb-2002

8. Utilizati instrumentul de cautare pentru a gasi inregistrarea cu CNP-ul 102 . 9. Modificati numele persoanei in Mihai . 10.Salvati modificarile facute si inchideti baza de date . 1. Deschideti aplicatia de baze de date . 2. Deschideti baza de date 22.mdb . 3. Stergeti tabela Campuri din baza de date 4. Modificati lungimea unei coloane in tabela Autor . 5. Creati un formular pentru tabela Autor . 6. Adaugati numele dumneavoastra in antetul formularului creat . 7. Creati o interogare cu date din tabelele Autor si Carte . 8. Salvati interogarea cu numele Query . 9. Rulati interogarea creata . 10.Salvati modificarile facute si inchideti aplicatie de baze de date .

Page 171: SOLUTII - Baze de Date - Adunate

19. 1. Deschideti aplicatia de baze de date . 2. Creati o baza de date noua cu numele baza de date pe C:\ 3. In baza de date nou creata construiti o tabela cu urmatoarele atributre : Oras Text dimensiune 20 Data examinarii Date/Time Short Date Nume centru Text dimensiune 30 Numar curent Autonumber 4. Mutati atributul Numar Curent astfel incat sa devina primul atribut din tabela . 5. Atasati atributului Oras optiunea Indexed with Duplicates . 6. Creati o regula de validare pentru atributul Numar Curent , astfel incat sa nu

primeasca valori mai mari de 256 . 7. Introduceti in tabela creata 5 inregistrari . 8. Imprimati toate inregistrarile din tabela . 9. Salvati toate datele . 10.Inchideti aplicatia de baze de date . 1. Deschideti o aplicatie de baze de date . 2. Deschideti baza de date 19.mdb . 3. Modificati lungimea unei coloane in tabela Catedra . 4. Cautati inregistrarea cu nr. 3 si modificati cod profesor ca fiind egal cu 10. 5. Creati o interogare cu date din tabelele Catedra si Profesor 6. Sortati datele din tabela Profesor in ordine alfabetica dupa Nume_profesor 7. Creati un raport asupra tabelei Universitate 8. Modificati orientarea paginii 9. Imprimati toate datele obtinute in raporturi ulterior creat 10. Salvati toate modificarile facute si inchideti baza de date

20. 1. Deschideti aplicatia de baze de date 2. Creati o baza de date noua cu numele dumneavoastra pe C:/ 3. In baza de date nou creata construiti o tabela cu urmatoarele atribute Nume_depozit Text-dimensiune 20 Data_curenta Date/Time- Short Date Nume_material Text- dimensiune 30 Cod_curent Autonumber

4. Stabiliti atributul Data_curenta ca fiind indexat dublicate 5. Mutati atributul Cod_curent astfel incat sa devina primul atribut din tabela 6. Creati o regula de validare pentru atributul Cod_curent, astfel incat sa nu primeasca

valori mai mari de 256 7. Introduceti in tabela creata 5 inregistrari

Page 172: SOLUTII - Baze de Date - Adunate

8. Imprimati toate inregistrarile din tabela 9. Salvati toate datele 10. Inchideti aplicatia de baze de date

1. Deschideti baza de date 20.mdb. 2. Utilizati instrumentul de cautare pentru a gasi inregistrarea cu valoarea 2 pentru

atributul Cod_caseta din tabela Casetei 3. In aceasta inregistrare modificati numele filmului ca fiind Film interesant 4. Creati o interogare asupra tabelei Casete in care afisati doar campurile 2 si 4 5. Rulati interogarea creata 6. Creati o interogare asupra tabelei Casete, in care afisati doar campurile pentru care

atributul Tip_film are valoarea Actiune 7. Stabiliti atributul Nume_film ca fiind indexat cu duplicate 8. Creati un raport asupra tabelei Casete 9. Grupati datele din raport dupa atributul Cod_imprumut 10. Salvati modificarile facute si inchideti aplicatia de baze de date

Partea a_III_a SQL

Întrebări şi Probleme

AlegeŃi răspunsurile corecte pentru fiecare din următoarele întrebări cu răspunsuri

multiple. Întrebările pot avea mai multe răspunsuri corecte. 1. SQL este a. Un limbaj orientat spre obiecte b. Un limbaj procedural c. Un limbaj nonprocedural d. Un limbaj declarativ e. Un limbaj standard 2. Într-un aranjament client/server a. Componentele software DBMS ruleaza pe server b. Componentele software DBMS ruleaza pe client c. Componentele software ale clientului SQL ruleaza pe client d. Componentele software ale clientului SQL ruleaza pe server 3. Un client SQL in linia de comanda a. Necesita un sistem bazat pe ferestre b. Ruleaza pe o mare varietate de platforme client. c. Necesita un browser web pe client. d. Afişează datele şi opŃiunile de comandă folosind caracteristici grafice e. Afişează răspunsurile la comenzi sub formă de mesaje de tip text

Page 173: SOLUTII - Baze de Date - Adunate

4. Un client SQL cu interfata grafica (GUI) a. Necesita un sistem bazat pe ferestre b. Ruleaza pe o mare varietate de platforme client. c. Necesita un browser web pe client. d. Afişează datele şi opŃiunile de comandă folosind caracteristici grafice e. Afişează răspunsurile la comenzi sub formă de mesaje de tip text 5. Un client SQL bazat pe web a. Necesita un sistem bazat pe ferestre b. Ruleaza pe o mare varietate de platforme client. c. Necesita un browser web pe client. d. Afişează datele şi opŃiunile de comandă folosind caracteristici grafice e. Afişează răspunsurile la comenzi sub formă de mesaje de tip text 6. ClienŃii SQL oferiŃi de Oracle sunt a. iSQL b. Query Analyzer c. iSQL*Plus d. SQL*Plus e. SQLWorksheet 7. ClienŃii SQL oferiŃi de Microsoft sunt a. iSQL b. Query Analyzer c. iSQL*Plus d. SQL*Plus e. SQLWorksheet 8. Extensiile SQL create de furnizori a. Cresc portabilitatea codului SQL b. Scad portabilitatea codului SQL c. Contribuie la diferenŃierea produselor oferire de diferiŃi producători d. Au fost bazate pe cererile pieŃei e. Sunt compatibile între implementările diferiŃilor producători 9. InstrucŃiunile SQL a. încep cu un cuvânt cheie reprezentând o comandă b. Se termină cu un cuvânt cheie reprezentând o comandă c. încep cu un delimitator, cum ar fi caracterul punct şi virgulă d. Se termină un delimitator, cum ar fi caracterul punct şi virgulă e. încep cu o paranteză deschisă 10. Elementele limbajului SQL includ a. Cuvinte cheie b. Nume ale obiectelor din baza de date c. Operatori

Page 174: SOLUTII - Baze de Date - Adunate

d. RestricŃii e. Constante 11. Elementele limbajului SQL sunt separate prin a. Virgule b. Exact un spaŃiu c. Unul sau mai multe spaŃii d. Linie nouă e. LiniuŃe de subliniere 12. Numele obiectelor bazei de date pot include a. Paranteze b. LiniuŃe de subliniere c. Numere d. Litere e. Virgule 13. InstrucŃiunile SQL pot li împărŃite în următoarele categorii a. Limbajul dc definire a datelor (DDI, - Data Definition Language) b. Limbajul dc selectare a datelor (DSL - Dala Selection Language) c. Limbajul dc replicare a datelor (DRL - Dala Replication Language) d. Limbajul pentru controlul datelor (DCL - Data Control Language) e. Limbajul dc manipulare a datelor (DML - Data Manipulation Language) 14. Limbajul de definire a datelor (DDL - Data Definition Language) include

următoarele instrucŃiuni: a. SELECT b. INSERT c. CREATE d. ALTER e. DELETE 15. Limbajul de interogare a datelor (DQL - Data Query Language) include

următoarele instrucŃiuni: a. SELECT b. INSERT c. CREATE d. ALTER e. DELETE 16. Limbajul de manipulare a datelor (DML - Data Manipulation Language) include

următoarele instrucŃiuni: a. SELECT b. INSERT c. CREATE d. UPDATE e. DELETE

Page 175: SOLUTII - Baze de Date - Adunate

Limbajul de definire a datelor - DDL AlegeŃi răspunsurile corecte pentru fiecare din următoarele întrebări cu răspunsuri

multiple. ReŃineŃi că întrebările pot avea mai multe răspunsuri corecte.

1. Tipurile de date oferă următoarele avantaje

a. Respectă standardele publicate b. Oferă un set de comportamente utile pentru utilizatorii bazei c. Asigură independenŃa faŃă de date d. RestricŃionează datele din coloane la caractere care au sens în context e. Ajută sistemul DBMS să stocheze mai eficient datele din coloane

2. Tipurile de date pentru caractere

a. Sunt mai flexibile decât tipurile de date numerice b. Acceptă atât date cu lungime fixă, cât şi date cu lungime variabilă. c. Necesită întotdeauna specificarea preciziei şi a scalei d. Determină completarea coloanelor până la lungimea maximă maximă e. Pot stoca şiruri de caractere în format specific unei limbi naŃionale

3. Tipurile de date numerice

a. Sunt mai flexibile decât tipurile de date pentru caractere b. RestricŃionează valorile din coloane la numere şi simboluri înrudite, cum ar fi

virgulele şi simbolul dolar c. Necesită întotdeauna specificarea preciziei şi a scalei d. Stochează valori exacte sau aproximative e. Sunt potrivite pentru a fi folosite în calcule

4. Tipurile numerice standard includ

a. INTEGER b. NUMBER c. FLOAT d. BOOLEAN e. INTERVAL

5. Tipurile de date temporale standard includ

a. DATETIME b. DATE c. TIMESTAMP d. TIMEZONE e. TIME

6. Valorile NULL

a. Pot fi folosite pentru reprezentarea datelor care lipsesc sau nu sunt cunoscute b. Înseamă acelaşi lucru ca şi spaŃiile libere c. Sunt egale cu alte valori NULL d. Nu sunt egale cu alte valori NULL e. Sunt întotdeauna permise în mod prestabilit 7. InstrucŃiunile DDL includ a. CREATE

Page 176: SOLUTII - Baze de Date - Adunate

b. ALTER c. DELETE d. INSERT e. UPDATE

8. InstrucŃiunea CREATE DATABASE a. FuncŃionează exact la fel în toate sistemele DBMS relaŃionale b. Specifieă întotdeauna numele bazei de date c. Specifieă întotdeauna numele proprietarului bazei de date d. Poate include parametri specifici producătorului e. FuncŃionează la fel cu instrucŃiunea CREATE SCHEMA

9. DefiniŃia unei coloane din instrucŃiunea CREATE TABLE poate include a. Numele tabelului b. Numele coloanei c. restricŃie la nivel de tabel d. clauză DEFAULT e. O clauză NULL sau NOT NULL

10. Numele unei coloane dintr-un tabel a. Trebuie să fie specificat în instrucŃiunea CREATE TABLE b. Trebuie să fie unic în cadrul bazei de date c. Trebuie să fie unic în cadrul tabelului d. Poate fi folosit într-un singur index e. Trebuie să fie specificat în instrucŃiunea ALTER TABLE

11. O restricŃie la nivel de coloană a. Poate referi una sau mai multe coloane b. Poate fi inclusă într-o instrucŃiune CREATE TABLE sau ALTER TABLE c. Foloseşte o sintaxă identică sau aproape identică cu cea a unei restricŃii de

acelaşi tip la nivel de tabel d. Poate fi folosită oriunde ar putea fi folosită o restricŃie la nivel de tabel e. Are o sintaxă care diferă de la un tip de restricŃie la altul

12. Sintaxa corectă pentru clauza DEFAULT este a. DEFAULT (precizie, scală) b. DEFAULT [NULL | NOT NULL] c. DEFAULT (expresie) d. DEFAULT (nume–coloană) REFERENCES name–tabel (nume_coloană.) e. DEFAULT [UNIQUE | PRIMARY KEY]

13. Sintaxa corectă pentru o restricŃie NOT NULL este a. nume_coloană tip--de–date IS NOT NULL b. nume_coloană tip–de–date NOT NULL c. DEFAULT [NULL | NOT NULL] d. CREATE NOT NULL INDEX ON nume_coloană e. nume–coloană REFERENCES NOT NULL

14. Sintaxa corectă pentru o restricŃie UNIQUE este a. [CONSTRAINT nume—restricŃie] UNIQUE (nume_coloană) b. [CONSTRAINT nume—restricŃie] UNIQUE (nume_tabel) c. DEFAULT UNIQUE (nume_coloană) d. nume_coloană REFERENCES UNIQUE nume_tabel

Page 177: SOLUTII - Baze de Date - Adunate

e. DEFAULT [UNIQUE | PRIMARY KEY] 15. Sintaxa corectă pentru o restricŃie referenŃială este

a. [CONSTRAINT nume—restricŃie] REFERENCES nume_index b. [CONSTRAINT nume—restricŃie] REFERENCES nume_tabel c. FOREIGN KEY nume_coloană REFERENCES nume_tabel (nume_coloană) d. REFERENCES nume—tabel (nume_coloană) e. nume_coloană REFERENCES UNIQUE nume_tabel

16. InstrucŃiunea CREATE INDEX a. Poate fi folosită pentru crearea restricŃiilor de unicitate şi cheie primară b. Poate include cuvântul cheie UNIQUE c. Trebuie să refere două sau mai multe nume de coloane d. Poate include cuvintele cheie ASC sau DESC pentru orice coloană e. Poate specifica ordinea ascendentă sau descendentă pentru una sau mai multe

coloane 17. Instructiunea CREATE VIEW

a. Stochează o interogare în baza de date b. Poate include cuvântul cheie opŃional CASCADE c. Poate include cuvântul cheie opŃional OR REPLACE d. Trebuie să conŃină o comandă DMI, validă e. Trebuie să conŃină o instrucŃiune SELECT validă

18. Utilizările valide ale instrucŃiunii ALTER TABLE includ a. Adăugarea coloanelor b. Modificarea lungimii sau a preciziei coloanelor c. Redenumirea unui tabel d. Eliminarea unei chei primare e. Adăugarea unei chei primare

19. O instrucŃiune ALTER TABLE nu poate fi folosită pentru a. Schimbarea tipului de date al unei coloane la un tip numeric dacă în coloana

respectivă există date de alt tip b. Redenumirea unei coloane c. Schimbarea unei restricŃii din NULL în NOT NULL pentru o coloană care

conŃine valori nule d. Eliminarea unei chei exteme care referă o cheie primară e. Eliminarea unei chei primare dacă există chei exteme care referă cheia

primară 20. InstrucŃiunea DROP poate fi folosită pentru a şterge

a. restricŃie referenŃială b. Un index c. Un tabel d. O coloană dintr-un tabel e. O vizualizare

Page 178: SOLUTII - Baze de Date - Adunate

Limbajul de interogare a datelor(DQL)

Întrebări şi probleme 1. O instrucŃiune SELECT fără o clauză WHERE a. Selectează toate coloanele din tabel sau vizualizare b. Returnează un mesaj de eroare c. Selectează toate rândurile din tabel sau vizualizare d. Afişează numai definiŃia tabelului sau a vizualizării e. Scrie întotdeauna rezultatele într-un fişier jurnal 2. În SQL, ordinea rândurilor din rezultatele interogării a. Este specificată de clauza SORTED BY b. Poate fi ascendentă sau descendentă pentru orice coloană c. În mod prestabilit este descendentă, dacă nu se specifică o altă ordine d. Este imprevizibilă dacă nu este specificată in interogare e. Poate fi specificată numai pentru coloanele din setul de rezultate al interogării 3. Operatorul BETWEEN a. Specifică un domeniu de valori care include şi capetele b. Poate fi rescris folosind operatorii <= şi NOT <= c. Poate fi rescris folosind operatorii <= şi >= d. Selectează rândurile adăugate în tabel într-un anumit interval de timp e. Nu este inclus în standardul ISO/ANSI 4. Operatorul LIKE standard a. Foloseşte semne de întrebare drept caractere de înlocuire poziŃionale b. Foloseşte liniuŃe de subliniere drept caractere de înlocuire poziŃionale c. Foloseşte liniuŃe de subliniere drept caractere de înlocuire nepoziŃionale d. Foloseşte simboluri procent drept caractere de înlocuire poziŃionale e. Foloseşte simboluri procent drept caractere de înlocuire nepoziŃionale 5. O instrucŃiune SQL care confine o funcŃie de agregare a. Poate conŃine şi coloane calculate b. Poate conŃine şi coloane obisnuite c. Trebuie să includă o clauză ORDER BY d. Trebuie să includă o clauză GROUP BY e. Nu poate include, în acelaşi timp, o clauză GROUP BY şi o clauză

ORDERBY 6. Când operatorii AND şi OR sunt combinaŃi în aceeaşi clauză WHERE

a. Sistemul SGBD returnează un mesaj de eroare b. Operatorul AND are prioritate mai mare decât operatorul OR c. Operatorul AND are prioritate mai mică decât operatorul OR d. Parantezele, sunt obligatorii e. Parantezele sunt opŃionale

Page 179: SOLUTII - Baze de Date - Adunate

7. Sintaxa corectă pentru eliminarea valorilor nule din rezultatele interogării este

a. = NULL b. NOT = NULL c. <>NULL d. IS NULL e. IS NOT NULL

8. FuncŃiile SQL standard pentru şiruri de caractere includ

a. UPPER b. MIDDLE c. LOWER d. SUBSTR e. EXISTS

9. FuncŃiile, SQL matematice standard includ

a. LENGTH b. ROUND c. CAST d. MIN e. ABS

10. Operatorul UNION

a. Elimină rândurile duplicate din setul de rezultate b. Include rândurile duplicate în setul de rezultate c. Combină două interogări într-o singură interogare de tip join d. Combină seturile de rezultate a două interogări într-un singur set de

rezultate e. Este numit JOIN în unele implementări SQL

ScrieŃi instrucŃiunile SQL pentru următoarele probleme 1. GăsiŃi toate filmele din tabelul FILM pentru care MPAA_COD_INCHIRIERE

are altă valoare decât „R". 2. AfişaŃi titlurile şi preŃurile tuturor filmelor pentru care

PRET_VANZARE_DVD este cel puŃin 19.99, dar nu mai mare de 29.99, ordonate crescător după preŃ.

3. AfişaŃi toate filmele pentru care genul (COD_GEN_FILM) este Comdy şi categoria MPAA (MPAA _COD_INCHIRIERE) este PG-13, împreună cu filmele pentru care genul este Drama şi categoria este R.

4. 14. Câte închirieri (tabelul FILM_INCHIRIAT) nu au nici o valoare în coloana LATE_OR_LOSS_FEE?

5. Câte persoane au un nume de familie (NUME_FAMILIE_PERSOANA) care conŃine litera „a", majusculă sau minusculă?

6. AfişaŃi toate titlurile de filme care conŃin cuvântul „the", cu sau fără literă mare.

Page 180: SOLUTII - Baze de Date - Adunate

7. FolosiŃi funcŃia SUM pentru a afla totalul valorilor din coloana PLATA_INCHIRIAT din tabelul FILM_INCHIRIAT.

8. AfişaŃi primele cinci caractere din numele de familie (NUME_FAMILIE_PERSOANA) din tabelul PERSOANA, dar eliminaŃi toate valorile duplicate din setul de rezultate?

9. Din tabelul FILM, afişaŃi toate genurile (COD_GEN_FILM), împreună cu media preŃurilor pentru DVD (PRET_VANZARE_DVD) pentru fiecare gen, rotunjită la două poziŃii zecimale.

10. AfişaŃi toate filmele (ID_FILM) care au fost închiriate (tabelul FILM_INCHIRIAT), cu suma totală strânsă din taxele de închiriere (PLATA_INCHIRIAT) sau taxele de întârziere sau pierdere (PLATA_PENALIZARE) pentru filmul respectiv. Sugestie: adunaŃi valorile PLATA_INCHIRIAT şi PLATA_PENALIZARE, apoi însumaŃi (SUM) rezultatul respectiv pentru fiecare valoare ID_FILM. Unele valori din coloana PLATA_PENALIZARE sunt nule, aşa că, dacă nu aveŃi o funcŃie care să înlocuiască valorile nule cu o altă valoare (zero, în acest caz), veŃi obŃine valori nule în rezultate. În Oracle, funcŃia se numeşte NVL, în Microsoft SQL Server se numeşte ISNULL, iar în MySQL se numeşte IFNULL. (Se pare că nu există o funcŃie echivalentă în D132).

Combinarea datelor din mai multe tabele

Întrebări şi probleme

l. O subinterogare a. Poate fi folosită pentru a selecta valorile care vor fi aplicate condiŃiilor din

clauza WHERE b. Poate fi corelată sau necorelată c. Reprezintă o cale puternică de calculare a coloanelor d. Trebuie să nu fie încadrate în paranteze e. Permite selectarea flexibilă a rândurilor

2. O uniune (join) fără o clauză WHERE sau o clauză JOIN a. Are ca rezultat un mesaj de eroare b. Nu returnează nici un rând din setul de rezultate c. Reprezintă o uniune externă (outer join) d. Reprezintă o uniune internă (inner join) e. Are ca rezultat un produs cartezian 3. O uniune externă (outer join) a. Poate fi scrisă în Oracle SQL folosind un simbol (+) în clauza FROM b. Poate fi scrisă în Microsoft SQL Server folosind operatorul = sau =* în clauza

WHERE c. Returnează toate rândurile doar din unul dintre tabele d. Returnează toate rândurile din unul sau din ambele tabele

Page 181: SOLUTII - Baze de Date - Adunate

e. Poate fi catre stânga, către dreapta sau completă 4. O auto-uniune (self join) a. Nu poate avea niciodată ca rezultat un produs cartezian b. Poate fi o uniune internă sau o uniune externă c. Rezolvă relaŃiile recursive d. Poate folosi o subinterogare pentru a limita şi mai mult rândurile selectate e. Implică două tabele diferite 5. O uniune (Join) a. Combină coloanele din două sau mai multe tabele în rezultatele unei singure

interogări b. Combină rânduri din interogari multiple într-un singur set de rezultate c. Este realizată ori de câte ori în clauza FROM sunt specificate mai multe tabele d. Necesită folosirea unei clauze JOIN e. Necesită o listă de tabele separate prin virgule în clauza FROM 6. O uniune de egalitate (equijoin) a. Este cunoscută şi sub numele de uniune externă (outerjoin) b. Este cunoscută şi sub numele de uniune internă (innerjoiti) c. Este cunoscută şi sub numele de auto-uniune (selfjoin) d. Realizează întotdeauna legarea rândurilor folosind o condiŃie de egalitate (=) e. Realizează întotdeauna legarea rândurilor folosind o condiŃie de inegalitate

(<>)

7. Calificatorii numelor de coloane: a. Pot fi nume de tabele b. Pot fi numere care indică poziŃia relativă a tabelelor dîn lista FORM c. Pot fi pseudonime pentru numele de coloane , definite în clauza FORM d. Pot fi pseudonime pentru numele de tabele, definite în clauza FORM

8, O uniune încruşişată este: a. O uniune Naturală b. N produs cartezian c. O uniune externă d. O uniune Internă 9. O clauză JOIN folosind cuvântul cheie USING a. Nu poate fi folosită atunci când coloanele prin care se face legarea tabelelor

au nume diferite b. Nu poate fi folosită atunci când coloanele prin care se face legarea tabelelor

au aceleaşi nume c. Defineşte o uniune internă d. Defineşte o uniune externă e. Defineşte o auto-uniune

Page 182: SOLUTII - Baze de Date - Adunate

10. O subinterogare corelată a. Rulează mai eficient decât o subinterogare necorelată b. Rulează mai puin eficient decât o subinterogare necorelată c. Are o interogare internă care refera coloane din interogarea externă d. Are o interogare externă care refera coloane din interogarea internă e. Are o interogare internă care nu face nici o referire la coloanele din

interogarea externă

ScrieŃi instrucŃiunile SQL pentru următoarele probleme: 1. AfişaŃi numele şi identificatorul de client ale tuturor persoanelor decedate

(valoarea DATA_MORTII nu este nulă) care încă au conturi de client. 2. AfişaŃi numele angajatilor care au conturi de clienŃi. FolosiŃi uniuni pentru a

stabili ce clienŃi sunt angajaŃi şi ce angajaŃi au conturi de clienŃi. 3. RescrieŃi interogarea anterioară pentru a folosi subinterogări în loc de uniuni. 4. AfişaŃi numele de familie al fiecarui angajat, împreună cu numele de familie

al şefu1ui lor. 5. AfişaŃi numărul de închirieri pentru fiecare format (DVD şi VHS). 6. AfişaŃi numărul de identificare (FILM_ID) şi data la care trebuie returnate

(DATA_RETURNARII) pentru toate filmele închiriate şi încă nereturnate (coloană RETURNAT_DATA din tabelul FILM_INCH conŃine valori nule), dar care nu au fost cumpărate (coloană DATA_VANZARII din tabelul FILM_COPY conŃine valori nule).

7. AfişaŃi numarul de identificare şi titlul filmelor care nu au fost închiriate niciodată.

8. Folosind subinterogări pentru a filtra rândurile. AfişaŃi titlul filmelor pentru care în inventar există o copie VHS (MEDIA_FORMAT = ‘V’, iar DATA_VANZARII are valoarea NULL) dar pentru care nu există copii DVD (MEDIA_FORMAT = ‚D’ ).

9. RescrieŃi interogarea anterioară folosind o uniune în local unei subinterogări pentru a găsi filmele în format VHS.

10. AfişaŃi toate filmele pentru care în inventar există mai multe copii în acelaşi format.

interogărilor avansate

Întrebări şi Probleme 1. FuncŃiile SQL

a. Returnează un set de valori b. Returnează o singură valoare c. Pot fi folosite în clauza WHERE a unei instrucŃiuni SQL d. Pot fi folosite ca pseudonime pentru numele tabelelor intr-o instr. SQL e. Pot fi folosite în lista de coloane a unei instrucŃiuni SQL

2. FuncŃia REPLACE a. Înlocuieşte un nume de tabel cu un nume de vizualizare b. Înlocuieşte numele unei coloane cu pseudonimul coloanei

Page 183: SOLUTII - Baze de Date - Adunate

c. Înlocuieşte un şir de caractere dintr-o coloană cu un alt şir de caractere d. Înlocuieşte toate valorile dintr-o coloană cu un alt set de valori e. Înlocuieşte toate rândurile dintr-o vizualizare cu rânduri conŃinând date dintr-

un alt tabel 3. FuncŃia LTRIM

a. Elimină spaŃiile de la sfârşitul şirurilor de caractere b. Elimină spaŃiile de la începutul şirurilor de caractere c. Poate fi imbricată cu alte funcŃii d. înlocuieşte valorile nule cu alte valori în şirurile de caractere e. Elimină spaŃiile de la începutul şi de la sfârşitul şirurilor de caractere

4. FuncŃia CHAR a. Este numită CHR în unele implementări SQL b. Este identică cu funcŃia ASCII în unele implementări SQL c. Returnează valoarea corespunzătoare unui caracter din setul de caractere ASCII d. Returnează caracterul corespunzător unei valori e. Transformă o valoare numerică într-un şir de caractere

5. FuncŃia SIGN a. Returnează -l daca parametrul furnizat are valoare negativa b. Returnează 0 dacă parametrul furnizat are valoarea zero c. Returnează +1 dacă parametrul furnizat are o valoare pozitivă d. Returnează 0 dacă parametrul furnizat are valoarea NULL e. Returnează o valoare nulă dacă parametrul furnizat nu este un număr

6. FuncŃia CEILING a. Rotunjeşte un număr prin adăugire până la primul număr întreg b. Rotunjeşte un număr prin scădere până la primul număr întreg c. Returnează întotdeauna un număr întreg d. Returnează un număr întreg sau o valoare nulă e. Este numită CEIL în unele implementări SQL

7. FuncŃia FLOOR a. Rotunjeşte un număr prin adăugire până la primul număr întreg b. Rotunjeşte un număr prin scădere până la primul număr întreg c. Returnează întotdeauna un număr întreg d. Returnează un număr întreg sau o valoare nulă e. Este numită FLR în unele implementări SQL

8. Expresiile CASE

a. Permit executarea condiŃională a clauzelor dintr-o instrucŃiune SQL b. Există sub două forme, respectiv statice şi dinamice c. Exista sub două forme, respectiv cu căutare şi fara cautare d. Există sub două forme, respectiv simple şi cu cautare e. Există sub două forme, respectiv standard şi cu cautare

ScrieŃi instrucŃiunile SQL pentru următoarele probleme:

1. AfişaŃi valorile MPAA_RATING_COD din tabelul MPAA_RATING, cu liniuŃele de despărŃire înlocuite cu spaŃii.

Page 184: SOLUTII - Baze de Date - Adunate

2. Folosind funcŃia CHAR (numită CHR în Oracle), afişaŃi valorile FILM_ID şi FILM_TITLU pentru toate filmele care conŃin apostrofuri (caracterul ASCII 39) în titlu.

3. AflaŃi valoarea ASCII a semnului de exclamare (!). 4. AflaŃi preŃul mediu al filmelor în format DVD (coloana RETAIL_PRET _DVD

din tabelul FILM), cu media calculată rotunjită prin adăugire la cea mai apropiată sumă fără zecimale.

5. AflaŃi preŃul mediu al filmelor în format VHS (coloana RETAIL_PRET_VHS din tabelul FILM), cu media calculată rotunjită prin scădere la cea mai apropiată sumă fără zecimale.

6. Pentru o bază de date Oracle, generaŃi comenzile SQL pentru eliminarea tuturor restricŃiilor referenŃiale aflate în proprietatea utilizatorului curent. Vizualizarea Oracle de tip catalog se numeşte USER_CONSTRAINTS, iar restricŃiile referenŃiale au valoarea 'R' în coloana CONSTRAINT_TYPE. Numele tabelului pe care se bazează restricŃia se află în coloana TABLE_NAME a vizualizării. Nu uitaŃi că trebuie să folosiŃi comanda ALTER TABLE pentru eliminarea unei restricŃii.

7. Pentru o bază de date Microsoft SQL Server, afişaŃi toate restricŃiile de tip cheie externă. FolosiŃi tabelul de sistem SYSOBJECTS, în care NAME este numele restricŃiei, iar coloana XTYPE are valoarea 'F' pentru restricŃiile de tip cheie externă.

8. ScrieŃi o instrucŃiune SQL care afişează fiecare cont de client (CLIENT_CONT_ID) cu un şir de caractere bazat pe valoarea coloanei COPIL_INCH_ALLOWED_INDIC, care să conŃină textul „Poate fi inchiriat de copii" dacă valoarea coloanei este 'Y' şi textul „Nu poate fi inchiriat de copii" dacă valoarea este 'N'. Sugestie: Cel mai bine funcŃionează în acest caz o expresie CASE simplă.

9. ScrieŃi o instrucŃiune SQL care afişează fiecare film (FILM_ID) şi o valoare

pentru deceniu, în funcŃie de valoarea coloanei ANUL_PRODUCERII sau necunoscut), în acest caz v-ar fi de folos o expresie CASE cu cautare.

10. ScrieŃi o instrucŃiune SQL care afişează fiecare inchiriere a unui film (tabelul FILM_INCH) cu valoarea TAXA_PENALIZAREclasificaŃa astfel:

None (valoare nulă sau zero), Minor (valoare < 10) sau Major (valoare > 10) .

Limbajul de manipulare a datelor – DML

Întrebări şi probleme

1. Limbajul DML include următoarele comenzi SQL: a. INSERT b. REMOVE c. UPDATE d. SELECT e. DROP

Page 185: SOLUTII - Baze de Date - Adunate

2. O instrucŃiune DML poate referi a. Coloane din mai multe tabele b. Coloane dintr-un singur tabel c. O vizualizare care conŃine coloane dintr-un singur tabel d. Coloane ale unei vizualizări bazate pe un singur tabel e. Coloane ale unei vizualizări bazate pe mai multe tabele 3. La formarea unei instrucŃiuni DML, trebuie să tineti seama de următoarele

restricŃii a. RestricŃii referenŃiale b. RestricŃii de securitate c. RestricŃii NOT NULL d. RestricŃii de unicitate e. RestricŃii cheie primară 4. O instrucŃiune INSERT cu o clauză VALUES a. Trebuie să aibă o listă de coloane b. Trebuie să aibă o listă de valori c. Poate insera rânduri multiple la o singură rulare d. Poate folosi cuvântul cheie NULL pentru a atribui valori nule coloanelor e. Poate include o clauză WHERE 5. O instrucŃiune INSERT cu o comandă SELECT imbricată este utilă pentru a. Găsirea următoarei valori pentru o cheie primară atribuită secvenŃial b. Mutarea rândurilor dintr-un tabel în altul c. Popularea unui tabel de test cu date dintr-un alt tabel d. Eliminarea rândurilor duplicate dintr-un tabel e. Inserarea mai multor rânduri într-un tabel cu o singură instrucŃiune 6. O instrucŃiune INSERT cu o comandă SELECT imbricată a. Trebuie să aibă două liste de coloane, una în clauza INSERT şi una în b. Trebuie să aibă o instrucŃiune SELECT internă care retumează un singur rând

de date c. Poate folosi cuvântul cheie NULL pentru a atribui valori nule coloanelor d. Poate include o clauză WHERE e. Trebuie să aibă în instrucŃiunea SELECT internă o listă de coloane care

corespunde cu lista de coloane din clauza INSERT sau cu coloanele din tabelul în care sunt inserate datele

7. O instrucŃiune UPDATE fără o clauză WHERE a. Actualizează toate rândurile din tabel cu valori nule b. încearcă să actualizeze toate rândurile din tabel c. Eşuează şi returnează o eroare d. Şterge toate rândurile din tabel e. Are ca rezultat un produs cartezian

Page 186: SOLUTII - Baze de Date - Adunate

8. O instrucŃiune DELETE fără o clauză WHERE a. Actualizează toate rândurile din tabel cu valori nule b. Eşuează si returnează o eroare c. încearcă să şteargă toate rândurile din tabel d. Are ca rezultat un produs cartezian e. Trebuie să includă o listă de coloane 9. O instrucŃiune UPDATE a. Trebuie să includă o clauză SET b. Trebuie să furnizeze o nouă valoare pentru cel puŃin o coloană c. Trebuie să includă o clauză WHERE d. Poate atribui unei coloane valoarea unei alte coloane e. Poate atribui unei coloane o listă de valori derivate dintr-o expresie 10. O instrucŃiune DELETE a. Poate include o listă opŃională de coloane b. Poate include o clauză WHERE opŃională c. Poate folosi cuvântul cheie FORCE pentru a forŃa ştergerea rândurilor d. Nu poate încălca restricŃiile referenŃiale ale tabelului e. Poate avea o instrucŃiune SELECT internă, ca parte a clauzei WHERE 11. Clauza SET dintr-o instrucŃiune UPDATE poate atribui unei coloane o valoare

care este a. O constantă b. Numele unei alte coloane c. O listă de valori d. Orice expresie din care rezultă o singură valoare e. Cuvântul cheie NULL 12. InstrucŃiunea SELECT internă a unei instrucŃiuni INSERT poate include a. O clauză WHERE b. O clauză GROUP BY c. Una sau mai multe funcŃii de agregare d. O uniune a mai multor tabele e. O clauză UNION

ScrieŃi instrucŃiuni SQL pentru următoarele probleme 13. Folosind o instrucŃiune INSERT cu o clauză VALUES, dar fără listă de

coloane, inseraŃi în tabelul FILM_GENRE un nou rând, cu valorile FILM_COD_GEN = TRAIN' şi FILM_DESCRIERE_GEN = Training'.

14. Folosind o instrucŃiune INSERT cu o clauză VALUES si o listă de coloane,

inseraŃi în tabelul FILM un nou rând, cu următoarele valori pentru date:

Page 187: SOLUTII - Baze de Date - Adunate

FILM_ID: 99 FILM_COD_GEN: 'TRAIN' MPAA_COD_RATING: NR FILM_NUME: ANGAJAT

Training Video

15. Folosind o instrucŃiune INSERT cu o instrucŃiune SELECT internă, inseraŃi

în tabelul FILM_LIMBA un rând pentru limba japoneză (COD_LIMBA = 'ja'), asociat cu toate filmele din tabelul FILM. (în prezent, tabelul FILM_LIMBA nu conŃine nici un rând pentru limba japoneză.)

16. CreaŃi un tabel, numit TOTAL_INCHIRIERE, folosind instrucŃiunea

CREATE de mai jos. Folosind o instrucŃiune INSERT cu o instrucŃiune SELECT internă, inseraŃi în tabelul TOTAL_INCHIRIEREun rând pentru fiecare film din tabelul FILM INCHIRIERE, conŃinând numărul total de închirieri şi suma totală obŃinută din închirierea filmului respectiv.

CREATE TABLE TOTAL_INCHIRIERE (FILM_ID INTEGER NOT NULL, NUMBER_OF_INCHIRIERES INTEGER NOT NULL, TOTAL_COST_INCHIRIERES NUMERIC (7, 2) NOT NULL); 17. ŞtergeŃi toate rândurile din tabelul INCHIRIERE TOTAL.

18.ŞtergeŃi rândurile pentru limba japoneză, create la întrebarea 15.

19. Copia 1 a filmului 1 (FILM_ID = 1, NUMAR_COPIE = 1) a fost vândută pe data de 15 ianuarie 2005. actualizaŃi rândul respectiv din tabelul FILM_COPII. 20. ActualizaŃi tabelul FILM astfel încât să creşteŃi cu 10 procente toate

preŃurile pentru formatul VHS (RETAIL_PRET_VHS) care nu conŃin valori nule.

Page 188: SOLUTII - Baze de Date - Adunate

Partea I Concepte despre bazele de date relationale. Normalizare "1. SQL este a. Un limbaj realizat de Dr. E. F. Codd b. Un limbaj folosit pentru comunicarea cu bazele de date relationale c. Un limbaj folosit pentru definirea diagramelor ERD d. Folosit pentru definirea si modificarea obiectelor unei baze de date e. Folosit pentru definirea paginilor web" Raspuns B, D "2. O baza de date este a. O structura denumita de date, cum ar fi un tabel, o vizualizare sau unindex b. Un produs software furnizat de un producator de baze de date c. O colectie de date interrelationate gestionate ca o singura unitate d. Definita în acelasi mod de toti producatorii de software e. Implementata diferit de diferiti producatori" Raspuns C, E "3. Un sistem de gestionare a bazelor de date este a. O structura, cum ar fi un tabel, o vizualizare sau un index b. O colectie de date interrelationate gestionate ca o singura unitate c. Un produs software furnizat de un producator de baze de date d. Deseori abreviat sub forma DBMS e. O structura denumita de date, cum ar fi un tabel, o vizualizare sau un index" C,D "4. Exemple de sisteme RDBMS sunt a. EXCEL b. MySQL c. PostgreSQL d. Oracle Database e. Microsoft SQL Server" B,C,D,E "5. Componentele unei baze de date relationale includ a. Relatii b. Tabele c. Vizualizari de utilizator d. Diagrame ERD e. Restrictii" A,B,E "6. Printre tipurile de restrictii care pot fi folosite în bazele de date se numara a. NOT NULL b. Relatie c. Cheie primara d. CHECK e. Unicitate" A,C,D,E "7. Scopul normalizarii este de a rezolva urmatoarele probleme a. Anomalia de inserare b. Performante reduse c. Anomalia de creare d. Anomalia de stergere e. Anomalia de actualizare" A,D,E "8. Procesul de normalizare a. Începe de la tabele, pentru a ajuta proiectantii sa descopere vizualizarile de utilizator b. A fost dezvoltat de Dr. E. F. Codd c. A fost dezvoltat de Oracle d. Este aplicat sistematic fiecarei vizualizari de utilizator"

Page 189: SOLUTII - Baze de Date - Adunate

B,D "9. Un identificator unic(cheie) a. Trebuie determinat înaitea procesului de normalizare b. Poate fi compus dintr-un singur atribut c. Poate fi compus din zero sau mai multe atribute d. Poate fi compus din mai multe atribute concatenate" A,D "10. Prima forma normala rezolva anomaliile cauzate de a. Dependentele partiale de cheia primara b. Grupurile repetitive c. Dependentele tranzitive d. Atributele multivaloare e. Relatiile de tip unu-la-mai-multi" B,D "11. A doua forma normala rezolva anomaliile cauzate de a. Dependentele partiale de cheia primara b. Grupurile repetitive c. Dependentele tranzitive d. Atributele multi valoare e. Relatiile de tip unu-la-mai-multi" A "12. A treia forma normala rezolva anomaliile cauzate de a. Dependentele partiale de cheia primara b. Grupurile repetitive c. Dependentele tranzitive d. Atributele multivaloare e. Relatiile de tip unu-la-mai-multi" C "13. Pentru aducerea în prima forma normala a unei relatii ne-normalizate a. Atributele care depind doar de o parte a cheii sunt eliminate b. Atributele multivaloare sunt mutate într-o noua relatie c. Atributele care sunt dependente tranzitiv sunt eliminate d. Grupurile repetitive sunt mutate într-o noua relatie e. Identificatorul unic al relatiei originale este copiat în noua relatie" B,D,E "14. Problemele de dependenta partiala a. Sunt rezolvate de FN2 b. Sunt rezolvate de FN3 c. Pot aparea în relatiile cu chei primare concatenate d. Apar cand un atribut non-cheie depinde doar de o parte a cheii primare e. Apar cand un atribut non-cheie depinde de un alt atribut non-cheie" A, C, D Partea a_III_a SQL "1. SQL este a. Un limbaj orientat spre obiecte b. Un limbaj procedural c. Un limbaj nonprocedural d. Un limbaj declarativ e. Un limbaj standard" C,D,E "2. Într-un aranjament client/server a. Componentele software DBMS ruleaza pe server b. Componentele software DBMS ruleaza pe client c. Componentele software ale clientului SQL ruleaza pe client d. Componentele software ale clientului SQL ruleaza pe server" A,C,D

Page 190: SOLUTII - Baze de Date - Adunate

"3. Un client SQL in linia de comanda a. Necesita un sistem bazat pe ferestre b. Ruleaza pe o mare varietate de platforme client. c. Necesita un browser web pe client. d. Afiseaza datele si optiunile de comanda folosind caracteristici grafice e. Afiseaza raspunsurile la comenzi sub forma de mesaje de tip text" B,E "4. Un client SQL cu interfata grafica (GUI) a. Necesita un sistem bazat pe ferestre b. Ruleaza pe o mare varietate de platforme client. c. Necesita un browser web pe client. d. Afiseaza datele si optiunile de comanda folosind caracteristici grafice e. Afiseaza raspunsurile la comenzi sub forma de mesaje de tip text" A,D "5. Un client SQL bazat pe web a. Necesita un sistem bazat pe ferestre b. Ruleaza pe o mare varietate de platforme client. c. Necesita un browser web pe client. d. Afiseaza datele si optiunile de comanda folosind caracteristici grafice e. Afiseaza raspunsurile la comenzi sub forma de mesaje de tip text" B,C,D "6. Clientii SQL oferiti de Oracle sunt a. iSQL b. Query Analyzer c. iSQL*Plus d. SQL*Plus e. SQLWorksheet" C,D,E "7. Clientii SQL oferiti de Microsoft sunt a. iSQL b. Query Analyzer c. iSQL*Plus d. SQL*Plus e. SQLWorksheet" A,B "8. Extensiile SQL create de furnizori a. Cresc portabilitatea codului SQL b. Scad portabilitatea codului SQL c. Contribuie la diferentierea produselor oferire de diferiti producatori d. Au fost bazate pe cererile pietei e. Sunt compatibile între implementarile diferitilor producatori" B, C, D "9. Instructiunile SQL a. încep cu un cuvânt cheie reprezentând o comanda b. Se termina cu un cuvânt cheie reprezentând o comanda c. încep cu un delimitator, cum ar fi caracterul punct si virgula d. Se termina un delimitator, cum ar fi caracterul punct si virgula e. încep cu o paranteza deschisa" A,D "10. Elementele limbajului SQL includ a. Cuvinte cheie b. Nume ale obiectelor din baza de date c. Operatori d. Restrictii e. Constante" A,B,C,E

Page 191: SOLUTII - Baze de Date - Adunate

"11. Elementele limbajului SQL sunt separate prin a. Virgule b. Exact un spatiu c. Unul sau mai multe spatii d. Linie noua e. Liniute de subliniere" C "12. Numele obiectelor bazei de date pot include a. Paranteze b. Liniute de subliniere c. Numere d. Litere e. Virgule" B,C,D "13. Instructiunile SQL pot li împartite în urmatoarele categorii a. Limbajul dc definire a datelor (DDl, - Data Definition Language) b. Limbajul dc selectare a datelor (DSL - Dala Selection Language) c. Limbajul dc replicare a datelor (DRL - Dala Replication Language) d. Limbajul pentru controlul datelor (DCL - Data Control Language) e. Limbajul dc manipulare a datelor (DML - Data Manipulation Language)" A,D,E "14. Limbajul de definire a datelor (DDL-Data Definition Language) include urm. instructiuni: a. SELECT b. INSERT c. CREATE d. ALTER e. DELETE" C,D "15. Limbajul de interogare a datelor (DQL - Data Query Language) include urm. instructiuni: a. SELECT b. INSERT c. CREATE d. ALTER e. DELETE" A "16. Limbajul de manipulare a datelor (DML-Data Manipulation Language) include instructiuni: a. SELECT b. INSERT c. CREATE d. UPDATE e. DELETE" B,D,E Limbajul de definire a datelor - DDL "1. Tipurile de date ofera urmatoarele avantaje a. Respecta standardele publicate b. Ofera un set de comportamente utile pentru utilizatorii bazei c. Asigura independenta fata de date d. Restrictioneaza datele din coloane la caractere care au sens în context e. Ajuta sistemul DBMS sa stocheze mai eficient datele din coloane" B,D,E

Page 192: SOLUTII - Baze de Date - Adunate

"2. Tipurile de date pentru caractere a. Sunt mai flexibile decât tipurile de date numerice b. Accepta atât date cu lungime fixa, cât si date cu lungime variabila. c. Necesita întotdeauna specificarea preciziei si a scalei d. Determina completarea coloanelor pâna la lungimea maxima maxima e. Pot stoca siruri de caractere în format specific unei limbi nationale" A,B,E "3. Tipurile de date numerice a. Sunt mai flexibile decât tipurile de date pentru caractere b. Restrictioneaza valorile din coloane la numere si simboluri înrudite, cum ar fi virgulele si simbolul dolar c. Necesita întotdeauna specificarea preciziei si a scalei d. Stocheaza valori exacte sau aproximative e. Sunt potrivite pentru a fi folosite în calcule" D,E "4. Tipurile numerice standard includ a. INTEGER b. NUMBER c. FLOAT d. BOOLEAN e. INTERVAL" A, C "5. Tipurile de date temporale standard includ a. DATETIME b. DATE c. TIMESTAMP d. TIMEZONE e. TIME" B,C,E "6. Valorile NULL a. Pot fi folosite pentru reprezentarea datelor care lipsesc sau nu sunt cunoscute b. Înseama acelasi lucru ca si spaNiile libere c. Sunt egale cu alte valori NULL d. Nu sunt egale cu alte valori NULL e. Sunt întotdeauna permise în mod prestabilit" A,D "7. Instructiunile DDL includ a. CREATE b. ALTER c. DELETE d. INSERT e. UPDATE" A,B "8. Instructiunea CREATE DATABASE a. Functioneaza exact la fel în toate sistemele DBMS relationale b. Specifiea întotdeauna numele bazei de date c. Specifiea întotdeauna numele proprietarului bazei de date d. Poate include parametri specifici producatorului e. Functioneaza la fel cu instructiunea CREATE SCHEMA" B,D "9. Definitia unei coloane din instructiunea CREATE TABLE poate include a. Numele tabelului b. Numele coloanei c. restrictie la nivel de tabel d. clauza DEFAULT e. O clauza NULL sau NOT NULL"

Page 193: SOLUTII - Baze de Date - Adunate

B,D,E "10. Numele unei coloane dintr-un tabel a. Trebuie sa fie specificat în instructiunea CREATE TABLE b. Trebuie sa fie unic în cadrul bazei de date c. Trebuie sa fie unic în cadrul tabelului d. Poate fi folosit într-un singur index e. Trebuie sa fie specificat în instructiunea ALTER TABLE" A,C "11. O restrictie la nivel de coloana a. Poate referi una sau mai multe coloane b. Poate fi inclusa într-o instructiune CREATE TABLE sau ALTER TABLE c. Foloseste o sintaxa identica sau aproape identica cu cea a unei restrictii de acelasi tip la nivel de tabel d. Poate fi folosita oriunde ar putea fi folosita o restrictie la nivel de tabel e. Are o sintaxa care difera de la un tip de restrictie la altul" B,C "12. Sintaxa corecta pentru clauza DEFAULT este a. DEFAULT (precizie, scala) b. DEFAULT [NULL | NOT NULL] c. DEFAULT (expresie) d. DEFAULT (nume–coloana) REFERENCES name–tabel (nume_coloana.) e. DEFAULT [UNIQUE | PRIMARY KEY]" C "13. Sintaxa corecta pentru o restrictie NOT NULL este a. nume_coloana tip--de–date IS NOT NULL b. nume_coloana tip–de–date NOT NULL c. DEFAULT [NULL | NOT NULL] d. CREATE NOT NULL INDEX ON nume_coloana" B "14. Sintaxa corecta pentru o restrictie UNIQUE este a. [CONSTRAINT nume—restrictie] UNIQUE (nume_coloana) b. [CONSTRAINT nume—restrictie] UNIQUE (nume_tabel) c. DEFAULT UNIQUE (nume_coloana) d. nume_coloana REFERENCES UNIQUE nume_tabel" A "15. Sintaxa corecta pentru o restrictie referentiala este a. [CONSTRAINT nume—restrictie] REFERENCES nume_index b. [CONSTRAINT nume—restrictie] REFERENCES nume_tabel c. FOREIGN KEY nume_coloana REFERENCES nume_tabel (nume_coloana) d. REFERENCES nume—tabel (nume_coloana) e. nume_coloana REFERENCES UNIQUE nume_tabel" D "16. Instructiunea CREATE INDEX a. Poate fi folosita pentru crearea restrictiilor de unicitate si cheie primara b. Poate include cuvântul cheie UNIQUE c. Trebuie sa refere doua sau mai multe nume de coloane d. Poate include cuvintele cheie ASC sau DESC pentru orice coloana e. Poate specifica ordinea ascendenta sau descendenta pentru una sau mai multe coloane" B,E "17. Instructiunea CREATE VIEW a. Stocheaza o interogare în baza de date b. Poate include cuvântul cheie optional CASCADE c. Poate include cuvântul cheie optional OR REPLACE d. Trebuie sa contina o comanda DMI, valida e. Trebuie sa contina o instructiune SELECT valida"

Page 194: SOLUTII - Baze de Date - Adunate

A,C,E "18. Utilizarile valide ale instructiunii ALTER TABLE includ a. Adaugarea coloanelor b. Modificarea lungimii sau a preciziei coloanelor c. Redenumirea unui tabel d. Eliminarea unei chei primare e. Adaugarea unei chei primare" A,B,D,E "19. O instructiune ALTER TABLE NU poate fi folosita pentru a. Schimbarea tipului de date al unei coloane la un tip numeric daca în coloana respectiva exista date de alt tip b. Redenumirea unei coloane c. Schimbarea unei restrictii din NULL în NOT NULL pentru o coloana care contine valori nule d. Eliminarea unei chei exteme care refera o cheie primara e. Eliminarea unei chei primare daca exista chei exteme care refera cheia primara" A,C,E "20. Instructiunea DROP poate fi folosita pentru a sterge a. restrictie referentiala b. Un index c. Un tabel d. O coloana dintr-un tabel e. O vizualizare" B,C,E Limbajul de interogare a datelor(DQL) "1. O instructiune SELECT fara o clauza WHERE a. Selecteaza toate coloanele din tabel sau vizualizare b. Returneaza un mesaj de eroare c. Selecteaza toate rândurile din tabel sau vizualizare d. Afiseaza numai definiNia tabelului sau a vizualizarii e. Scrie întotdeauna rezultatele într-un fisier jurnal" C "2. În SQL, ordinea rândurilor din rezultatele interogarii a. Este specificata de clauza SORTED BY b. Poate fi ascendenta sau descendenta pentru orice coloana c. În mod prestabilit este descendenta, daca nu se specifica o alta ordine d. Este imprevizibila daca nu este specificata in interogare e. Poate fi specificata numai pentru coloanele din setul de rezultate al interogarii" BD "3. Operatorul BETWEEN a. Specifica un domeniu de valori care include si capetele b. Poate fi rescris folosind operatorii <= si NOT <= c. Poate fi rescris folosind operatorii <= si >= d. Selecteaza rândurile adaugate în tabel într-un anumit interval de timp e. Nu este inclus în standardul ISO/ANSI" A,C "4. Operatorul LIKE standard a. Foloseste semne de întrebare drept caractere de înlocuire pozitionale b. Foloseste liniute de subliniere drept caractere de înlocuire pozitionale c. Foloseste liniute de subliniere drept caractere de înlocuire nepozitionale d. Foloseste simboluri procent drept caractere de înlocuire pozitionale e. Foloseste simboluri procent drept caractere de înlocuire nepozitionale" B,E

Page 195: SOLUTII - Baze de Date - Adunate

"5. O instructiune SQL care contine o functie de agregare a. Poate contine si coloane calculate b. Poate contine si coloane obisnuite c. Trebuie sa includa o clauza ORDER BY d. Trebuie sa includa o clauza GROUP BY e. Nu poate include, în acelasi timp, o clauza GROUP BY si o clauza ORDER BY" A, B "6. Când operatorii AND si OR sunt combinati în aceeasi clauza WHERE a. Sistemul SGBD returneaza un mesaj de eroare b. Operatorul AND are prioritate mai mare decât operatorul OR c. Operatorul AND are prioritate mai mica decât operatorul OR d. Parantezele, sunt obligatorii e. Parantezele sunt optionale" B, E "7. Sintaxa corecta pentru eliminarea valorilor nule din rezultatele interogarii este a. = NULL b. NOT = NULL c. <>NULL d. IS NULL e. IS NOT NULL" E "8. Functiile SQL standard pentru siruri de caractere includ a. UPPER b. MIDDLE c. LOWER d. SUBSTR e. EXISTS" A, C, D "9. Functiile, SQL matematice standard includ a. LENGTH b. ROUND c. CAST d. MIN e. ABS" B,E "10. Operatorul UNION a. Elimina rândurile duplicate din setul de rezultate b. Include rândurile duplicate în setul de rezultate c. Combina doua interogari într-o singura interogare de tip join d. Combina seturile de rezultate a doua interogari într-un singur set de rezultate e. Este numit JOIN în unele implementari SQL" A, D Combinarea datelor din mai multe tabele "l. O subinterogare a. Poate fi folosita pentru a selecta valorile care vor fi aplicate conditiilor din clauza WHERE b. Poate fi corelata sau necorelata c. Reprezinta o cale puternica de calculare a coloanelor d. Trebuie sa nu fie încadrate în paranteze e. Permite selectarea flexibila a rândurilor" A,E

Page 196: SOLUTII - Baze de Date - Adunate

"2. O uniune (join) fara o clauza WHERE sau o clauza JOIN a. Are ca rezultat un mesaj de eroare b. Nu returneaza nici un rând din setul de rezultate c. Reprezinta o uniune externa (outer join) d. Reprezinta o uniune interna (inner join) e. Are ca rezultat un produs cartezian" E "3. O uniune externa (outer join) a. Poate fi scrisa în Oracle SQL folosind un simbol (+) în clauza FROM b. Poate fi scrisa în Microsoft SQL Server folosind operatorul *= sau =* în clauza WHERE c. Returneaza toate rândurile doar din unul dintre tabele d. Returneaza toate rândurile din unul sau din ambele tabele e. Poate fi catre stânga, catre dreapta sau completa (outer join)" a. Poate fi scrisa în Oracle SQL folosind un simbol (+) în clauza FROM B,D,E "4. O auto-uniune (self join) a. Nu poate avea niciodata ca rezultat un produs cartezian b. Poate fi o uniune interna sau o uniune externa c. Rezolva relatiile recursive d. Poate folosi o subinterogare pentru a limita si mai mult rândurile selectate e. Implica doua tabele diferite" B,C,D "5. O uniune (Join) a. Combina coloanele din doua sau mai multe tabele în rezultatele unei singure interogari b. Combina rânduri din interogari multiple într-un singur set de rezultate c. Este realizata ori de câte ori în clauza FROM sunt specificate mai multe tabele d. Necesita folosirea unei clauze JOIN e. Necesita o lista de tabele separate prin virgule în clauza FROM" A, C "6. O uniune de egalitate (equijoin) a. Este cunoscuta si sub numele de uniune externa (outerjoin) b. Este cunoscuta si sub numele de uniune interna (innerjoiti) c. Este cunoscuta si sub numele de auto-uniune (selfjoin) d. Realizeaza întotdeauna legarea rândurilor folosind o conditie de egalitate (=) e. Realizeaza întotdeauna legarea rândurilor folosind o condiNie de inegalitate (<>)" B,D "7. Calificatorii numelor de coloane: a. Pot fi nume de tabele b. Pot fi numere care indica pozitia relativa a tabelelor din lista FROM c. Pot fi pseudonime pentru numele de coloane , definite în clauza FROM d. Pot fi pseudonime pentru numele de tabele, definite în clauza FROM" e. Rezolva referinte ambigue la coloane A, D, E "8. O uniune încrusisata este: a. O uniune Naturala b. Un produs cartezian c. O uniune externa d. O uniune Interna" B

Page 197: SOLUTII - Baze de Date - Adunate

"9. O clauza JOIN folosind cuvântul cheie USING a. Nu poate fi folosita atunci când coloanele prin care se face legarea tabelelor au nume diferite b. Nu poate fi folosita atunci când coloanele prin care se face legarea tabelelor au aceleasi nume c. Defineste o uniune interna d. Defineste o uniune externa e. Defineste o auto-uniune" A, C "10. O subinterogare corelata a. Ruleaza mai eficient decât o subinterogare necorelata b. Ruleaza mai puin eficient decât o subinterogare necorelata c. Are o interogare interna care refera coloane din interogarea externa d. Are o interogare externa care refera coloane din interogarea interna e. Are o interogare interna care nu face nici o referire la coloanele din interogarea externa" B, C Scrierea interogarilor avansate "1. Functiile SQL a. Returneaza un set de valori b. Returneaza o singura valoare c. Pot fi folosite în clauza WHERE a unei instructiuni SQL d. Pot fi folosite ca pseudonime pentru numele tabelelor intr-o instr. SQL e. Pot fi folosite în lista de coloane a unei instructiuni SQL" B, C, E "2. Functia REPLACE a. Înlocuieste un nume de tabel cu un nume de vizualizare b. Înlocuieste numele unei coloane cu pseudonimul coloanei c. Înlocuieste un sir de caractere dintr-o coloana cu un alt sir de caractere d. Înlocuieste toate valorile dintr-o coloana cu un alt set de valori e. Înlocuieste toate rândurile dintr-o vizualizare cu rânduri conNinând date dintrun alt tabel" C "3. Functia LTRIM a. Elimina spatiile de la sfârsitul sirurilor de caractere b. Elimina spatiile de la începutul sirurilor de caractere c. Poate fi imbricata cu alte functii d. înlocuieste valorile nule cu alte valori în sirurile de caractere e. Elimina spatiile de la începutul si de la sfârsitul sirurilor de caractere" B, C "4. Functia CHAR a. Este numita CHR în unele implementari SQL b. Este identica cu functia ASCII în unele implementari SQL c. Returneaza valoarea corespunzatoare unui caracter din setul de caractere ASCII d. Returneaza caracterul corespunzator unei valori din setul de caractere ASCII e. Transforma o valoare numerica într-un sir de caractere " A, D "5. Functia SIGN a. Returneaza -l daca parametrul furnizat are valoare negativa b. Returneaza 0 daca parametrul furnizat are valoarea zero c. Returneaza +1 daca parametrul furnizat are o valoare pozitiva d. Returneaza 0 daca parametrul furnizat are valoarea NULL e. Returneaza o valoare nula daca parametrul furnizat nu este un numar" A, B

Page 198: SOLUTII - Baze de Date - Adunate

"6. Funtia CEILING a. Rotunjeste un numar prin adaugire pâna la primul numar întreg b. Rotunjeste un numar prin scadere pâna la primul numar întreg c. Returneaza întotdeauna un numar întreg d. Returneaza un numar întreg sau o valoare nula e. Este numita CEIL în unele implementari SQL" A, D, E "7. Functia FLOOR a. Rotunjeste un numar prin adaugire pâna la primul numar întreg b. Rotunjeste un numar prin scadere pâna la primul numar întreg c. Returneaza întotdeauna un numar întreg d. Returneaza un numar întreg sau o valoare nula e. Este numita FLR în unele implementari SQL" B, D "8. Expresiile CASE a. Permit executarea conditionala a clauzelor dintr-o instructiune SQL b. Exista sub doua forme, respectiv statice si dinamice c. Exista sub doua forme, respectiv cu cautare si fara cautare d. Exista sub doua forme, respectiv simple si cu cautare e. Exista sub doua forme, respectiv standard si cu cautare" A, D Limbajul de manipulare a datelor – DML "1. Limbajul DML include urmatoarele comenzi SQL: a. INSERT b. REMOVE c. UPDATE d. SELECT e. DROP" A, C "2. O instructiune DML poate referi a. Coloane din mai multe tabele b. Coloane dintr-un singur tabel c. O vizualizare care contine coloane dintr-un singur tabel d. Coloane ale unei vizualizari bazate pe un singur tabel e. Coloane ale unei vizualizari bazate pe mai multe tabele" B, C,E "3. La formarea unei instructiuni DML, trebuie sa tineti seama de urmatoarele restrictii a. Restrictii referentiale b. Restrictii de securitate c. Restrictii NOT NULL d. Restrictii de unicitate e. Restrictii cheie primara" A, C D, E "4. O instructiune INSERT cu o clauza VALUES a. Trebuie sa aiba o lista de coloane b. Trebuie sa aiba o lista de valori c. Poate insera rânduri multiple la o singura rulare d. Poate folosi cuvântul cheie NULL pentru a atribui valori nule coloanelor e. Poate include o clauza WHERE" B, D "5. O instructiune INSERT cu o comanda SELECT imbricata este utila pentru a. Gasirea urmatoarei valori pentru o cheie primara atribuita secvential b. Mutarea rândurilor dintr-un tabel în altul c. Popularea unui tabel de test cu date dintr-un alt tabel d. Eliminarea rândurilor duplicate dintr-un tabel

Page 199: SOLUTII - Baze de Date - Adunate

e. Inserarea mai multor rânduri într-un tabel cu o singura instructiune" A, C, E "6. O instructiune INSERT cu o comanda SELECT imbricata a. Trebuie sa aiba doua liste de coloane, una în clauza INSERT si una în instructiunea SELECT interna b. Trebuie sa aiba o instructiune SELECT interna care retumeaza un singur rând de date c. Poate folosi cuvântul cheie NULL pentru a atribui valori nule coloanelor d. Poate include o clauza WHERE e. Trebuie sa aiba în instructiunea SELECT interna o lista de coloane care corespunde cu lista de coloane din clauza INSERT sau cu coloanele din tabelul în care sunt inserate datele" C, D, E "7. O instructiune UPDATE fara o clauza WHERE a. Actualizeaza toate rândurile din tabel cu valori nule b. încearca sa actualizeze toate rândurile din tabel c. Esueaza si returneaza o eroare d. Sterge toate rândurile din tabel e. Are ca rezultat un produs cartezian" B "8. O instructiune DELETE fara o clauza WHERE a. Actualizeaza toate rândurile din tabel cu valori nule b. Esueaza si returneaza o eroare c. încearca sa stearga toate rândurile din tabel d. Are ca rezultat un produs cartezian e. Trebuie sa includa o lista de coloane" C "9. O instructiune UPDATE a. Trebuie sa includa o clauza SET b. Trebuie sa furnizeze o noua valoare pentru cel putin o coloana c. Trebuie sa includa o clauza WHERE d. Poate atribui unei coloane valoarea unei alte coloane e. Poate atribui unei coloane o lista de valori derivate dintr-o expresie" A, B, D "10. O instructiune DELETE a. Poate include o lista optionala de coloane b. Poate include o clauza WHERE optionala c. Poate folosi cuvântul cheie FORCE pentru a forta stergerea rândurilor d. Nu poate încalca restrictiile referentiale ale tabelului e. Poate avea o instructiune SELECT interna, ca parte a clauzei WHERE" B, D, E "11. Clauza SET dintr-o instructiune UPDATE poate atribui unei coloane o valoare care este a. O constanta b. Numele unei alte coloane c. O lista de valori d. Orice expresie din care rezulta o singura valoare e. Cuvântul cheie NULL" A, B, D, E "12. Instructiunea SELECT interna a unei instructiuni INSERT poate include a. O clauza WHERE b. O clauza GROUP BY c. Una sau mai multe functii de agregare d. O uniune a mai multor tabele e. O clauza UNION" A, B, C, D, E

Page 200: SOLUTII - Baze de Date - Adunate

Adevarat / Fals Pentru a fi in a treia forma normala , o relatie trebuie sa nu fie in prima forma normala sau in a doua forma normala: - Adevarat - Fals Pentru a fi in a treia forma normala o relatie nu trebuie sa fie in prima sau a doua forma normala? - Adevarat - Fals Probleme de dependenta tranzitiva apar atunci cand un atribut non-cheie depinde de un alt atribut non-cheie - Adevarat - Fals Diagrama ERD este un model de date conceptual de nivel înalt, dependent de platforma hardware utilizată şi de tipul de RDBMS (SGBD) – ului utilizat - Adevarat - Fals Folosind aplicatia Microsoft Access, se poate administra toata informatia într-o singura baza de date (Database)? - Adevarat - Fals Folosing MSAccess se poate administra toata informatia intr-o singura baza de date ? - Adevarat - Fals A doua forma normala nu rezolva anomaliile cauzate de a. Dependentele partiale de cheia primară b. Grupurile repetitive c. Dependentele tranzitive d. Atributele multi valoare e. Relatiile de tip unu-la-mai-multi A doua formă normală rezolvă anomaliile cauzate de a. Grupurile repetitive b. Dependentele partiale de cheia primară c. Grupurile repetitive si atributele multivaloare d Dependentele tranzitive A treia forma normala rezolva anomaliile cauzate de : si 4 var de raspuns a. Dependentele partiale de cheia primară b. Grupurile repetitive c. Dependentele tranzitive d. Atributele multivaloare e. Relatiile de tip unu-la-mai-multi Atunci când se foloseste operatorul “+” , apare o eroare de tipul Type Mismatch (Nepotrivire de tip) in cazul cand a. ambii operanzi sunt valori numerice b. ambii operanzi sunt siruri de caractere c. un operand este valoare numerica si celalalt un sir de caractere d. un operand este valoare numerica si celalalt de tipul date/time

Page 201: SOLUTII - Baze de Date - Adunate

Care din următoarele baze de date nu este RDBMS a. Postage SQL b. Oracle Database c. My SQL d. Microsoft SQL Server e. Excel database Care nu este un concept utilizat pentru a descrie formal-uzual-fizic elementele de baza ale organizarii datelor a. relatie-tablou-fisier b. tuplu-linie-inregistrare c. atribut-coloana-camp d. domeniu-functie-functie Care nu este o interogare de actiune? a. cu actualizare b. cu creeare de tabele c. cu adaugare si stergere d. cu parametru Care din interogarile cu actiune pot afecta doar campuri izolate?: a. cu actualizare b.cu adaugare c.cu stergere d.cu creare de tabele Clinetii SQL oferiti de Microsoft nu sunt: a. SqLWorsheet b. sql PLUS c. iSql d. Isql PLUS Campurile calculate intr-un raport se pot introduce in modul Design View: a. numai in banda Report Footer b. numai in banda Group Footer c. in banda de Detail,Group F.si Report F. d. numai in banda de Detail Cind se realizeaza un table cu Report View din tabele relationale, informatiile fiind grupate pe parte one a relatiei si se opteaza pentru SUMMARY OPTION atunci: a. se introduc calculele solicitate in banda de subsol de grup b. se introduc calculele solicitate in banda de detaliu de grup c. se introduc calculele solicitate in benzile de subsol de grup de subsol de raport d. se introduc calculele solicitate in banda de detaliu de grup si subsol de grup Cate reguli a emis Codd / Modelul relational conceput si dezvoltat de E.F. Codd cuprinde un set de a. 25 reguli b. 13 reguli c. 100 reguli d 15 reguli

Page 202: SOLUTII - Baze de Date - Adunate

Cand operatorii AND si OR sunt combinati in aceeasi clauza WHERE a. Operatorul AND are prioritate mai mare decat operatorul OR b. Sistemul DBMS returneaza un mesaj de eroare c. Operatorul AND are prioritate mai mica decat operatorul OR d. Parantezele, sunt obligatorii Cand operatorii AND §i OR sunt combinati in aceeasi clauza WHERE a. Sistemul SGBD returneaza un mesaj de eroare b. Operatorul AND are prioritate mai mare decat operatorul OR c. Operatorul AND are prioritate mai mica decat operatorul OR d. Parantezele, sunt obligatorii e. Parantezele sunt optionale Componentele unei baze de date relationale NU includ : a. Relatii b. tabele c. restrictii d. diagrame ERD Componentele unei baze de date relationale nu includ: a.indexuri b.tabele c.diagrame ERD d.restrictii e.relatii <!>Criteriul de selectie se poate seta a. prin intermediul celulei TOTALS + Expression Builder b. prin intermediul celulei Criteria +Expression Builder sau prin tastarea expresiei c. prin intermediul celulei Sort + tastarea expresiei d. prin intermediul celulei TOTALS si Criteria, ambele ambele avand acelasi efect <!>Criteriul de selectie se poate seta a. prin intermediul celulei TOTALS + Expression Builder b. prin intermediul celulei Criteria +Expression Builder sau prin tastarea expresiei c. prin intermediul celulei Sort + tastarea expresiei d. prin intermediul celulei TOTALS si Criteria, ambele ambele avand acelasi efect <!>Calificatorii numelor de coloane NU : a. rezolva referintele ambigue la coloane b. pot fi nume de tabele c. pot fi pseudonime ptr. numele de coloane, definite in clauza FROM d. pot fi pseudonime pentru numele de tabele, definite in clauza FROM <!>Calificatorii numelor de coloane NU : a. rezolva referintele ambigue la coloane b. pot fi nume de tabele c. pot fi pseudonime pentru numele de coloane, definite in clauza FROM d. pot fi pseudonime pentru numele de tabele, definite in clauza FROM

Page 203: SOLUTII - Baze de Date - Adunate

Daca relationarea tabelelor dintr-o interogare s-a facut prin definirea legaturilor implicite (din fereastra Relationships), atunci: a. trebuie refacute legaturile in cadrul interogarii b. acestea sunt ignorate in timpul rularii interogarii c. adaugarea lor intr-o interogare se face impreuna cu relatiile dintre ele d. tabelele nu trebuiesc sa fie legate in interogare Dacă tabelele dintr-o interogare nu sunt legate una de alta fie direct (în interogare), fie indirect (prin legătură implicită, din fereastra Relationship), Acces afisează a. Toate combinatiile de înregistrări (produs cartezian) dintre câmpurile tabelelor b. Numai înregistrările din prima tabelă c. Numai înregistrările din ultima tabelă d. Nu afisează nimic Definitia unei coloane din instructiunea CREATE TABLE nu poate include a. Numele tabelului …sau [/restrictie la nivel de tabel/] b. O clauză DEFAULT c. O clauză NULL sau NOT NULL d Numele coloanei <!>Din ferestra Relationships la apasarea butonului Join Type se poate selecta modul in care vor fi extrase datele din tabele, mod care nu poate fi: a. numai acele înregistrari în care câmpurile din legatura coincid b. toate înregistrarile din tabela principala si numai acele înregistrari din tabela corelata în care câmpurile din legatura coincid. c. toate înregistrarile din tabela corelata si numai acele înregistrari din tabela principala în care câmpurile din legatura coincid. d. toate inregistrarile din ambele tabele <!>Din ferestra Relationships la apasarea butonului Join Type se poate selecta modul in care vor fi extrase datele din tabele, mod care nu poate fi: a. numai acele înregistrari în care câmpurile din legatura coincid b. toate înregistrarile din tabela principala si numai acele înregistrari din tabela corelata în care câmpurile din legatura coincid. c. toate înregistrarile din tabela corelata si numai acele înregistrari din tabela principala în care câmpurile din legatura coincid. d. toate inregistrarile din ambele tabele Expresiile nu se utilizează în a. Definirea unui criteriu de selectie b. Crearea unui câmp calculat c. Actualizarea unor înregistrări într-o interogare d. Definirea proprietătii Validation Text a unei tabele Functia AVG(Expr): a. include campuri de valoare NULL in calcul b. poate fi folosita intr-o interogare c. calculeaza media geometrica a datelor din acel camp d. operanzii din Expr nu pot include o functie definita de utilizator.

Page 204: SOLUTII - Baze de Date - Adunate

Functiile SQL matematice standard NU includ : -ROUND -ABS -CAST -EXP Functia LTRIM a. Elimina spatiile de la sfarsitul sirurilor de caractere b. Elimina spatiile de la inceputul sirurilor de caractere c. Poate fi imbricata cu alte functii d. Inlocuieste valorile nule cu alte valori in sirurile de caractere e. Elimina spatiile de la inceputul si de la sfarsitul sirurilor de caractere Integritatea referintiala este un sistem de reguli folosit de Acces pentru a se asigura ca: a. relatiile intre tabele sunt valide b. relatiile intre tabele nu se modica c. relatiile intre tabele sunt valide si ca nu se sterg sau modica accidental datele in legatura d. nu sunt definite relatii Integritatea referentială nu se poate seta atunci când a. Câmpurile în relatie au acelasii tip de date b. Tabelele nu apartin aceleasi baze de date Access c. Tabelele apar in aceleasi baze de date Access d. Câmpul în relatie din tabela principală este cheie primară sau are un index unic In cadrul diagramei entitate-relatie (ERD) care nu este o entitate speciala a. Entitate dependentã b. Entitate tranzitiva c. Subentitate d. Superentitate Interogariea de tip functie a. poate calcula suma, media, numararea, minimul, maximul, varianta sau deviatia standard pentru unul sau mai multe câmpuri dintr-o tabela in linia Totals, fie pentru toate înregistrarile, fie pe unul sau mai multe grupuri de înregistrari b. poate calcula suma, media, numararea, minimul, maximul, varianta sau deviatia standard pentru unul sau mai multe câmpuri dintr-o tabela in linia Totals, numai pentru toate înregistrarile c. poate calcula suma, media, numararea, minimul, maximul, varianta sau deviatia standard pentru unul sau mai multe câmpuri dintr-o tabela in linia Totals, numai pentru pe un grup de înregistrari d. prin intermediul liniei Criteria nu pot fi afectate rezultatele calcularii. Integritatea referentială nu se poate seta atunci când a. Câmpurile în relatie au acelasii tip de date b. Tabelele nu apartin aceleasi baze de date Access c. Tabelele apar in aceleasi baze de date Access d. Câmpul în relatie din tabela principală este cheie primară sau are un index unic

Page 205: SOLUTII - Baze de Date - Adunate

Limbajul DML nu include următoarea instructiune SQL a. INSERT b. UPDATE c. SELECT …sau [/CREATE /] d. DELETE Modelul relational NU are ca regula de integritate structurala : a. Unicitatea cheii primare b. Intregritatea entitatii.Atributele cheii primare sunt diferite de valoarea NULL c. Integritatea referiirii. O cheie externa trebuie sa corespunda unei valori a cheii primare associate. d. Integritatea referiirii. O cheie externa trebuie sa fie NULL in intregime, ori sa corespunda unei valori a cheii primare asociate Modelul relațional conceput și dezvoltat de E.F. Codd cuprinde un set de a. 25 reguli b. 13 reguli c. 100 reguli d. 15 reguli Nu sunt clientii SQL oferiti de Oracle a. SQL Worksheet b. My SQL c. SQL*Plus d. iSQL*Plus Nu se selecteaza intr-o interogare a. un singur câmp prin executarea unui click pe numele unui câmpului b. un bloc de câmpuri prin click pe primul câmp din bloc, se tine apasata tasta Shift si apoi se executa click pe ultimul câmp din blocul dorit. c. mai multor câmpuri dar nesituate intr-un bloc atunci se executa click pe fiecare dintre ele tinându-se apasata tot timpul tasta Shift d. toate cimpurile prin dublu-click pe bara de titlu a tabelei sau printr-un singur click pe asterix (*). Normalizarea nu rezolva anomalia: a. de creare b. de stergere c. de actualizare d. de inserare Nu este functie SQL matematica standard: a. ROUND b. EXP c. ABS d. CAST

Page 206: SOLUTII - Baze de Date - Adunate

Numele unei coloane dintr-un tabel : a. Nu trebuie sa fie in baza de date b. Nu trebuie sa fie in cadrul unui tabel c. Trebuie sa fie specificat in instructiunea ALTER TABLE d. Trebuie sa fie specificat in instructiunea CREATE TABLE …sau[/trebuie sa fie unic in cadrul tabelului/] O interogare parametrizată este o interogare a. În care una sau mai multe valori ale criteriilor de selectie sunt specificate în mod interactive b. În care numai una dintre valorile criteriilor de selectie poate fi specificată c. Care atunci când se rulează afisează o fereastră creată de utilizator d.Care atunci când se rulează afisează o fereastră proprie în care afisează un rezultat O uniune incrucisata(cross join) a. O uniune Naturală b. N produs cartezian c. O uniune externă d. O uniune Internă O uniune (Join) fara o clauza WHERE sau o clauza JOIN a. Are ca rezultat un mesaj de eroare b. Nu returnează nici un rând din setul de rezultate c. Reprezintă o uniune externă (outer join) d. Reprezintă o uniune internă (inner join) e. Are ca rezultat un produs cartezian O uniune de egalitate(equijoin): a. este cunoscuta si sub numele de auto-uniune(slfjoin) b. este cunoscuta si sub numele de uniune externa(outerjoin) c. realizeaza intotdeauna legarea randurilor folosind o conditie de egalitate(=) d. realizeaza intotdeauna legarea randurilor folosind o conditie de inegalitate(<>) O cheie Primara nu poate fi setata: U click-dreaptape campul dorit sa fie cheie primarasi din meniul afisat se apasa Primary Key sau U se selecteaza campul respectiv si se apasa butonul de Primary Key meniul Design View,U se deschide fereastra de definire a unui index caruia i se adreseaza proprietatea Primary la Yes. a. cu click dreapta pe campul dorit sa fie cheie primara si din meniul afisat se apasa Primary Key. b. daca se deschide fereastra de definire a unui index si se creeaza un index caruia i se seteaza proprietatea Primary la Yes. c. din FieldProprerties,Indexed,Yes(No Duplicates) d. daca se selecteaza campul respectiv si se apasa butonul de Primary Key din meniul Design View. O interogare incrucisata (Crosstab) este realizata dintr-o o interogare de selectie, din care se poate alege a. toate campurile interogarii b. cel mult 3 campuri pentru antet de linii, un camp pentru antet coloana si o functie aplicata valorilor dintr-un camp c. cal putin 3 campuri pentru antet de linii, si mai multe campuri entru antet coloana si o functie aplicata valorilor dintr-un cimp d. nu se poate realiza astfel de interogari

Page 207: SOLUTII - Baze de Date - Adunate

O forma (sau formular) reprezinta modalitatea de a a. modifica date numai dintr-o singura tabela b. modifica, adauga, sterge date din mai multe tabele c. modifica date dintr-o singura interogare d. modifica date dintr-o interogare si un tabel O baza de date este a. O colectie de date interrelationate gestionate ca o singura unitate b. Un produs software furnizat de un producator de baze de date c. O structura de date, cum ar fi un tabel, o vizualizare sau un index d. Definita in acelasi mod de toti producatorii de software O forma nu poate fi creata a. pe baza unei interogari de actiune b. pe baza unui tabel c. pe baza unei interogari d. pe baza mai multor tabele O forma (sau formular) reprezinta modalitatea de a a. modifica date numai dintr-o singura tabela b. modifica, adauga, sterge date din mai multe tabele c. modifica date dintr-o singura interogare d. modifica date dintr-o interogare si un tabel O cheie Primara nu poate fi setata: a. cu click dreapta pe campul dorit sa fie cheie primara si din meniul afisat se apasa Primary Key. b. daca se deschide fereastra de definire a unui index si se creeaza un index caruia i se seteaza proprietatea Primary la Yes. c. din FieldProprerties,Indexed,Yes(No Duplicates) d. daca se selecteaza campul respectiv si se apasa butonul de Primary Key din meniul Design View. O uniune de egalitate(equijoin): a. este cunoscuta si sub numele de auto-uniune(slfjoin) b. este cunoscuta si sub numele de uniune externa(outerjoin) c. realizeaza intotdeauna legarea randurilor folosind o conditie de egalitate(=) d. realizeaza intotdeauna legarea randurilor folosind o conditie de inegalitate(<>) O clauza JOIN folosind cuvantul cheie USING a. Nu poate fi folosita atunci cand coloanele prin care se face legarea tabelelor au aceleasi nume b. Nu poate fi folosita atunci cand coloanele prin care se face legarea tabelelor au nume diferite c. Defineste o uniune externa d. Defineste o auto-uniune O interogare cu stergere (Delete Query) poate: a. sterge doar cimpurile izolate b. sterge un grup de inregistrari dintr-un tabel c. sterge un grup de inregistrari dintr-un table sau din mai multe tabele legate intr-o relatie unu-la- mai- multi daca stergerile in cascada sunt active d. sterge o inregistrare dintr-un tabel la un moment dat

Page 208: SOLUTII - Baze de Date - Adunate

Operatorul + genereaza eroarea Type Mismatch atunci cand a. ambii operanzi sunt siruri de caractere b. ambii operanzi sunt numere c. un operator este numar si unul sir de caractere d. un operator este numar si unul data O interogare incrucisata (Crosstab) este realizata dintr-o interogare de selectie din care se poate alege: a. toate campurile interogatorii b. cel mult 3 campuri pt. antet de linii,un camp pt. antet coloana si o functie aplicata valorilor dintr-un camp. c. cel putin 3 campuri pt. antet de linii si mai multe campuri penru antet coloana si o functie aplicata valorilor dintr-un camp. d. nu se poate realiza astfel de interogari. O instructiune UPDATE trebuie sa includa: a. o clauza WHERE b. o clauza SET c. o clauza SELECT d. o clauza INSERT O interogare parametrizata este o interogare a. in care una sau mai multe valori ale criteriilor de selectie sunt specificate in mod interactiv b. in care numai una dintre valorile criteriilor de selectie poate fi specificata c. care atunci cand se ruleaza afiseaza o fereastra creata de utilizator d. care atunci cand se ruleaza afiseaza o fereastra proprie in care afiseaza un rezultat O forma (formulare) reprezinta modalitatea de a: a. modifica date numai dintr-o singura tabela b. modifica, adauga, sterge date din mai multe tabele c. modifica date dintr-o singura interogare d. modifica date dintr-o interogare si un tabel O interogare MakeQuery nu realizeaza: a. Realizarea unei copii de siguranta a unei tabele b. Schimbarea ordinii inregistrarilor dintr-o tabela c. Crearea unei tabele pentru exportul intr-o alta baza de date MS Access d. Crearea unei tabele ce va contine numai inregistrari vechi <!>O interogare cu actiune este o interogare care realizeaza modificari asupra: a. unei singure inregistrari dintr-un table b. asupra mai multor inregistrari din una sau mai multe tabele c. unei singure tabele la un moment dat d. mai multor tabele la un moment dat <!>O interogare cu actiune este o interogare care realizeaza modificari asupra: a. unei singure inregistrari dintr-un table b. asupra mai multor inregistrari din una sau mai multe tabele c. unei singure tabele la un moment dat d. mai multor tabele la un moment dat

Page 209: SOLUTII - Baze de Date - Adunate

Operatorul BETWEEN a. Specifică un domeniu de valori care include si capetele b. Poate fi rescris folosind operatorii <= si NOT <= c. Selectează rândurile adăugate în tabel într-un anumit interval de timp d. Nu este inclus în standardul ISO/ANSI Proprietatea Format se foloseste pt: a. a seta modul in care campurile de tip text sunt afisate b. a stoca datele intr-un anumit format c. a seta modul in care campul de tip numar sunt tiparite d. a seta modul in care datele sunt afisate si tiparite Proprietatea de Indexare (Indexed) a. seteaza un index pe un singur cimp b. creaza si seteaza un index pe un cimp al unei tabele c. se foloseste pentru a mari viteza de interogare a unei tabele pe unul sau mai multe campuri d. afecteaza ordinea de stocare (ordinea fizica) a inregistrarilor Pentru a crea un raport utilizând generatorul (Report Wizard) avem planul general cu optiunea implicita a. Columnar b. Tabular c. Justified Pentru a introduce câmpuri calculate într-un raport se foloseşte elemente din bara toolbox a. Label Box Aa b. Text Box ab c. Check d. Combo Box Pentru aducerea in prima forma normala a unei relatii ne-normalizate se operatie nu se efectueaza ? a. Grupurile repetitive sunt mutate intr-o noua relatie b. Atributele multivaloare sunt mutate intr-o noua relatie c. Atributele care sunt dependente tranzitiv sunt eliminate d. Identificatorul unic al unei relatii originale este copiat in noua relatie Pentru a specifica criterii de selectii pentru o interogare, acestea nu se fac a. numai pentru un camp b. pentru mai multe campuri, daca expresiile pentru criteriile de selectie sunt pe aceeasi linie in tabelul de design, cand Access foloseste operatorul And, adica vor fi returnate numai inregistratile ce indeplinesc toate criteriile c. pentru mai multe campuri, daca expresiile pentru criteriile de selectie sunt in linii diferite ale tabelului de design, cand Access foloseste operatorul Or, adica vor fi returnate numai inregistratile ce indeplinesc cel putin unul din criteriile de selectie d. in celula TOTALS a tabelului de design Problemele de dependenta partiala nu: a. sunt rezolvate de a 2 forma normala b. sunt rezolvate de a 3 forma normala c. apar atunci cand un atribut non-cheie depinde doar de o parte a cheii primare d. pot aparea numai in relatii cu chei primare concatenate

Page 210: SOLUTII - Baze de Date - Adunate

Pentru realizarea unei interogari cu actualizare nu se efectueaza pasul: a. se creeeaza o interogare b. se adauga tabelele si se selecteaza campurile ce se doresc actualizate c. se stabilesc criteriile de selectie pt acestea,daca exista atunci se apasa butonul Update Query din meniul Query Type din Toolbar d. in celula Update To …(aici cred ca e incompleta) Problemele de dependenta partiala nu: a. sunt rezolvate de a 2 forma normala b. sunt rezolvate de a 3 forma normala c. apar atunci cand un atribut non-cheie depinde doar de o parte a cheii primare d. pot aparea numai in relatii cu chei primare concatenate Pentru realizarea unei interogari cu actualizare nu se efectueaza pasul: a. se creeeaza o interogare b. se adauga tabelele si se selecteaza campurile ce se doresc actualizate c. se stabilesc criteriile de selectie pt acestea,daca exista atunci se apasa butonul Update Query din meniul Query Type din Toolbar d. in celula Update To (aici cred ca e incompleta) Pentru a introduce câmpuri calculate într-un raport se foloseste din bara toolbox: a. Label Box Aa b. Text Box ab c. Check d. Combo Box 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 Pentru a specifica criterii de selctie pentru o interogare, aceste nu se fac a. numai pentru un cimp b. penrtru mai multe cimpuri, daca expresiile pentru criteriile de selectie sunt pe aceeasi linie în tabelul de design, cand Access foloseste operatorul And, adica vor fi returnate numai înregistrarile ce îndeplinesc toate criteriile. c. pentru mai multe criterii pe acelasi camp, expresiile sunt în linii diferite ale tabelului de deisgn cand Access foloseste operatorul Or, adica vor fi returnate acele înregistrari ce îndeplinesc cel putin unul dintre criteriile de selectie. d. in celula TOTALS a tabelului design Relatia m:n devine in modelul relational: a. tabel asociativ cu cheia primara formata din 2 chei externe pt. cele 2 tabele asociate b. tabel asociativ cu cheia primara formata din 2 chei externe pt. cele 2 tabele asociate plus eventuale coloane aditionale c. chei externe d. entitate independenta

Page 211: SOLUTII - Baze de Date - Adunate

Sintaxa corectă pentru o restricţie NOT NULL este a. nume_coloană tip-de-date IS NOT NULL b. nume_coloană tip_de_date NOT NULL c. DEFAULT [NULL | NOT NULL] d. CREATE NOT NULL INDEX ON nume_coloană Sintaxa corecta pentru o restrictie referentiala este a. [CONSTRAINT nume—restrictie] REFERENCES nume_index b. [CONSTRAINT nume—restrictie] REFERENCES nume_tabel c. FOREIGN KEY nume_coloana REFERENCES nume_tabel (nume_coloana) d. REFERENCES nume—tabel (nume_coloana) Sintaxa corecta pentru eliminarea valorilor nule din rezultatele interogarii este a. = NULL b. NOT = NULL c. <>NULL d. IS NULL e. IS NOT NULL SQL NU este: a. Un limbaj procedural b. Un limbaj nonprocedural c. Un limbaj declarativ d. Un limbaj standard Tipurile numerice standard nu includ: a. INTEGER b. FLOAT c. INTERVAL d. BIGINT Textul de validare se foloseste a. pentru a valida datele dintr-un cimp b. impreuna cu Regula de Validare (Validation Rule) si reprezinta mesajul afisat la incalcarea regulei de validare c. impreuna cu Regula de Validare (Validation Rule) si reprezinta mesajul afisat daca nu se incalca regula de validare d. pentru a valida datele dintr-o inregistrare Un model de date reprezinta o colectie integrata de concepte care nu descriu: a. date b. relatii dintre date c. date despre echipa realizatoare a modelului d. constrangeri existente asupra datelor sistemului real analizat Un obiect al bazei de date este a. O structura denumita de date, cum ar fi un tabel, o vizualizare sau un index b. Un produs software furnizat de un producator de baze de date c. O colectie de date interrelationale gestionate ca o singura unitate d. O colectie de inregistrari inrudite, stocate ca o singura unitate

Page 212: SOLUTII - Baze de Date - Adunate

Un sistem de gestionare a bazelor de date, abreviat sub forma DBMS sau RDBMS sau SGBD este a. o colectie de inregistrari inrudite, stocate ca o singura unitate b. o colectie de date interrelationate gestionate ca o singura unitate c. o structura de date, cum ar fi un tabel, o vizualizare sau un index d. un produs software furnizat de un producator de baze de date Un sistem de gestionare a bazelor de date : a. o structura cum ar fi un tabel b. o colectie de date interrelationate c. un produs softwer furnizat de un producator d. o structura denumita date , cum ar fi un tabel Un câmp calculat într-o interogare a. Se efectuează pe fiecare înregistrare folosind numai un câmp b. Afisează rezultatul unei expresii si valoarea este recalculată de fiecare dată când o valoare din exprese se schimbă c. Se pot folosi numai la afisarea unor rezultate d. Se pot folosi numai la definirea unor criterii de selectie sau pentru a determina asupra căror înregistrări să se execute o actiune Valorile NULL a. pot fi folosite pentru reprezentarea datelor care lipsesc sau care nu sunt cunoscute b. înseamnă acelaşi lucru ca şi spaţiile libere c. sunt egale cu alte valori NULL d. sunt întotdeauna permise în mod prestabilit Un identificator unic (cheie) poate fi compus... - am raspuns : poate fi compus din mai multe atribute concatenate Pentru realizarea unor interogari grupate... - am raspuns: se realizeaza o interogare de selectie din tabelele dorite si se selecteaza pentru anumite campuri o functie de celula Total. Daca integritatea referentiala este setata: - am raspuns: nu se poate valoarea unei chei primare in tabela principala, daca acea inregistrare are inregistrari corelate in tabela secuindara. Functia NOW() intoarce: - am raspuns: data si timpul exact conform cu data si ora sistemului Prin operatia Export se poate - am raspuns: exporta dintr-o baza de date access intr-o alta baza de date access Proprietatea Format se foloseste pentru - am raspuns: a seta modalitatea in care datele sunt afisate si tiparite Daca integritatea referentiala este setata - am raspuns: nu se poate schimba valoarea unei chei primare

Page 213: SOLUTII - Baze de Date - Adunate

In meniul Tools ce apartine database Utilities nu exista - am raspuns: memo Problemele de dependenta partiala Nu - am raspuns: sunt rezolvate de FN3 Relatia m:n devine in mod relational - am raspuns: tabel asociativ in care o inregistrare din A poate avea mai multe in B si invers Pentru a crea un raport utilizand report Wizard avem planul general cu optiunea implicita - am raspuns: tabular O instructiune Alter Table nu poate fi folosita pentru - am raspuns: redenumirea unei coloane DDL nu include urmatoarea instructiune - am raspuns: DELETE Un identificator unic (o cheie primara) - am raspuns: poate fi compus dintr-un singur atribut O interogare cu stergere (Delete Query) - am raspuns : sterge un grup de inregistrari dintr-un tabel sau din mai multe tabele legate printr-o relatie unu la mai multi daca stergerile in cascada sunt active. Componentele unei baze de date relationale nu includ - am raspuns : diagrame ERD O uniune fara clauza WHERE sau o clauza Join - am raspuns are ca rezultat un produs cartezian Operatorul BETWEEN a. Specifică un domeniu de valori care include si capetele b. Poate fi rescris folosind operatorii <= si NOT <= c. Selectează rândurile adăugate în tabel într-un anumit interval de timp d. Nu este inclus în standardul ISO/ANSI O instructiune DELETE nu a. Poate include o listă optională de coloane b. Poate include o clauză WHERE optională c. Nu poate încălca restrictiile referentiale ale tabelului d. Poate avea o instructiune SELECT internă, ca parte a clauzei WHERE Functiile SQL standar pt.siruri de caractere NU includ - Upper -LOWER -... -LIKE - raspuns LIKE

Page 214: SOLUTII - Baze de Date - Adunate

Care este secvenţa corectă pentru a şterge toate înregistrările tabelului TOTALURI - DELETE FROM TOTALURI Access permite crearea unor relaţii logice sub forma unor legări între tabele - temporale (la nivelul interogărilor) şi implicite (din fereastra Relationships) O interogare cu creare de tabele (Make-tables Query) nu realizează - crearea unor tabele pentru exportul într-o bază de date MS Access Pentru realizarea unor interogări grupate - se selectează pentru toate câmpurile o funcţie în celula Totals Un obiect al unei baze de date este - o structură, cum ar fi un tabel, o vizualizare sau un index Pasii pentru conversia unei baze de date NU sunt: - deschiderea bazei ce urmeaza a fi convertita O instructiune SELECT fara o clauza WHERE - va selecta toate randurile din tabel sau vizualizare Instructiune SQL prin care se cerea sa se stearga toti profesorii din tabel. - DELETE profesori FROM tabel table cod fac, denumire adresa care este secventa corecta pentru o inserare folosind instructiunea SELECT -INSERT INTO FAC (COD_FAC, DENUMIRE, ADRESA) SELECT VALUES(MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA'); -INSERT INTO FAC SELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA' FROM FAC; -INSERT INTO FAC (COD_FAC, DENUMIRE, ADRESA) SELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA' FROM FAC; table prof cod fac, cod prof,nume, prenume, salariu, cod functie care este secventa corecta , pentru a modifica functia si salariu prof cu (cod_fac=2 cod_prof=1) din lector(cod_funct=3, salariu 2000) la conferentiar(cod_funct=4, salriu=3000)? -UPDATE PROF SET COD_FUNCT=4, SALARIU=3000 WHERE COD_FAC=2 AND COD_PROF=1; -UPDATE PROF SELECT COD_FUNCT=4, SALARIU=3000 WHERE COD_FAC=2 AND COD_PROF=1; -UPDATE PROF SET COD_FAC=2 AND COD_PROF=1 WHERE COD_FUNCT=4, SALARIU=3000;

Page 215: SOLUTII - Baze de Date - Adunate

2 tabele a. ca cel de la nr 12 b.functii cod functii, den functii care este secventa corecta pentru o subinterogare necorelata, care sa afiseze toate functiile pentru care nu exista profesorii incadrati -SELECT cod_funct, nume_funct FROM functii WHERE cod_funct NOT IN (SELECT DISTINCT cod_funct FROM prof) -SELECT cod_funct, nume_funct FROM functii WHERE cod_funct NOT IN SELECT DISTINCT cod_funct FROM prof -SELECT cod_funct, nume_funct FROM functii WHERE cod_funct IN (SELECT cod_funct FROM prof); Pt. tabelul: PROF cod_fac# cod_prof# nume prenume salariu care este secvența corectă pt. a insera o înregistrare: • INSERT INTO PROF VALUES (4, 3, ’POPA’, ’DAN’, 1234) • INSERT INTO PROF VALUES (4, 5, POPA, DAN, 1234) • INSERT INTO PROF (cod_prof, nume, prenume, salariu) VALUES (4, 3, ’POPA’, ’DAN’, 1234) Pt. tabelul: PROF cod_fac# cod_prof# nume prenume salariu care este secvența corectă pt. a afișa toate facultățile pt. care COD_FAC=1 și salariu>=1200, sau facultățile pt. care COD_FAC=3 și salariu<2000 • SELECT COD_FAC, COD_PROF, NUME, SALARIU, FROM PROF WHERE (COD_FAC=1 AND SALARIU>1200) OR (COD_FAC=3 AND SALARIU<2000) Au mai fost 3 variante asemănătoare unde erau înlocuite AND cu OR Care nu sunt instructiuni SQL? Limbajul dc replicare a datelor (DRL - Dala Replication Language) Limbajul de manipulare a datelor (DML - Data Manipulation Language) NU include: CREATE Tipurile de date temporale standard NU includ TIMEZONE Text boxurile unei forme create automat sint legate direct la mai multe tabele astfel incit orice modificare adusa valorilor din ele se transmite.. O interogare SQL din care trebuie selectati din tabelul PROF profesorii care au codul facultatii (COD_FAC) egal cu 8 a. SELECT FROM PROF WHERE COD_FAC=8; b. SELECT FROM PROF WHERE COD_FAC<>8; c. SELECT FROM PROF WHERE COD_FAC IS 8; (asa imi aduc aminte aici, dar daca nu era IS era tot o balarie)

Page 216: SOLUTII - Baze de Date - Adunate

Pentru tabelul PROF Cod_fac# | Cod_prof# | Nume | Pren | Salariu Care este secventa corecta pentru a modifica salariile cu 10%, care nu contin valori NULL? a. UPDATE PROF SET SALARIU = SALARIU*1.1 WHERE SALARIU NOT NULL; b. UPDATE PROF SET SALARIU = SALARIU*1.1 WHERE SALARIU IS NOT NULL c. UPDATE PROF SELECT SALARIU = SALARIU*1.1 WHERE SALARIU <> 0; O cheie primara (Primary Key) reprezinta un mod unic de identificare a unei înregistrari într-o tabela. a. nu este un index b. este un idex creat numai pe un cimp c. este un idex creat pe minimum doua cimpuri Dacă tabelele dintr-o interogare nu sunt legate una de alta fie direct (în interogare), fie indirect (prin legătură implicită, din fereastra Relationship), Acces afișează • Toate combinațiile de înregistrări (produs cartezian) dintre câmpurile tabelelor • Numai înregistrările din prima tabelă • Numai înregistrările din ultima tabelă • Nu afișează nimic Textul de validare se foloseste Raspuns: impreuna cu Regula de Validare si reprezinta mesajul afisat la incalcarea regulei de validate Numerele stocate in campuri nenumerice ale unei interogari sunt stocate Raspuns: ca siruri de caractere (celelalte variante erau ca siruri numerice, se pune in fata 0 pt numerele mici si nu se accepta sortarea) Un camp calculat intr-o interogare Raspuns: afiseaza rezultatul unei expresii si valoarea este recalculata de fiecare data cand o valoare din expresie se schimba) Pentru aducerea in prima forma normala a unei relatii ne-normalizate ce operatie nu se efectueaza Raspuns: nu mai tin minte cum era formulat ceva despre atribute dependent tranzitive, oricum era singurul care nu avea legatura cu FN1 O insctructiune SELECT fara o clauza WHERE Raspuns: selecteaza toate randurile din tabel sau vizualizare Tabelul PROF cu coloanele cod_fac, cod_prof, nume, ore, salariu se intreba care este secventa corecta pentru a afisa suma salariilor tuturor profesorilor (de la toate facultatile) Raspuns: SELECT SUM(salariu) AS TotalSalarii FROM PROF GROUP BY

Page 217: SOLUTII - Baze de Date - Adunate

Se dadea tabelul FAC cu campurile cod_fac, denumire si adresa si se intreba care este varianta corecta pentru introducerea unei noi inregistrari Raspuns: INSERT INTO FAC (cod_fac, denumire, adresa) SELECT VALUES (MAX(cod_fac)+1, 'o demunire', 'o adresa'); Utilizarile valide ale instructiunii ALTER TABLE nu include Raspuns: Redenumirea unui tabel Operatorul LIKE Raspuns: Foloseste caracterul procent drept caracter de inlocuire nepozitional O interogare SQL prin care se solicita afisarea rotunjirii mediei salariilor profesorilor, cu 2 zecimale, grupat dupa facultati. Aici a fost ceva ciudat. O varianta era cu SORTED BY, una era cu expresia numerica fara o paranteza si 2 erau identice, si aici ma refer la semne de punctuatie, paranteze, spatii, etc. Aceste 2 variante identice aveau si formatul corect din punctul meu de vedere: SELECT ROUND(AVG(expresie numerica),2)AS salarii FROM prof GROUP BY COD_FAC; Care nu este un concept utilizat pentru a descrie formal-uzual-fizic elementele de baza ale organizarii datelor: raspuns: domeniu- functie-functie Un sistem de gestiune al bazelor de date este: raspuns : un produs software furnizat de un producator de baze de date Numerele stocate in campuri nenumerice ale unei interogari sunt sortate: raspuns: ca siruri de caractere Care nu este restrictie (Tipuri de restrictii) raspuns: relatie ( mai erau variantele primary key, not null, check) Functia NOW() ... raspuns: returneaza data si ora sistemului Eliminarea valorilor nule ... raspuns: IS NOT NULL 57. Instructiunile SQL .... raspuns: incep cu un cuvant cheie si se termina cu caracterul; 58. Intr-un aranjament client server: raspuns: componentele soft ale clientului SQL ruleaza pe client O auto-uniune: raspuns: autouniunea foloseste un singur tabel extensiile procedurale ale limbajului sql includ:java,c++,php, oracle pl/sql pt tabelul ... raspuns INSERT INTO PROF(cod_prof nume, prenume, salariu) NAMES (4,3,POPA,DAN,1234) nu este functie sql standard pt siruri de caractere:upper, lenght, lower, like pt tabelul... raspuns SELECT DISTINCT DENUMIRE FROM FAC WHERE 1000<(SELECT sum(salariu) O uniune join --combina coloanele din doua sau mai multe tabele in rezultatul unei singure interogari

Page 218: SOLUTII - Baze de Date - Adunate

un sistem dbms nu ofera serviciul- - mecanisme de securitate un index poate fi creat pe urmat tipuri-- text number, currency sau date and time daca relationarea tabelelor dintr-o interogare s-a facut prin definirea legaturilor implicite atunci: - adaugarea lor intr-o interogare se face impreuna cu relatiile dintre ele interogarea cu stergere sterge.. daca stergerile in cascada sint active prin operatia de import nu se pot introduce in baza de date - tabele de informare din baze de date in versiuni mai vechi.. prima forma normala rezolva anomaliile - grupuri repetitive si atribute multivaloare integritatea referentiala este un sistem de reguli folosit de acces pt a se asigura ca : relatiile intre tabele sint valide care nu este un concept utilizat pt a descrie formal- uzual- fizic - domeniu-functie- functie text boxurile unei forme create automat - sint legate direct la mai multe tabele astfel incit orice modificare adusa valorilor din ele se transmite.. Numerele stocate in campuri nenumerice ale unei interogari sunt sortate: a.ca siruri de caractere Pentru realizarea unei interogari cu actualizare nu se efectueaza pasul: a)se creeeaza o interogare b)se adauga tabelele si se selecteaza campurile ce se doresc actualizate c)se stabilesc criteriile de selectie pt acestea,daca exista atunci se apasa butonul Update Query din meniul Query Type din Toolbar d) NU.......(aici este o varianta de raspuns care incepe cu NU...si aceasta este cea corecta ) Tabelul PROF cu coloanele cod_fac, cod_prof, nume, ore, salariu se intreba care este secventa corecta pentru a afisa suma salariilor tuturor profesorilor : SELECT SUM(salariu) AS TotalSalarii FROM PROF Intr-un aranjament client/server NU : (componentele softwer DBMS ruleaza pe un client ) Definitia unei coloane din instructiunea CREATE TABEL NU poate include : Numele tabelului O uniune Join fara o clauza WHERE sau o clauza JOIN: Are ca rezultat un produs cartezian Dacă o tabelă din baza de date cerută care a fost legată de o tabelă externă, se şterg - se şterge şi legătura sa, nu însă şi fişierul extern de care a fost legat

Page 219: SOLUTII - Baze de Date - Adunate

1

LABORATOR 1 SQL CERERI MONOTABEL

1. Analizaţi sintaxa simplificată a comenzii SELECT. Care dintre clauze sunt obligatorii?

SELECT { [ {DISTINCT | UNIQUE} | ALL] lista_campuri | *} FROM [nume_schemă.]nume_obiect ] [, [nume_schemă.]nume_obiect …] [WHERE condiţie_clauza_where] [GROUP BY expresie [, expresie …] [HAVING condiţie_clauza_having] ] [ORDER BY {expresie | poziţie} [, {expresie | poziţie} …] ]

2. Găsiţi eroarea din instrucţiunea următoare.

SELECT employee_id, last_name, salary * 12 salariu anual

FROM employees;

Obs: SALARIU ANUAL este un alias pentru câmpul care reprezintă salariul anual.

Dacă un alias conţine blank-uri, el va fi scris obligatoriu între ghilimele. Altfel, ghilimelele pot fi

omise. Alias-ul apare în rezultat, ca antet de coloană pentru expresia respectivă. Doar cele specificate între

ghilimele sunt case-sensitive, celelalte fiind scrise implicit cu majuscule.

Varianta 1:

SELECT employee_id, last_name, salary * 12 salariu_anual

FROM employees;

Varianta 2:

SELECT employee_id, last_name, salary * 12 " Salariu Anual "

FROM employees;

3. Să se listeze structura tabelelor din schema HR (EMPLOYEES, DEPARTMENTS, JOB_HISTORY,

JOBS, LOCATIONS, COUNTRIES, REGIONS), observând tipurile de date ale coloanelor.

Obs: Se va utiliza comanda SQL*Plus

DESCRIBE nume_tabel

4. Să se listeze conţinutul tabelelor din schema considerată, afişând valorile tuturor câmpurilor.

Obs: Se va utiliza comanda SQL

SELECT * FROM nume_tabel;

5. Să se obţină încă o dată rezultatul cererii precedente, fără a rescrie cererea.

Obs: Ultima comandă SQL lansată de către client este păstrată în buffer-ul SQL.

Pentru rularea acesteia se utilizează “/” sau RUN.

6. Listaţi structura tabelului EMPLOYEES şi apoi daţi comanda RUN (sau “/”). Ce observaţi? Comenzile

SQL*Plus sunt păstrate în buffer?

DESC employees

RUN

Page 220: SOLUTII - Baze de Date - Adunate

2

7. Să se afişeze codul angajatului, numele, codul job-ului, data angajării. Salvaţi instrucţiunea SQL într-un

fişier numit p1_14.sql.

Obs: Pentru salvarea ultimei comenzi SQL se utilizează comanda SAVE. Precizarea extensiei „.sql” a

fişierului nu este obligatorie.

SELECT employee_id, last_name, job_id, hire_date

FROM employees;

SAVE z:\…\ p1_14.sql

8. Reexecutaţi cererea folosind fişierul p1_14.sql.

START z:\…\ p1_14.sql

sau

@ z:\…\ p1_14.sql

9. Editaţi fişierul p1_14.sql, adăugând coloanelor câte un alias (cod, nume, cod job, data angajarii).

EDIT z:\…\ p1_14.sql

Cererea se modifică astfel:

SELECT employee_id cod, last_name nume, job_id " cod job ", hire_date " data angajarii "

FROM employees;

@ z:\…\ p1_14.sql

10. Să se listeze, cu şi fără duplicate, codurile job-urilor din tabelul EMPLOYEES.

SELECT job_id FROM employees;

SELECT DISTINCT job_id FROM employees;

SELECT UNIQUE job_id FROM employees;

Obs. DISTINCT = UNIQUE

11. Să se afişeze numele concatenat cu prenumele, separate prin spaţiu. Etichetaţi coloana “Nume si

prenume”.

Obs: Operatorul de concatenare este “||”. Şirurile de caractere se specifică între apostrofuri (NU ghilimele,

caz în care ar fi interpretate ca alias-uri).

SELECT last_name|| ' ' || first_name " Nume si prenume "

FROM employees;

12. Să se listeze numele şi salariul angajaţilor care câştigă mai mult de 10000 $.

SELECT last_name, salary

FROM employees

WHERE salary > 10000;

13. Să se modifice cererea anterioară astfel încât să afişeze numele şi salariul pentru toţi angajaţii al căror

salariu este cuprins între 5000$ şi10000$.

Obs: Pentru testarea apartenenţei la un domeniu de valori se poate utiliza operatorul

[NOT] BETWEEN valoare1 AND valoare2

SELECT last_name, salary

FROM employees

WHERE salary BETWEEN 5000 AND 10000;

14. Să se creeze o cerere pentru a afişa numele angajatului şi numărul departamentului pentru angajatul 104.

Page 221: SOLUTII - Baze de Date - Adunate

3

SELECT last_name, department_id

FROM employees

WHERE employee_id =104;

15. Să se afişeze numele şi salariul pentru toţi angajaţii din departamentele 10 sau 30, în ordine alfabetică a

numelor.

Obs: Apartenenţa la o mulţime finită de valori se poate testa prin intermediul operatorului IN, urmat de

lista valorilor între paranteze şi separate prin virgule:

expresie IN (valoare_1, valoare_2, …, valoare_n)

SELECT last_name, salary

FROM employees

WHERE department_id IN (10, 30)

ORDER BY last_name;

16. Să listeze numele şi salariile angajaţilor care câştigă mai mult de 10000 $ şi lucrează în departamentul 10

sau 30. Se vor eticheta coloanele drept Angajat si Salariu lunar.

17. Care este data curentă?

Obs: Pseudocoloana care returnează data curentă este SYSDATE. Pentru completarea sintaxei obligatorii

a comenzii SELECT, se utilizează tabelul DUAL:

SELECT SYSDATE

FROM dual;

Datele calendaristice pot fi formatate cu ajutorul funcţiei TO_CHAR(data, format), unde formatul poate fi

alcătuit dintr-o combinaţie a următoarelor elemente:

Element Semnificaţie

D Numărul zilei din săptămână (duminică=1;

luni=2; …sâmbătă=6).

DD Numărul zilei din lună.

DDD Numărul zilei din an.

DY Numele zilei din săptămână, printr-o

abreviere de 3 litere (MON, THU etc.)

DAY Numele zilei din săptămână, scris în

întregime.

MM Numărul lunii din an.

MON Numele lunii din an, printr-o abreviere de 3

litere (JAN, FEB etc.)

MONTH Numele lunii din an, scris în întregime.

Y Ultima cifră din an

YY, YYY, YYYY Ultimele 2, 3, respectiv 4 cifre din an.

YEAR Anul, scris în litere (ex: two thousand

four).

HH12, HH24 Orele din zi, între 0-12, respectiv 0-24.

MI Minutele din oră.

SS Secundele din minut.

SSSSS Secundele trecute de la miezul nopţii.

18. Să se afişeze numele şi data angajării pentru fiecare salariat care a fost angajat în 1987. Se cer 2 soluţii:

una în care se lucrează cu formatul implicit al datei şi alta prin care se formatează data.

Page 222: SOLUTII - Baze de Date - Adunate

4

Varianta1:

SELECT first_name, last_name, hire_date

FROM employees

WHERE hire_date LIKE („%87‟);

Varianta 2:

SELECT first_name, last_name, hire_date

FROM employees

WHERE TO_CHAR(hire_date, „YYYY‟)=‟1987‟;

Sunt obligatorii ghilimelele de la şirul „1987‟? Ce observaţi?

19. Să se afişeze numele şi job-ul pentru toţi angajaţii care nu au manager.

SELECT last_name, job_id

FROM employees

WHERE manager_id IS NULL;

20. Să se afişeze numele, salariul şi comisionul pentru toţi salariaţii care câştigă comisioane. Să se sorteze

datele în ordine descrescătoare a salariilor, iar pentru cei care au acelaşi salariu în ordine crescătoare a

comisioanelor.

SELECT last_name, salary, commission_pct

FROM employees

WHERE commission_pct IS NOT NULL

ORDER BY salary DESC, commission_pct ASC;

21. Să se listeze numele tuturor angajaţilor care au a treia litera din nume 'a'.

Obs: Pentru a forma măştile de caractere utilizate împreună cu operatorul LIKE cu scopul de a compara

şirurile de caractere, se utilizează:

% - reprezentând orice şir de caractere, inclusiv şirul vid;

_ (underscore) – reprezentând un singur caracter.

SELECT DISTINCT last_name

FROM employees

WHERE last_name LIKE '__a%';

22. Folosind data curentă să se afişeze următoarele informaţii: - numele zilei, numărul zilei din săptămână, numărul zilei din luna, respectiv numărul zilei din an; - numărul lunii din an, numele lunii cu abreviere la 3 caractere, respectiv numele complet al lunii; - ora curentă (ora, minute, secunde).

23. Să se listeze numele departamentelor care funcţionează în locaţia având codul 1700 şi al căror manager este cunoscut.

24. Să se afişeze codurile departamentelor în care lucrează salariaţi.

25. Să se afişeze numele şi prenumele salariaţilor angajaţi în luna mai 1987.

26. Să se listeze codurile angajaţilor care au avut şi alte joburi faţă de cel prezent. Să se ordoneze rezultatul descrescător după codul angajatului.

27. Să se afişeze numele şi data angajării pentru cei care lucrează în departamentul 80 şi au fost angajaţi în luna martie a anului 1997.

28. Să se afişeze numele joburilor care permit un salariu cuprins între 8300$ şi 14000$.

29. Care este grila de salarizare pentru un salariu de 10000$?

Page 223: SOLUTII - Baze de Date - Adunate

5

30. Să se listeze numele tuturor angajaţilor care au 2 litere 'L' în nume şi lucrează în departamentul 30 sau managerul lor este 123.

31. Să se afişeze numele, job-ul şi salariul pentru toţi salariaţii al căror job conţine şirul 'CLERK' sau 'REP' şi salariul nu este egal cu 1000, 2000 sau 3000 $.

32. Să se afişeze numele, salariul şi comisionul pentru toţi angajaţii al căror salariu este mai mare decât de 5 ori valoarea comisionului (salary*commission_pct*5).

Page 224: SOLUTII - Baze de Date - Adunate

LABORATOR 2 - SQL FUNCŢII SQL (single-row)

Funcţiile SQL sunt predefinite în sistemul Oracle şi pot fi utilizate în instrucţiuni SQL. Ele nu

trebuie confundate cu funcţiile definite de utilizator, scrise în PL/SQL.

Dacă o funcţie SQL este apelată cu un argument având un alt tip de date decât cel aşteptat, sistemul

converteşte implicit argumentul înainte să evalueze funcţia.

Dacă o funcţie SQL este apelată cu un argument null, atunci aceasta returnează valoarea null.

Singurele funcţii care nu urmează această regulă sunt CONCAT, NVL şi REPLACE.

Principalele funcţii SQL pot fi clasificate în următoarele categorii:

Funcţii single-row

Funcţii multiple-row (funcţii agregat)

Funcţiile single-row returnează câte o linie rezultat pentru fiecare linie a tabelului sau vizualizării

interogate. Aceste funcţii pot apărea în listele SELECT, clauzele WHERE, START WITH, CONNECT BY

şi HAVING.

1. Analizaţi următoarele funcţii pentru prelucrarea şirurilor de caractere:

Funcţie Semnificaţie Exemplu

LOWER (expresie) Converteşte un şir de caractere

la minuscule. LOWER ('AbCdE') = 'abcde'

UPPER (expresie) Converteşte un şir de caractere

la majuscule. UPPER ('AbCdE') = 'ABCDE'

INITCAP (expresie)

Converteşte un şir de caractere

la un şir care începe cu

majusculă şi continuă cu

minuscule.

INITCAP ('AbCdE') = 'Abcde'

SUBSTR (expresie, m[, n])

Extrage din expresia de tip şir

de caractere, n caractere

începând cu poziţia m. Dacă

lipseşte argumentul n, atunci

extrage toate caracterele până la

sfârşitul şirului. Dacă m este

negativ numărătoarea poziţiilor

începe de la sfârşitul şirului de

caractere spre început.

SUBSTR ('AbCdE', 2, 2) = 'bC'

SUBSTR ('AbCdE', 2) = 'bCdE'

SUBSTR ('AbCdE', -3,2) = 'Cd'

SUBSTR ('AbCdE', -3) = 'CdE'

LENGTH (expresie) Returnează numărul de

caractere al expresiei. LENGTH ('AbCdE') = 5

INSTR (expresie, expr1[, m][, n])

Returnează poziţia la care se

găseşte a n-a ocurentă a

expresiei 'expr1' în cadrul

expresiei 'expresie', căutarea

începând de la poziţia m. Daca

m sau n lipsesc, valorile

implicite sunt 1 pentru ambele.

INSTR (LOWER('AbC aBcDe'), 'ab', 5, 2)

= 0

INSTR (LOWER('AbCdE aBcDe'), 'ab', 5)

= 7

LTRIM (expresie[, expr1]) sau

RTRIM (expresie[, expr1])

Reversul funcţiilor LPAD,

RPAD. Trunchează expresia

RTRIM ('abcdeXXXX', 'X')

= 'abcde'

Page 225: SOLUTII - Baze de Date - Adunate

caracter la stânga sau la dreapta

prin eliminarea succesivă a

caracterelor din expresia expr1.

Implicit, daca lipseşte, expr1

este ' ' un spaţiu.

LTRIM (' abcde') = 'abcde'

TRIM (LEADING | TRAILING |

BOTH caractere_trim FROM

expresie)

Permite eliminarea caracterelor

specificate (caractere_trim) de

la începutul (leading) , sfârşitul

(trailing) sau din ambele părţi,

dintr-o expresie caracter data.

TRIM (LEADING 'X' FROM

'XXXabcdeXXX') = 'abcdeXXX'

TRIM (TRAILING 'X' FROM

'XXXabcdeXXX') = 'XXXabcde'

TRIM ( BOTH 'X' FROM

'XXXabcdeXXX') = 'abcde'

TRIM (' abcde ') = 'abcde'

2. Să se afişeze pentru fiecare angajat din departamentul 20 un şir de caractere de forma "Funcţia

salariatului {prenume} {nume} este {cod functie}". Să se afişeze prenumele cu iniţiala litera mare, iar

numele cu litere mari (Stephen KING), iar codul funcţiei să se afişeze cu litere mici.

3. Să se afişeze pentru angajatul cu numele 'HIGGINS' codul, numele şi codul departamentului. Cum se

scrie condiţia din WHERE astfel încât să existe siguranţa ca angajatul 'HIGGINS' va fi găsit oricum ar fi

fost introdus numele acestuia? Căutarea trebuie să nu fie case-sensitive, iar eventualele blank-uri care

preced sau urmează numelui trebuie ignorate.

UPPER(TRIM(last_name))='HIGGINS';

4. Să se afişeze pentru toţi angajaţii al căror nume se termină în 'n', codul, numele, lungimea numelui şi

poziţia din nume în care apare prima data litera 'a'. Asociaţi aliasuri coloanelor returnate de cerere.

SELECT employee_id, last_name, LENGTH(last_name), INSTR(UPPER(last_name), 'A')

FROM employees

WHERE SUBSTR(last_name,-1)='n';

5. Analizaţi următoarele funcţii aritmetice:

Funcţie Semnificaţie Exemplu

ROUND (expresie [, n])

Returnează valoarea rotunjită a expresiei

până la n zecimale. Daca n este negativ sunt

rotunjite cifre din stânga virgulei. Valoarea

implicită pentru n este 0.

ROUND(1.6) = 2

ROUND(1.4) = 1

ROUND (1234.56,1) = 1234.6

ROUND (1230.56, -2) = 1200

ROUND (1260.56, -2) = 1300

MOD (m,n) Returnează restul împărţirii lui m la n. MOD (11, 4) = MOD (11, -4) = 3

MOD(-11, 4) = MOD (-11, -4) = -3

6. Să se afişeze detalii despre salariaţii care au lucrat un număr întreg de săptămâni până la data curentă.

MOD(ROUND(SYSDATE – hire_date), 7)=0;

7. Să se afişeze numele, salariul şi numărul de mii al salariului rotunjit la 2 zecimale pentru cei care nu au

salariul divizibil cu 1000.

Page 226: SOLUTII - Baze de Date - Adunate

8. Analizaţi următoarele operaţii pe expresii de tip dată calendaristică:

Operaţie Tipul de date al

rezultatului Descriere

date -/+ number Date Scade/Adaugă un număr de zile dintr-o / la o dată.

date1 - date2 Number Întoarce numărul de zile dintre două date calendaristice.

date +/-

number/24 Date Scade/Adaugă un număr de ore la o / dintr-o dată calendaristică.

9. Să se afişeze data (luna, ziua, ora, minutul si secunda) de peste 10 zile.

SYSDATE+10

10. Să se afişeze numărul de zile rămase până la sfârşitul anului.

ROUND(TO_DATE(‟31-DEC-2009‟)-SYSDATE)

11. a. Să se afişeze data de peste 12 ore.

SYSDATE+12/24

b. Să se afişeze data de peste 5 minute.

SYSDATE+1/288

12. Analizaţi următoarele funcţii pentru prelucrarea datelor calendaristice:

Funcţie Semnificaţie Exemplu

SYSDATE Întoarce data şi timpul curent

MONTHS_BETWEEN

(date1, date2)

Returnează numărul de luni dintre

data date1 şi data date2. Rezultatul

poate fi pozitiv sau negativ după cum

date1 este mai recentă sau nu faţă de

date2. Zecimalele reprezintă parţi

dintr-o luna!

ROUND(MONTHS_BETWEEN

(SYSDATE + 31, SYSDATE)) = 1

ADD_MONTHS (date, n)

Adaugă n luni la o data specificată.

Valoarea n trebuie să fie întreagă

(pozitivă sau negativă).

MONTHS_BETWEEN

(ADD_MONTHS(SYSDATE, 3),

SYSDATE) = 3

NEXT_DAY (date, char)

Returnează data corespunzătoare

primei zile a săptămânii specificate

(char) care urmează după date.

NEXT_DAY('15-dec-2006','Monday')

= '18-dec-2006'

NEXT_DAY ('15-dec-2006',1)

= '18-dec-2006'

13. Să se afişeze numele angajatului, data angajării şi data negocierii salariului, care a avut loc în prima zi de

Luni, după 6 luni de serviciu. Etichetaţi această coloană “Negociere”.

NEXT_DAY(ADD_MONTHS(hire_date, 6), „Monday‟)

14. Pentru fiecare angajat să se afişeze numele şi numărul de luni de la data angajării. Etichetaţi coloana

“Luni lucrate”. Să se ordoneze rezultatul după numărul de luni lucrate. Se va rotunji numărul de luni la

cel mai apropiat număr întreg.

SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) “Luni lucrate”

FROM employees

ORDER BY MONTHS_BETWEEN(SYSDATE, hire_date);

Page 227: SOLUTII - Baze de Date - Adunate

SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) “Luni lucrate”

FROM employees

ORDER BY “Luni lucrate”;

SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) “Luni lucrate”

FROM employees

ORDER BY 2;

15. Analizaţi următoarele funcţii de conversie:

Obs. Conversiile implicite asigurate de server-ul Oracle sunt:

de la VARCHAR2 sau CHAR la NUMBER;

de la VARCHAR2 sau CHAR la DATE;

de la NUMBER la VARCHAR2 sau CHAR;

de la DATE la VARCHAR2 sau CHAR.

SELECT last_name

FROM employees

WHERE TO_CHAR(hire_date,'yyyy')=1994;

SELECT last_name

FROM employees

WHERE hire_date='07-JUN-1994';

SELECT employee_id||' '||last_name||' '||hire_date

FROM employees

WHERE department_id=10;

Conversiile explicite se realizează cu ajutorul funcţiilor de tip TO_{tip}

Funcţie Semnificaţie Exemplu

TO_CHAR

(expr_number_sau

_date[, format][,

nlsparameters])

Converteşte o valoare de tip numeric sau dată

calendaristică, la un şir de caractere conform cu

formatul specificat sau cu setările naţionale

specificate (NLS - National Language Support).

Daca formatul sau parametrii lipsesc se

utilizează formatul şi parametrii impliciţi.

Formatul este case sensitive.

TO_CHAR('3') = ' 3'

TO_CHAR(-12) = '-12'

TO_CHAR(sysdate, 'DDMMYYYY')

= ' 09122004'

TO_CHAR (sysdate + 365 * 57,

'ddmmyyyy') = ' 25112061'

TO_NUMBER

(expr_char[,

format][,

nlsparameters])

Converteşte o valoare de tip şir de caractere la o

valoare numerică conform cu formatul

specificat. Dacă formatul sau parametrii lipsesc

se utilizează formatul şi parametrii impliciţi.

TO_NUMBER ('-12.22', 'S99.99')

= -12.22

TO_DATE

(expr_char[,

format][,

nlsparameters])

Converteşte o valoare de tip şir de caractere la o

valoare de tip dată calendaristică în

conformitate cu formatul specificat. Dacă

formatul sau parametrii lipsesc se utilizează

formatul şi parametrii impliciţi.

TO_DATE ('15-feb-2006','dd-mon-

yyyy')

16. Să se afişeze numele şi prenumele pentru toţi angajaţii care s-au angajat în luna mai.

Page 228: SOLUTII - Baze de Date - Adunate

17. Analizaţi următoarele funcţii SQL:

Funcţie Semnificaţie Exemplu

NVL (expr1, expr2)

Returnează expr1 dacă aceasta nu este

NULL, expr2 în caz contrar. Cele 2 expresii

trebuie să aibă acelaşi tip sau expr2 să

permită conversia implicită la tipul

expresiei expr1.

NVL(NULL, 1) = 1

NVL(2, 1) = 2

NVL('c', 1) = 'c' -- face conversie

NVL(1, 'c') -- eroare

--nu face conversie

NVL2 (expr1, expr2, expr3) Dacă expr1 este nenulă atunci returnează

expr2, altfel Returnează expr3

NVL2 (1, 2, 3) = 2

NVL2 (NULL, 2, 3) = 3

18. Să se afişeze numele angajaţilor şi comisionul. Dacă un angajat nu câştigă comision, să se scrie “Fara

comision”. Etichetaţi coloana “Comision”.

NVL(TO_CHAR(commission_pct), „Fara comision‟)

19. Să se listeze numele, salariul şi comisionul tuturor angajaţilor al căror venit lunar depăşeşte 10000$.

salary * NVL(commission_pct, 0) venit_lunar

20. Analizaţi expresia CASE şi funcţia DECODE:

Funcţie/Expresie Semnificaţie Exemplu

CASE expr WHEN expr_bool1

THEN return_expr1

[WHEN expr_bool2 THEN

return_expr2

...

WHEN expr_booln THEN

return_exprn ]

[ELSE return_expr]

END

În funcţie de valoarea unei expresii

returnează valoarea primei perechi

WHEN .. THEN care se potriveşte sau

dacă nu se potriveşte nici una expresia

din ELSE. Nu se poate specifica NULL

pentru toate expresiile de returnat.

(return_expri). Toate expresiile trebuie

sa aibă acelaşi tip de date

DECODE (expr, expr_cautare1,

expr_rezultat1,

[expr_cautare2, expr_rezultat2,

..

expr_cautaren, expr_rezultatn, ]

[rezultat_implicit])

Decodifică valoarea expresiei. Dacă

valoarea expresiei este expr_cautarei

atunci e returnată expr_rezultati. Dacă

nu se potriveşte nici o expresie de

căutare atunci e returnat

rezultat_implicit.

DECODE (1, 1, 2, 3) = 2

DECODE (2, 1, 2, 3) = 3

DECODE (3, 1, 2, 3) = 3

21. Să se afişeze numele, codul funcţiei, salariul şi o coloana care să arate salariul după mărire. Se ştie că

pentru IT_PROG are loc o mărire de 10%, pentru ST_CLERK 15%, iar pentru SA_REP o mărire de

20%. Pentru ceilalţi angajaţi nu se acordă mărire. Să se denumească coloana "Salariu revizuit".

SELECT last_name, job_id, salary,

DECODE(job_id,

„IT_PROG‟, salary*1.1,

‟ST_CLERK‟, salary*1.15,

„SA_REP‟, salary*1.2,

salary ) “salariu revizuit”

FROM employees;

SELECT last_name, job_id, salary,

CASE job_id WHEN „IT_PROG‟ THEN salary* 1.1

Page 229: SOLUTII - Baze de Date - Adunate

WHEN ‟ST_CLERK‟ THEN salary*1.15

WHEN „SA_REP‟ THEN salary*1.2

ELSE salary

END “salariu revizuit”

FROM employees;

SELECT last_name, job_id, salary,

CASE WHEN job_id= „IT_PROG‟ THEN salary* 1.1

WHEN job_id=‟ST_CLERK‟ THEN salary*1.15

WHEN job_id =„SA_REP‟ THEN salary*1.2

ELSE salary

END “salariu revizuit”

FROM employees;

22. Să se afişeze numele salariatului şi codul departamentului în care acesta lucrează. Dacă există salariaţi

care nu au un cod de departament asociat, atunci pe coloana id_depratment să se afişeze:

a. textul “fara departament”;

b. valoarea zero.

23. a. Să se afişeze numele angajaţilor care nu au manager.

b. Să se afişeze numele angajaţilor şi codul managerilor lor. Pentru angajaţii care nu au manager să apară

textul “nu are sef”.

24. Să se afişeze numele salariatului şi:

- venitul anual dacă are comision;

- salariul dacă nu are comision.

Se va utiliza funcţia NVL2.

25. Să se afişeze numele salariatului, salariul şi salariul revizuit astfel:

- dacă lucrează de mai mult de 200 de luni atunci salariul va fi mărit cu 20%;

- dacă lucrează de mai mult de 150 de luni, dar mai puţin de 200 de luni, atunci salariul va fi mărit cu

15%;

- dacă lucrează de mai mult de 100 de luni, dar mai puţin de 150 de luni, atunci salariul va fi mărit cu

10%;

- altfel, salariul va fi mărit cu 5%.

Page 230: SOLUTII - Baze de Date - Adunate

LABORATOR 3 - SQL

CERERI MULTITABEL, SUBCERERI

Atunci când în clauza FROM a unei comenzi SELECT apar mai multe tabele se realizează produsul

cartezian al acestora. De aceea numărul de linii rezultat creşte considerabil, fiind necesară restricţionarea

acestora cu o clauza WHERE.

Atunci când este necesară obţinerea de informaţii din mai multe tabele se utilizează condiţii de join.

Join-ul este operaţia de regăsire a datelor din două sau mai multe tabele, pe baza valorilor comune ale unor

coloane. Condiţiile de corelare utilizează de obicei coloanele cheie primară şi cheie externă.

Pentru claritatea şi eficienţa accesului la baza de date se recomandă prefixarea numelor coloanelor cu

numele tabelelor din care fac parte (tabel.coloana). De asemenea, există posibilitatea de a utiliza aliasuri pentru

tabelele din clauza FROM şi utilizarea lor în cadrul comenzii SELECT respective (alias.coloana). Această

identificare (prin 'tabel.coloana' sau 'alias.coloana') este obligatorie atunci când se face referinţă la o coloana ce

apare în mai mult de un tabel din clauza FROM.

Tipuri de join:

equijoin (se mai numeşte inner join sau simple join) - compunerea a două tabele diferite după o

condiţie ce conţine operatorul de egalitate.

SELECT last_name, department_name, location_id, e.department_id

FROM employees e, departments d

WHERE e.department_id = d.department_id;

Obs: Numele sau alias-urile tabelelor sunt obligatorii în dreptul coloanelor care au acelaşi nume în

mai multe tabele.

nonequijoin - compunerea a două relaţii tabele după o condiţie oarecare, ce NU conţine operatorul

de egalitate.

SELECT last_name, salary, grade_level

FROM employees, job_grades

WHERE salary BETWEEN lowest_sal AND highest_sal;

outerjoin - compunerea externă a două tabele diferite completând una dintre relaţii cu valori NULL

acolo unde nu există în aceasta nici un tuplu ce îndeplineşte condiţia de corelare. Relaţia completată

cu valori NULL este cea în dreptul căreia apare “(+)”. Operatorul (+) poate fi plasat în orice parte a

condiţiei de join, dar nu în ambele părţi. Full outer join = Left outer join UNION Right outer join.

SELECT last_name, department_name,location_id

FROM employees e, departments d

WHERE e.department_id(+) = d.department_id;

selfjoin - compunerea externă a unui tabel cu el însuşi după o condiţie dată.

SELECT sef.last_name, angajat.last_name

FROM employees sef, employees angajat

WHERE sef.employee_id = angajat.manager_id

ORDER BY sef.last_name;

1. Pentru fiecare angajat să se afişeze numele, codul şi numele departamentului.

SELECT last_name, e.department_id, department_name

FROM employees e, departments d

WHERE e.department_id = d.department_id;

2. Să se afişeze numele angajatului, numele departamentului pentru toţi angajaţii care câştigă comision.

3. Să se listeze numele job-urile care există în departamentul 30.

SELECT DISTINCT job_title

FROM employees e, jobs j

WHERE e.job_id = j.job_id

AND department_id = 30;

Page 231: SOLUTII - Baze de Date - Adunate

4. Să se afişeze numele, job-ul şi numele departamentului pentru toţi angajaţii care lucrează în Seattle.

SELECT last_name, job_id, department_name

FROM employees e, departments d, locations s

WHERE e.department_id = d.department_id

AND d.location_id = s.location_id

AND city = „Seattle‟;

5. Să se afişeze numele, salariul, data angajării şi numele departamentului pentru toţi programatorii care

lucrează în America.

region_name = „Americas‟

job_title = „Programmer‟

6. Să se afişeze numele salariaţilor şi numele departamentelor în care lucrează. Se vor afişa şi salariaţii care nu

lucrează într-un departament (right outher join).

SELECT last_name, department_name

FROM employees e, departments d

WHERE e.department_id = d.department_id(+);

7. Să se afişeze numele departamentelor şi numele salariaţilor care lucrează în ele. Se vor afişa şi

departamentele care nu au salariaţi (left outher join).

8. Să se afişeze numele, job-ul, numele departamentului, salariul şi grila de salarizare pentru toţi angajaţii.

9. Să se afişeze codul angajatului şi numele acestuia, împreună cu numele şi codul şefului său direct. Se vor

eticheta coloanele Ang#, Angajat, Mgr#, Manager. Să se salveze instrucţiunea într-un fişier numit p3_9.sql.

SELECT a.employee_id “Ang#”, a.last_name “Angajat”, b.employee_id “Mgr#”, b.last_name “Manager”

FROM employees a, employees b

WHERE a.manager_id = b. employee_id;

10. Să se modifice p3_9.sql pentru a afişa toţi salariaţii, inclusiv pe cei care nu au şef.

11. Să se afişeze numele salariatului şi data angajării împreună cu numele şi data angajării şefului direct pentru

salariaţii care au fost angajaţi înaintea şefilor lor. Se vor eticheta coloanele Angajat, Data_ang, Manager si

Data_mgr.

12. Pentru fiecare angajat din departamentele 20 şi 30 să afişeze numele, codul departamentului şi toţi colegii

săi (salariaţii care lucrează în acelaşi departament cu el). Se vor eticheta coloanele corespunzător.

SELECT a.last_name “Angajat”, a.department_id ”Departament”, b.last_name “Coleg”

FROM employees a, employees b

WHERE a.department_id = b.department_id

AND a.employee_id <> b.employee_id

AND a.department_id IN (20,30)

ORDER BY a.last_name;

13. Să se afişeze numele şi data angajării pentru salariaţii care au fost angajaţi după Fay.

SELECT last_name, hire_date

FROM employees

WHERE hire_date > (SELECT hire_date

FROM employees

WHERE last_name = „Fay‟);

sau

SELECT a.last_name, a.hire_date

FROM employees a, employees b

WHERE UPPER(b.last_name)=‟FAY‟ AND a.hire_date>b.hire_date;

14. Scrieţi o cerere pentru a afişa numele şi salariul pentru toţi colegii (din acelaşi departament) lui Fay. Se va

exclude Fay.

SELECT last_name, salary

Page 232: SOLUTII - Baze de Date - Adunate

FROM employees

WHERE last_name <> „Fay‟

AND department_id = (SELECT department_id

FROM employees

WHERE last_name = „Fay‟);

15. Să se afişeze codul departamentului, codul şi numele angajaţilor care lucrează în acelaşi departament cu cel

puţin un angajat al cărui nume conţine litera “T”. Să se ordoneze după codul departamentului.

SELECT employee_id, last_name, department_id

FROM employees

WHERE department_id IN (SELECT DISTINCT department_id

FROM employees

WHERE UPPER(last_name) LIKE „%T%‟)

ORDER BY department_id;

16. Să se afişeze numele şi salariul angajaţilor conduşi direct de Steven King.

SELECT last_name, salary

FROM employees

WHERE manager_id = (SELECT employee_id

FROM employees

WHERE UPPER(last_name) ='KING'

AND UPPER(first_name) ='STEVEN' );

17. Să se afişeze numele şi job-ul tuturor angajaţilor din departamentul „Sales‟.

SELECT last_name, job_id

FROM employees

WHERE department_id = (SELECT department_id

FROM departments

WHERE department_name ='Sales');

18. Să se afişeze numele angajaţilor, numărul departamentului şi job-ul tuturor salariaţilor al căror departament

este localizat în Seattle.

SELECT last_name, job_id, department_id

FROM employees

WHERE department_id IN (SELECT department_id

FROM departments

WHERE location_id = (SELECT location_id

FROM locations

WHERE city = „Seattle‟));

Rezolvaţi această problemă utilizând join-uri.

19. Să se afle dacă există angajaţi care nu lucrează în departamentul „Sales‟ şi al căror salariu şi comision

coincid cu salariul şi comisionul unui angajat din departamentul „Sales‟.

SELECT last_name, salary, commission_pct, department_id

FROM employees

WHERE (salary, commission_pct) IN (SELECT salary, commission_pct

FROM employees e, departments d

WHERE e.department_id = d.department_id

AND department_name = „Sales‟)

AND department_id <> (SELECT department_id

FROM departments

WHERE department_name = „Sales‟);

20. Scrieţi o cerere pentru a afişa numele, numele departamentului şi salariul angajaţilor care nu câştigă

comision, dar al căror manager coincide cu managerul unui angajat care câştigă comision.

Page 233: SOLUTII - Baze de Date - Adunate

SELECT last_name, department_name, salary

FROM employees e, departments d

WHERE e.department_id = d.department_id

AND e.manager_id IN (SELECT DISTINCT manager_id

FROM employees

WHERE commission_pct IS NOT NULL)

AND commission_pct IS NULL;

21. Scrieţi o cerere pentru a afişa angajaţii care câştigă mai mult decât oricare funcţionar. Sortaţi rezultatele

după salariu, în ordine descrescătoare.

SELECT last_name, salary, job_id

FROM employees

WHERE salary > (SELECT MAX(salary)

FROM employees

WHERE job_id LIKE '%CLERK')

ORDER BY salary DESC;

22. Să se afişeze codul, numele şi salariul tuturor angajaţilor care câştigă mai mult decât salariul mediu.

23. Să se afişeze pentru fiecare salariat angajat în luna martie numele său, data angajării şi numele jobului.

24. Să se afişeze pentru fiecare salariat al cărui câştig total lunar este mai mare decât 12000 numele său,

câştigul total lunar şi numele departamentului în care lucrează.

25. Să se afişeze pentru fiecare angajat codul său şi numele joburilor sale anterioare, precum şi intervalul de

timp în care a lucrat pe jobul respectiv.

26. Să se modifice cererea de la punctul 25 astfel încât să se afişeze şi numele angajatului, respectiv codul

jobului său curent.

27. Să se modifice cererea de la punctul 26 astfel încât să se afişeze şi numele jobului său curent.

28. Să se afişeze salariaţii care au acelaşi manager ca şi angajatul având codul 140.

29. Să se afişeze numele departamentelor care funcţionează în America.

Page 234: SOLUTII - Baze de Date - Adunate

1

LABORATOR 4 - SQL

Funcţii multiple-row (grup). Gruparea datelor.

Aceste tipuri de funcţii pot fi utilizate pentru a returna informaţia corespunzătoare fiecăruia dintre

grupurile obţinute în urma divizării liniilor tabelului cu ajutorul clauzei GROUP BY.

Pot apărea în clauzele SELECT, ORDER BY şi HAVING. Server-ul Oracle aplică aceste funcţii fiecărui

grup de linii şi returnează un singur rezultat pentru fiecare mulţime.

Exemple de funcţii grup: AVG, SUM, MAX, MIN, COUNT etc.

Tipurile de date ale argumentelor funcţiilor grup pot fi CHAR, VARCHAR2, NUMBER sau DATE.

Funcţiile AVG şi SUM, operează numai asupra valorilor numerice. Funcţiile MAX şi MIN pot opera asupra

valorilor numerice, caracter sau dată calendaristică.

Toate funcţiile grup, cu excepţia lui COUNT(*), ignoră valorile null. COUNT(expresie)

returnează numărul de linii pentru care expresia dată nu are valoarea null. Funcţia COUNT returnează un

număr mai mare sau egal cu zero şi nu întoarce niciodată valoarea null.

Când este utilizată clauza GROUP BY, server-ul sortează implicit mulţimea rezultată în ordinea

crescătoare a valorilor coloanelor după care se realizează gruparea.

Absenţa clauzei GROUP BY conduce la aplicarea funcţiei grup pe mulţimea tuturor liniilor tabelului. În clauza GROUP BY se trec obligatoriu toate coloanele prezente în clauza SELECT, care nu sunt

argument al funcţiilor grup.

1. Să se afişeze cel mai mare salariu, cel mai mic salariu, suma şi media salariilor tuturor angajatilor. Etichetaţi

coloanele Maxim, Minim, Suma, respectiv Media. Să se rotunjească rezultatele.

SELECT MIN(salary) min, MAX(salary) max, SUM(salary) suma, ROUND(AVG(salary)) media

FROM employees;

2. Utilizând funcţia grup COUNT să se determine:

a. numărul total de angajaţi;

b. numărul de angajaţi care au manager;

c. numărul de manageri.

3. Să se afişeze diferenţa dintre cel mai mare şi cel mai mic salariu. Etichetaţi coloana “Diferenta”.

4. Să se listeze numărul de angajaţi din departamentul având codul 50.

5. Caţi angajaţi din departamentul 80 câştigă comision?

6. Să se selecteze valoarea medie şi suma salariilor pentru toţi angajaţii care sunt reprezentanţi de vânzări

(SA_MAN, SA_REP).

7. Să se selecteze data angajării primei persoane care a fost angajată de companie.

8. Să se afişeze numărul de angajaţi pentru fiecare job.

SELECT job_id, COUNT(employee_id) nr_angajati

FROM employees

GROUP BY job_id;

9. Să se afişeze minimul, maximul, suma şi media salariilor pentru fiecare departament.

10. Să se afişeze codul departamentului şi media salariilor pentru fiecare job din cadrul acestuia.

SELECT department_id, job_id, AVG(salary)

FROM employees

GROUP BY department_id, job_id;

11. a. Să se afişeze codul departamentelor pentru care salariul minim depăşeşte 5000$.

SELECT department_id, MIN(salary)

FROM employees

GROUP BY department_id

HAVING MIN(salary)>5000;

Page 235: SOLUTII - Baze de Date - Adunate

2

b. Să se modifice cererea anterioară astfel încât să se afişeze şi oraşul în care funcţionează aceste

departamente.

12. Să se obţină codul departamentelor şi numărul de angajaţi al acestora pentru departamentele care au cel

puţin 10 angajaţi.

13. Să se obţină codul departamentelor şi suma salariilor angajaţilor care lucrează în acestea, în ordine

descrescătoare după sumă. Se consideră angajaţii care au comision şi departamentele care au mai mult de 5

angajaţi.

14. Să se obţină job-ul pentru care salariul mediu este minim.

SELECT job_id

FROM employees

GROUP BY job_id

HAVING AVG(salary) = (SELECT MIN(AVG(salary))

FROM employees

GROUP BY job_id);

15. Să se afişeze cel mai mare dintre salariile medii pe departamente.

16. a. Să se afişeze codul, numele departamentului şi suma salariilor pe departamente.

SELECT d.department_id, department_name,a.suma

FROM departments d, (SELECT department_id ,SUM(salary) suma

FROM employees

GROUP BY department_id) a

WHERE d.department_id =a.department_id;

b. Daţi o altă metodă de rezolvare a acestei probleme.

17. a. Scrieţi o cerere pentru a afişa numele departamentului, numărul de angajaţi şi salariul mediu pentru

angajaţii din acel departament. Coloanele vor fi etichetate Departament, Nr. angajati, Salariu Mediu.

SELECT department_name “Departament”,

(SELECT COUNT(employee_id)

FROM employees

WHERE department_id = d.department_id ) ” Nr. angajati”,

(SELECT AVG(salary)

FROM employees

WHERE department_id = d.department_id) ”Salariu mediu”

FROM departments d;

b. Daţi o altă metodă de rezolvare pentru problema anterioară.

18. Să se creeze o cerere prin care să se afişeze numărul total de angajaţi şi, din acest total, numărul celor care

au fost angajaţi în 1997, 1998, 1999 şi 2000. Datele vor fi afişate în forma următoare:

Total 1997 1998 1999 2000

--------------------------------------------------------------

50 10 5 25 1

SUM(DECODE(TO_CHAR(hire_date,'yyyy'),1997,1,0))

Page 236: SOLUTII - Baze de Date - Adunate

3

Operatorii ROLLUP şi CUBE

Clauza GROUP BY permite gruparea liniilor selectate după valorile expresiilor precizate în aceasta.

Pentru fiecare grup, va fi returnată o singură linie de informaţie. Clauza GROUP BY poate produce grupări

superagregat utilizând extensiile CUBE sau ROLLUP.

ROLLUP grupează liniile selectate pe baza valorilor primelor n, n - 1, …, 0 expresii din

specificaţia GROUP BY şi returnează o singură linie pentru fiecare grup. ROLLUP creează grupări prin

deplasarea într-o singură direcţie, de la dreapta la stânga, de-a lungul listei de coloane specificate în

clauza GROUP BY. Apoi, se aplică funcţia agregat acestor grupări. Dacă sunt specificate n expresii în

operatorul ROLLUP, numărul de grupări generate va fi n + 1. Liniile care se bazează pe valoarea primelor

n expresii se numesc linii obişnuite, iar celelalte se numesc linii superagregat. GROUP BY ROLLUP (expr_1, expr_2, …, expr_n) generează n+1 tipuri de linii, corespunzătoare

următoarelor grupări:

GROUP BY (expr_1, expr_2, …, expr_n-1, expr_n)

GROUP BY (expr_1, expr_2, …, expr_n-1)

GROUP BY (expr_1, expr_2)

GROUP BY (expr_1)

GROUP BY () – corespunzător absenţei clauzei GROUP BY şi deci, calculului funcţiilor grup din

cerere pentru întreg tabelul.

CUBE grupează liniile selectate pe baza valorilor tuturor combinaţiilor posibile ale expresiilor

specificate şi returnează câte o linie totalizatoare pentru fiecare grup. Acest operator este folosit pentru a produce mulţimi de rezultate care sunt utilizate în rapoarte. În vreme ce ROLLUP produce subtotalurile doar pentru o parte dintre combinaţiile posibile, operatorul CUBE produce subtotaluri pentru toate combinaţiile posibile de grupări specificate în clauza GROUP BY, precum şi un total general.

Dacă există n coloane sau expresii în clauza GROUP BY, vor exista 2n combinaţii posibile

superagregat.

19. Să se afişeze codurile departamentelor în care lucrează cel puţin un angajat, iar pentru fiecare dintre acestea

şi pentru fiecare manager care lucrează în departamentul respectiv să se afişeze numărul de salariaţi. De

asemenea, să se afişeze numărul de salariaţi pentru fiecare departament indiferent de manager şi numărul

total de angajaţi din companie.

SELECT department_id, manager_id, COUNT(employee_id)

FROM employees

WHERE manager_id IS NOT NULL AND department_id IS NOT NULL

GROUP BY ROLLUP (department_id, manager_id);

department_id manager_id COUNT(employee_id)

---------------------------------------------------------------------

10 7782 1

10 7839 1

10 2

-----------------------------------------------------------------------

20 7566 2

20 7788 1

20 7839 1

20 7902 1

20 5

-----------------------------------------------------------------------

30 7698 5

30 7839 1

30 6

-----------------------------------------------------------------------

13

Page 237: SOLUTII - Baze de Date - Adunate

4

20. Să se afişeze codurile departamentelor în care lucrează cel puţin un angajat, iar pentru fiecare dintre acestea

şi pentru fiecare manager care lucrează în departamentul respectiv să se afişeze numărul de salariaţi. De

asemenea, să se afişeze numărul de salariaţi pentru fiecare departament indiferent de manager, numărul de

angajaţi subordonaţi unui manager indiferent de departament şi numărul total de angajaţi din companie.

SELECT department_id, manager_id, COUNT(employee_id)

FROM employees

WHERE manager_id IS NOT NULL AND department_id IS NOT NULL

GROUP BY CUBE (department_id, manager_id);

department_id manager_id COUNT(employee_id)

---------------------------------------------------------------------

10 7782 1

10 7839 1

10 2

-----------------------------------------------------------------------

20 7566 2

20 7788 1

20 7839 1

20 7902 1

20 5

-----------------------------------------------------------------------

30 7698 5

30 7839 1

30 6

-----------------------------------------------------------------------

7566 2

7698 5

7782 1

7788 1

7839 3

7902 1

----------------------------------------------------------------------

13

21. Pentru fiecare departament, job, respectiv an al angajării să se afişeze numărul de salariaţi. De asemenea se

va afişa numărul de angajaţi:

- pentru fiecare departament şi job, indiferent de anul angajării;

- pentru fiecare departament, indiferent de job şi de anul angajării;

- la nivel de companie.

22. Să se afişeze suma alocată pentru plata salariilor pe joburi (codul jobului), în cadrul departamentului (codul

departamentului). De asemenea, să se afişeze valoarea totală necesară pentru plata salariilor la nivel de

departament, valoarea totală necesară pentru plata salariilor la nivel de job, indiferent de departament şi

valoarea totală necesară pentru plata salariilor la nivel de companie.

23. Funcţia GROUPING(expresie) întoarce: - valoarea 0, dacă expresia a fost utilizată pentru calculul valorii agregat

- valoarea 1, dacă expresia nu a fost utilizată.

24. Să se afişeze numele departamentelor, titlurile job-urilor şi valoarea medie a salariilor, pentru: - fiecare departament şi, în cadrul său pentru fiecare job;

- fiecare departament (indiferent de job); - întreg tabelul.

De asemenea, să se afişeze şi o coloană care indică intervenţia coloanelor department_name şi job_title în obţinerea

rezultatului.

Page 238: SOLUTII - Baze de Date - Adunate

5

25. Modificaţi cererea anterioară astfel încât să se afişeze numele departamentelor, titlurile job-urilor şi

valoarea medie a salariilor, pentru: - fiecare departament şi, în cadrul său pentru fiecare job;

- fiecare departament (indiferent de job);

- fiecare job(indiferent de departament); - întreg tabelul.

Cum intervin coloanele în obţinerea rezultatului?

Să se afişeze ‟Dept‟, dacă departamentul a intervenit în agregare şi „Job‟, dacă job-ul a intervenit în agregare.

DECODE(GROUPING(department_name), 0, „Dept‟)

26. Utilizaţi cererea de la punctul 20.

a. Eliminaţi clauza WHERE din această cerere. Analizaţi rezultatul obţinut.

b. Modificaţi cererea obţinută astfel încât să se identifice dacă o valoare null din rezultat este stocată pe

una dintre coloanele manager_id sau department_id sau este produsă de operatorul CUBE.

27. Clauza GROUPING SETS. Permite obţinerea numai a anumitor grupări superagregat. Acestea pot fi

precizate prin intermediul clauzei:

GROUP BY GROUPING SETS ((expr_11, expr_12, …, expr_1n), (expr_21, expr_22, …expr_2m), …)

28. Să se afişeze numele departamentelor, numele job-urilor, codurile managerilor angajaţilor, maximul şi suma

salariilor pentru:

- fiecare departament şi, în cadrul său, fiecare job;

- fiecare job şi, în cadrul său, pentru fiecare manager;

- întreg tabelul.

GROUPING SETS ((department_name, job_title), (job_title, e.manager_id), ());

Page 239: SOLUTII - Baze de Date - Adunate

1

LABORATOR 6 SQL - LDD

Limbajul de definire a datelor (CREATE, ALTER, DROP)

Crearea tabelelor

CREATE TABLE [schema.]nume_tabel (

nume_coloana tip_de_date [DEFAULT1 expr], ...);

CREATE TABLE nume_tabel [(col1, col2...)]

AS subcerere;

1. Creaţi tabelul salariat_*** având următoarea structură:

Nume Caracteristici Tip

cod_ang NOT NULL NUMBER(4)

nume VARCHAR2(25)

prenume VARCHAR2(25)

functia VARCHAR2(20)

sef NUMBER(4)

data_angajarii Valoare implicită data

curentă DATE

varsta NUMBER(2)

email CHAR(50)

salariu Valoare implicită 0 NUMBER(9,2)

CREATE TABLE salariat_*** (

cod_ang NUMBER(4) NOT NULL,

nume VARCHAR2(25),

prenume VARCHAR2(25),

functia VARCHAR2(20),

sef NUMBER(4),

data_angajarii DATE DEFAULT SYSDATE,

varsta NUMBER(2),

email CHAR(50),

salariu NUMBER(9,2) DEFAULT 0);

2. Afişaţi structura tabelului creat anterior.

3. Se dau următoarele valori:

COD _ANG NUME PRENUME FUNCTIA SEF DATA_ANG VARSTA EMAIL SALARIU

1 ..... ..... director null ........ 30 ..... 5500

2 ..... ..... functionar 1 ......... 25 ..... 0

3 ..... ...... economist 1 ......... 45 ..... 3000

4 ..... .... functionar 1 ......... 35 ...... 1000

4. Inseraţi în tabelul salariat_*** prima înregistrare din tabelul de mai sus fără să precizaţi lista de

coloane în comanda INSERT.

5. Inseraţi a doua înregistrare folosind o listă de coloane din care excludeţi data_angajarii şi salariul

care au valori implicite. Observaţi apoi rezultatul.

6. Inseraţi înregistrările 3 şi 4.

7. Creaţi tabelul functionar_*** care să conţină funcţionarii din tabelul salariat_***, având

următoarele coloane: codul, numele, salariul anual şi data angajării. Verificaţi cum a fost creat

tabelul şi ce date conţine.

Page 240: SOLUTII - Baze de Date - Adunate

2

Modificarea tabelelor

8. Adăugaţi o nouă coloană tabelului salariat_*** care să conţină data naşterii.

ALTER TABLE salariat_***

ADD (datan DATE);

9. Modificaţi dimensiunea coloanei nume la 30 si pe cea a salariului la 12 cu 3 zecimale. ALTER TABLE salariat_***

MODIFY (nume VARCHAR2(30), salariu NUMBER(12,3));

10. Modificaţi tipul coloanei email la VARCHAR2. 11. Modificaţi valoarea implicită a coloanei data_angajarii la data sistemului + o zi. 12. Eliminaţi coloana varsta din tabelul salariat_***. ALTER TABLE salariat_***

DROP COLUMN varsta;

Redenumirea şi eliminarea tabelelor

RENAME nume_tabel TO nume_nou;

DROP TABLE nume_tabel;

13. Redenumiţi tabelul functionar_*** cu funct_***.

14. Recreaţi tabelul functionar_*** utilizând tabelul funct_***..

15. Eliminaţi tabelul funct_***.

Constrângeri

Adăugarea constrângerilor la crearea tabelului (CREATE TABLE)

CREATE TABLE [schema.]nume_tabel (

nume_coloana tip_de_date [DEFAULT expr]

[constrangere_de_coloana], ...

..[constrangere la nivel de tabel])

16. Ştergeţi şi apoi creaţi din nou tabelul salariat_*** cu următoarea structură.

NUME TIP CONSTRÂNGERE

cod_ang NUMBER(4) Cheie primară

nume VARCHAR2(25) NOT NULL

prenume VARCHAR2(25)

data_nasterii DATE data_nasterii<data_angajarii

functia VARCHAR2(9) NOT NULL

sef NUMBER(4) Referă ca şi cheie externă cod_ang din acelaşi tabel

data_angajarii DATE

email VARCHAR2(20) unic

salariu NUMBER(12,3) > 0

cod_dept NUMBER(4) Combinaţia NUME + PRENUME să fie unică

Page 241: SOLUTII - Baze de Date - Adunate

3

Observaţie:

Constrângerile de tip CHECK se pot implementa la nivel de coloană doar dacă nu referă o altă

coloană a tabelului.

DROP TABLE salariat_***;

CREATE TABLE salariat_*** (

cod_ang NUMBER(4) PRIMARY KEY,

nume VARCHAR2(25) NOT NULL,

prenume VARCHAR2(25),

data_nasterii DATE,

functia VARCHAR2(9) NOT NULL,

sef NUMBER(4) REFERENCES salariat_*** (cod_ang),

data_angajarii DATE DEFAULT SYSDATE,

email VARCHAR2(20) UNIQUE,

salariu NUMBER(9,2) CHECK (salariu > 0),

cod_dep NUMBER(4),

CONSTRAINT const_c_*** CHECK (data_angajarii > data_nasterii),

CONSTRAINT const_u_*** UNIQUE (nume,prenume,data_nasterii));

17. Ştergeţi tabelul salariat_***, iar apoi recreaţi-l implementând toate constrângerile la nivel de

tabel.

Observaţie: Constrângerea de tip NOT NULL se poate declara doar la nivel de coloană.

DROP TABLE salariat_***;

CREATE TABLE salariat_*** (

cod_ang NUMBER(4),

nume VARCHAR2(25) NOT NULL,

prenume VARCHAR2(25),

data_nasterii DATE,

functia VARCHAR2(9) NOT NULL,

sef NUMBER(4),

data_angajarii DATE DEFAULT SYSDATE,

email VARCHAR2(20),

salariu NUMBER(9,2),

cod_dep NUMBER(4),

CONSTRAINT ccp_*** PRIMARY KEY (cod_ang),

CONSTRAINT cce_*** FOREIGN KEY (sef) REFERENCES salariat_***

(cod_ang),

CONSTRAINT cu1_*** UNIQUE (email),

CONSTRAINT cc1_*** CHECK (data_angajarii > data_nasterii),

CONSTRAINT cc2_***CHECK (salariu > 0),

CONSTRAINT cu2_*** UNIQUE (nume,prenume,data_nasterii));

18. Creaţi tabelul departament_*** care să aibă următoarea structură.

NUME TIP CONSTRÂNGERI

COD_DEP NUMBER(4) Cheie primară

NUME VARCHAR2(20) Not null

ORAS VARCHAR2(25)

Page 242: SOLUTII - Baze de Date - Adunate

4

Adăugarea constrângerilor ulterior creării tabelului, eliminarea, activarea sau dezactivarea

constrângerilor (ALTER TABLE) - adaugă constrângeri

ALTER TABLE nume_tabel

ADD [CONSTRAINT nume_constr] tip_constr (coloana);

- elimină constrângeri ALTER TABLE nume_tabel

DROP [CONSTRAINT nume_constr] tip_constr (coloana);

- activare/dezactivare constrângere ALTER TABLE nume_tabel

MODIFY CONSTRAINT nume_constr ENABLE|DISABLE;

sau ALTER TABLE nume_tabel

ENABLE| DISABLE nume_constr;

19. Inseraţi o nouă înregistrare în salariat_*** de forma:

cod nume prenume data_n functia sef data_ang email salariu cod_dep

2 N2 P2 11-JUN-1960

economist 1 Sysdate E2 2000 10

Ce observaţi? Introduceţi înregistrarea dar specificând valoarea NULL pentru coloana sef.

20. Încercaţi să adăugaţi o constrângere de cheie externă pe cod_dep din salariat_***. Ce observaţi?

ALTER TABLE salariat_***

ADD CONSTRAINT cce2_*** FOREIGN KEY (cod_dep) REFERENCES

departament_*** (cod_dep);

21. Inseraţi o nouă înregistrare în departament_***. Apoi adăugaţi constrângerea de cheie externă definită anterior.

22. Inseraţi noi înregistrări în salariat_***, respectiv în departament_***. Care trebuie să fie ordinea de inserare?

cod nume prenume data_n functia sef data_ang email salariu cod_dep

3 N3 P3 11-JUN-1967

jurist 2 Sysdate E3 2500 20

23. Ştergeţi departamentul 20 din tabelul departament_***. Ce observaţi?

24. Ştergeţi constrângerea cce2_***. Recreaţi această constrângere adăugând opţiunea ON DELETE CASCADE.

ALTER TABLE salariat_***

DROP CONSTRAINT cce2_***;

ALTER TABLE salariat_***

ADD CONSTRAINT cce2_*** FOREIGN KEY (cod_dep) REFERENCES

departament_*** (cod_dep) ON DELETE CASCADE;

25. Ştergeţi departamentul 20 din tabelul departament_***. Ce observaţi în tabelul salariat_***?

Anulaţi modificările.

cod_dep nume loc

10 Economic Bucuresti

cod_dep nume loc

20 Juritic Constanta

Page 243: SOLUTII - Baze de Date - Adunate

5

26. Ştergeţi constrângerea cce2_***. Recreaţi această constrângere adăugând opţiunea ON

DELETE SET NULL.

ALTER TABLE salariat_***

DROP CONSTRAINT cce2_***;

ALTER TABLE salariat_***

ADD CONSTRAINT cce2_*** FOREIGN KEY (cod_dep) REFERENCES

departament_*** (cod_dep) ON DELETE SET NULL;

27. Încercaţi să ştergeţi departamentul 10 din tabelul departament_***. Ce observaţi?

Consultarea dicţionarului datelor

Informaţii despre tabelele create se găsesc în vizualizările :

USER_TABLES – informaţii complete despre tabelele utilizatorului curent.

ALL_TABLES – informaţii complete despre tabelele tuturor utilizatorilor.

COLS – informaţii despre coloane.

TAB – informaţii de bază despre tabelele existente în schema utilizatorului curent.

Informaţii despre constrângeri găsim în :

USER_CONSTRAINTS – informaţii despre constrângerile definite de utilizatorul

curent;

ALL_CONSTRAINTS – informaţii despre cosntrângerile definite de toţi utilizatorii.

Page 244: SOLUTII - Baze de Date - Adunate

LABORATOR 7 SQL - LDD Vizualizări. Secvenţe. Indecşi. Sinonime.

Definirea vizualizărilor

Vizualizările sunt tabele virtuale care sunt construite pe baza unor tabele sau vizualizări,

denumite tabele de bază. Ele nu conţin date ci sunt ca nişte imagini logice asupra datelor din tabelele

de bază. Sunt definite de o cerere SQL, de aceea mai sunt denumite şi cereri stocate.

Avantajele utilizării vizualizărilor:

- restricţionarea accesului la date;

- simplificarea unor cereri complexe;

- prezentarea de diferite imagini asupra datelor.

Vizualizările se pot fi simple sau complexe. Asupra vizualizărilor simple se pot realiza operaţii

LMD. Asupra vizualizărilor complexe nu sunt posibile operaţii LMD în toate cazurile decât dacă sunt

definiţi declanşatori de tip INSTEAD OF.

Caracteristici Simple Complexe

Număr de tabele de baza Un singur tabel Unul sau mai multe tabele

Conţine funcţii Nu Da

Conţine grupări de date Nu Da

Sintaxa simplificată a comenzii CREATE VIEW este:

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW nume_view [(alias, alias, ..)]

AS subcerere

[WITH CHECK OPTION [CONSTRAINT nume_constr]]

[WITH READ ONLY [CONSTRAINT nume_constr]];

- FORCE permite crearea vizualizarea înainte de a defini tabelele de bază;

- subcererea poate fi oricât de complexă dar nu poate conţine clauza ORDER BY;

- WITH CHECK OPTION permite inserarea şi modificarea prin intermediul vizualizării numai

a liniilor ce sunt accesibile vizualizării; dacă lipseşte numele constrângerii atunci sistemul

asociază un nume implicit de tip SYS_Cn acestei constrângeri;

- WITH READ ONLY asigură că prin intermediul vizualizării nu se pot executa operaţii LMD.

Nu se pot realiza operaţii LMD în vizualizări ce conţin:

- funcţii grup,

- clauza GROUP BY sau HAVING,

- cuvântul cheie DISTINCT,

- pseudocoloana ROWNUM,

- coloane definite de expresii,

- coloane NOT NULL din tabelul de bază, care nu sunt incluse în coloanele vizualizării.

- linii ce nu sunt accesibile vizualizării (în cazul utilizării clauzei WITH CHECK OPTION).

Nu se pot actualiza:

- coloane ale căror valori rezultă prin calcul sau definite cu ajutorul funcţiei DECODE,

- coloane care nu respectă constrângerile din tabelele de bază.

Pentru vizualizările bazate pe mai multe tabele, orice operaţie INSERT, UPDATE sau DELETE

poate modifica datele doar din unul din tabelele de bază. Acest tabel este cel protejat prin cheie (key

preserved).

Eliminarea unei vizualizări se face prin comanda DROP VIEW :

DROP VIEW nume_viz;

Page 245: SOLUTII - Baze de Date - Adunate

Observaţie:

Subcererile temporare caracterizate de un alias ce apar în comenzile SELECT, INSERT.

UPDATE, DELETE, MERGE se numesc vizualizai inline (de exemplu o subcerere utilizată

în clauza FROM a comenzii SELECT). Spre deosebire de vizualizările propriu-zise acestea

nu sunt considerate obiecte ale schemei şi sunt entităţi temporare.

Observaţie:

Reactualizarea tabelelor implică reactualizarea corespunzătoare a vizualizărilor.

Reactualizarea vizualizărilor nu implică întotdeauna reactualizarea tabelelor de bază.

1. Să se creeze vizualizarea v_emp_*** care să conţină codul şi numele salariaţilor din tabelul emp_***.

Să se afişeze conţinutul acesteia. Să se insereze o nouă înregistrare în această vizualizare. Ce

observaţi? Să se şteargă vizualizarea v_emp_***.

CREATE VIEW v_emp_*** (cod, nume)

AS

SELECT employee_id, last_name

FROM emp_***;

INSERT INTO v_emp_***

VALUES (400,’N1’);

DROP VIEW v_emp_***;

2. Să se creeze vizualizarea v_emp_*** care să conţină codul, numele, emailul, data angajării, salariul şi

codul jobului salariaţilor din tabelul emp_***. Să se analizeze structura şi conţinutul vizualizării. Să

se insereze o nouă înregistrare în această vizualizare. Să se verifice că noua înregistrare a fost inserată

şi în tabelul de bază.

Observaţie: Trebuie introduse neapărat în vizualizare coloanele care au constrângerea NOT NULL în

tabelul de bază (altfel, chiar dacă tipul vizualizării permite operaţii LMD, acestea nu vor fi posibile

din cauza nerespectării constrângerilor NOT NULL).

CREATE VIEW v_emp_***

AS

SELECT employee_id, last_name, email, hire_date, salary,job_id

FROM emp_***;

DESC v_emp_***

SELECT * FROM v_emp_***;

INSERT INTO v_emp_***

VALUES (400,’N1’,’E1’,SYSDATE,5000,’SA_REP’);

SELECT employee_id, last_name, email, hire_date, salary, job_id

FROM emp_***;

3. Să se mărească cu 1000 salariul angajatului având codul 400 din vizualizarea creată anterior. Ce efect

va avea această acţiune asupra tabelului de bază?

UPDATE v_emp_***

SET salary=salary+1000

WHERE employee_id = 400;

Page 246: SOLUTII - Baze de Date - Adunate

SELECT employee_id, last_name, salary

FROM emp_***

WHERE employee_id = 400;

4. Să se şteargă angajatul având codul 400 din vizualizarea creată anterior. Ce efect va avea această

acţiune asupra tabelului de bază?

DELETE FROM v_emp_***

WHERE employee_id = 400;

SELECT employee_id, last_name, salary

FROM emp_***

WHERE employee_id = 400;

5. a) Să se creeze vizualizarea v_emp_dept_*** care să conţină employee_id, last_name, hire_date,

job_id, department_id din tabelul emp_*** şi coloana department_name din tabelul dept_***.

CREATE VIEW v_emp_dept_*** AS

SELECT employee_id, last_name, email, hire_date, job_id,

e.department_id, department_name

FROM emp_*** e, dept_*** d

WHERE e.department_id =d.department_id;

b) Să încerce inserarea înregistrării (500, 'N2', 'E2',SYSDATE,’SA_REP’,30, 'Administrativ') în

vizualizarea creată anterior.

INSERT INTO v_emp_dept_***

VALUES (500, 'N2', 'E2',SYSDATE,’SA_REP’,30, 'Administrativ');

c) Care dintre coloanele vizualizării v_emp_dept_*** sunt actualizabile?

SELECT column_name, updatable

FROM user_updatable_columns

WHERE UPPER(table_name) = UPPER('v_emp_dept_***');

d) Adăugaţi tabelului emp_*** constrângerea de cheie externă care referă tabelul dept_***, apoi

verificaţi ce coloane din vizualizarea v_emp_dept_*** sunt actualizabile.

ALTER TABLE emp_***

ADD CONSTRAINT cp_emp_*** PRIMARY KEY (employee_id);

ALTER TABLE dept_***

ADD CONSTRAINT cp_dept1_*** PRIMARY KEY (department_id);

ALTER TABLE emp_***

ADD CONSTRAINT ce_emp1_*** FOREIGN KEY (department_id)

REFERENCES dept_***(department_id);

SELECT column_name, updatable

FROM user_updatable_columns

WHERE UPPER(table_name) = UPPER('v_emp_dept_***');

d) Recreaţi vizualizarea v_emp_dept_***, apoi verificaţi ce coloane sunt actualizabile.

Page 247: SOLUTII - Baze de Date - Adunate

DROP VIEW v_emp_dept_***;

CREATE VIEW v_emp_dept_*** AS

SELECT employee_id, last_name, email, hire_date, job_id,

e.department_id, department_name

FROM emp_*** e, dept_*** d

WHERE e.department_id =d.department_id;

SELECT column_name, updatable

FROM user_updatable_columns

WHERE UPPER(table_name) = UPPER('v_emp_dept_***');

f) Inseraţi o linie prin intermediul acestei vizualizări.

Obs. Tabelul ale cărui coloane sunt actualizabile este protejat prin cheie.

INSERT INTO v_emp_dept_*** (employee_id, last_name,email,hire_date,

job_id, department_id)

VALUES (500, 'N2', 'E2',SYSDATE,’SA_REP’,30);

g) Ce efect are o operaţie de ştergere prin intermediul vizualizării v_emp_dept_***? Comentaţi.

DELETE FROM v_emp_dept_***

WHERE employee_id = 500;

SELECT employee_id, last_name, hire_date, job_id, department_id

FROM emp_***

WHERE employee_id = 500;

SELECT department_id, department_name

FROM dept_***

WHERE department_id = 30;

6. Să se creeze vizualizarea v_dept_*** care să conţine codul şi numele departamentului, numărul de

angajaţi din departamentul respectiv şi suma alocată pentru plata salariilor. Această vizualizare

permite actualizări?

CREATE VIEW v_dept_*** (cod, nume, nr_angajati, val_salarii)

AS

SELECT e.department_id, department_name, COUNT(*) nr_angajati,

SUM(salary) val_salarii

FROM emp_*** e, dept_*** d

WHERE e.department_id = d.department_id

GROUP BY e.department_id, department_name;

7. a) Să se creeze vizualizarea v_emp30_*** care să conţină numele, emailul, data angajării, salariul,

codul jobului şi codul departamentului celor care lucrează în departamentul 30. În această

vizualizare nu se va permite modificarea sau inserarea liniilor ce nu sunt accesibile ei. Daţi un nume

constrângerii.

Page 248: SOLUTII - Baze de Date - Adunate

CREATE VIEW v_emp30_*** AS

SELECT employee_id, last_name, email, hire_date, salary, job_id,

department_id

FROM emp_***

WHERE department_id=30

WITH CHECK OPTION CONSTRAINT ck_option1_***;

b) Să se listeze structura şi conţinutul vizualizării v_emp30_***.

DESCRIBE v_emp30_***

SELECT * FROM v_emp30_***;

c) Să se încerce prin intermediul vizualizării inserarea unui angajat în departamentul 10 şi a unui

angajat în departamentul 30.

INSERT INTO v_emp30_***

VALUES (111, 'N1', 'E1',SYSDATE,1000,’SA_REP’,10);

INSERT INTO v_emp30_***

VALUES (11, 'N11', 'E11',SYSDATE,1000,’SA_REP’,30);

d) Să se încerce prin intermediul vizualizării modificarea departamentului unui angajat.

UPDATE v_emp30_***

SET department_id =20

WHERE employee_id = 11;

8. Să se creeze o vizualizare (v_dept_***) asupra tabelului dept_*** să nu permită efectuarea nici unei

operaţii LMD. Testaţi operaţiile de inserare, modificare şi ştergere asupra acestei vizualizări.

CREATE VIEW v_dept_*** AS

SELECT *

FROM dept_***

WITH READ ONLY;

9. Să se consulte informaţii despre vizualizarea v_dept_***. Folosiţi vizualizarea dicţionarului datelor

USER_VIEWS (coloanele VIEW_NAME şi TEXT).

Obs: Coloana TEXT este de tip LONG. În cazul selectării unei coloane de tip LONG trebuie utilizată

comanda SET LONG n pentru a seta numărul de caractere afişate.

SET LONG 200

SELECT view_name, text

FROM user_views

WHERE UPPER(view_name)=UPPER(’v_dept_***’);

Definirea secvenţelor O secvenţă este un obiect al bazei de date ce permite generarea de numere întregi unice cu scopul de a

fi folosiţi ca valori pentru cheia primară sau coloane numerice unice. Secvenţele sunt independente de

tabele.

Sintaxa comenzii CREATE SEQUENCE este:

CREATE SEQUENCE nume_secvenţă

Page 249: SOLUTII - Baze de Date - Adunate

[INCREMENT BY n]

[START WITH valoare_start]

[ {MAXVALUE valoare_maximă | NOMAXVALUE} ]

[ {MINVALUE valoare_minimă | NOMINVALUE} ]

[ {CYCLE | NOCYCLE} ]

[ {CACHE n | NOCACHE} ];

- INCREMENT BY specifică diferenţa dintre valorile succesive ale secvenţei (valoare implicită 1).

- START WITH specifică primul număr care va fi generat de secvenţă (valoare implicită 1).

- MAXVALUE, MINVALUE precizează valoarea maximă, respectiv minimă pe care o poate genera

secvenţa. Opţiunile NOMAXVALUE, NOMINVALUE sunt implicite. NOMAXVALUE specifică

valoarea maximă de 1027

pentru o secvenţă crescătoare şi -1 pentru o secvenţă descrescătoare.

NOMINVALUE specifică valoarea minimă 1 pentru o secvenţă crescătoare şi -1026

pentru o secvenţă

descrescătoare.

- CYCLE şi NOCYCLE specifică dacă secvenţa continuă să genereze numere după obţinerea valorii

maxime sau minime. NOCYCLE este opţiunea implicită.

- CACHE n precizează numărul de valori pe care server-ul Oracle le prealocă şi le păstrează în

memorie. În mod implicit, acest număr de valori este 20. Opţiunea CACHE pemite accesul mai rapid la

valorile secvenţei care sunt păstrate în memorie. Aceste valori sunt generate la prima referinţă asupra

secvenţei. Fiecare valoare din secvenţă se furnizează din secvenţa memorată. După utilizarea ultimei

valori prealocate secvenţei, următoarea solicitare a unei valori determină încărcarea unui alt set de

numere în memorie. Pentru a nu fi prealocate şi reţinute în memorie astfel de valori, se utilizează

opţiunea NOCACHE.

Pseudocoloanele NEXTVAL şi CURRVAL permit utilizarea secvenţelor.

- nume_secv.NEXTVAL returnează următoarea valoare a secvenţei, o valoare unică la fiecare

referire. Trebuie aplicată cel puţin o dată înainte de a folosi CURRVAL;

- nume_secv.CURRVAL returnează valoarea curentă a secvenţei.

Pseudocoloanele NEXTVAL şi CURRVAL se pot utiliza în:

- lista SELECT a comenzilor ce nu fac parte din subcereri;

- lista SELECT a unei cereri ce apare într-un INSERT;

- clauza VALUES a comenzii INSERT;

- clauza SET a comenzii UPDATE.

Pseudocoloanele NEXTVAL şi CURRVAL nu se pot utiliza:

- în lista SELECT a unei vizualizări;

- într-o comandă SELECT ce conţine DISTINCT, GROUP BY, HAVING sau ORDER BY;

- într-o subcerere în comenzile SELECT, UPDATE, DELETE;

- în clauza DEFAULT a comenzilor CREATE TABLE sau ALTER TABLE.

Ştergerea secvenţelor se realizează cu ajutorul comenzii DROP SEQUENCE.

DROP SEQUENCE nume_secv;

10. Să se creeze o secvenţă care are pasul de incrementare 10 şi începe de la 10, are ca valoare maximă

10000 şi nu ciclează.

CREATE SEQUENCE sec_***

INCREMENT BY 10

START WITH 10

MAXVALUE 10000

NOCYCLE;

11. Să se modifice toate liniile din tabelul emp_***, regenerând codul angajaţilor astfel încât să utilizeze

secvenţa sec_emp***. Să se anuleze modificările.

UPDATE emp_***

SET employee_id = sec_emp***.NEXTVAL;

ROLLBACK;

Page 250: SOLUTII - Baze de Date - Adunate

12. Să se introducă un nou salariat în tabelul emp_*** folosindu-se pentru codul salariatului secvenţa

creată.

INSERT INTO emp_*** (employee_id,last_name,email,hire_date,job_id)

VALUES(sec_emp***.NEXTVAL,'x','x',sysdate,'x');

13. Să se afişeze valoarea curentă a secvenţei.

SELECT sec_***.CURRVAL valoare

FROM DUAL;

Exerciţiu

a) Creaţi o secvenţă pentru generarea codurilor de departamente, seq_dept_***. Secvenţa va începe

de la 200, va creşte cu 10 la fiecare pas şi va avea valoarea maximă 20000, nu va cicla.

b) Să se selecteze informaţii despre secvenţele utilizatorului curent (nume, valoare minimă,

maximă, de incrementare, ultimul număr generat). Se va utiliza vizualizarea user_sequences.

c) Să se insereze o înregistrare nouă în DEPT_*** utilizând secvenţa creată.

d) Să se selecteze valoarea curentă a secvenţei.

e) Să se şteargă secvenţa.

Definirea indecşilor Un index este un obiect al unei scheme utilizator care este utilizat de server-ul Oracle pentru a mări

performanţele unui anumit tip de cereri asupra unui tabel.

Indecşii:

- evită scanarea completă a unui tabel la efectuarea unei cereri;

- reduc operaţiile de citire/scriere de pe disc utilizând o cale mai rapidă de acces la date şi anume

pointeri la liniile tabelului care corespund unor anumite valori ale unei chei (coloane);

- sunt independenţi de tabelele pe care le indexează, în sensul că dacă sunt şterşi nu afectează

conţinutul tabelelor sau comportamentul altor indecşi;

- sunt menţinuţi şi utilizaţi automat de către server-ul Oracle;

- sunt şterşi odată cu eliminarea tabelului asociat.

Indecşii pot fi creaţi :

- automat: la definirea unei constrângeri PRIMARY KEY sau UNIQUE;

- manual: cu ajutorul comenzii CREATE INDEX.

Se creează un index atunci când:

- o coloană conţine un domeniu mare de valori;

- o coloană conţine un număr mare de valori null;

- una sau mai multe coloane sunt folosite des în clauza WHERE sau în condiţii de join în programele

de aplicaţii;

- tabelul este mare şi de obicei cererile obţin mai puţin de 2%-4% din liniile tabelului;

- tabelul nu este modificat frecvent.

Sintaxa comenzii CREATE INDEX:

CREATE [UNIQUE] INDEX nume_index

ON tabel (coloana1 [, coloana2…]);

Modificarea unui index se face prin comanda ALTER INDEX.

Eliminarea unui index se face prin comanda: DROP INDEX nume_index;

14. Să se creeze un index neunic, emp_last_name_idx_***, asupra coloanei last_name din tabelul

emp_***.

15. Să se creeze indecşi unici asupra codului angajatului (employee_id) şi asupra combinaţiei last_name,

first_name, hire_date.

16. Creaţi un index neunic asupra coloanei department_id din emp_*** pentru a eficientiza joinurile

dintre acest tabel şi dept_***.

Page 251: SOLUTII - Baze de Date - Adunate

Definirea sinonimelor

Pentru a simplifica accesul la obiecte se pot asocia sinonime acestora.

Crearea unui sinonim este utilă pentru a evita referirea unui obiect ce aparţine altui utilizator

prefixându-l cu numele utilizatorului şi pentru a scurta numele unor obiecte cu numele prea lung.

Comanda pentru crearea sinonimelor este:

CREATE [PUBLIC] SYNONYM nume_sinonim

FOR obiect;

Eliminarea sinonimelor se face prin comanda DROP SYNONYM nume_sinonim;

17. Creaţi un sinonim public se_*** pentru tabelul emp_***.

18. Creaţi un sinonim pentru vizualizarea v_dept_***.

19. Utilizând sinonimele create anterior, afişaţi informaţii depre salariţi şi despre departamente.

Informaţii din dicţionarul datelor

Tipuri de vizualizări ale dicţionarului datelor:

ALL_* - obiecte accesibile utilizatorului curent,

DBA_* - obiecte accesibile numai administratorului,

USER_* - obiecte ale utilizatorului curent

1. Tabelele utilizatorului curent:

SELECT table_name

FROM user_tables

ORDER BY table_name;

2. Definiţiile şi numele constrângerilor:

SELECT constraint_name, constraint_type, search_condition, table_name

FROM user_constraints

WHERE table_name IN ('EMPLOYEES', 'DEPARTAMENTS’)

ORDER BY table_name, constraint_name;

3. Coloanele asociate unei constrângeri:

SELECT constraint_name, column_name

FROM user_cons_columns

WHERE table_name IN ('EMPLOYEES', 'DEPARTAMENTS’)

ORDER BY table_name, constraint_name;

4. Informaţii despre vizualizări:

SELECT view_name

FROM user_views;

5. Informaţii referitoare la secvenţe:

SELECT sequence_name, min_value, max_value, increment_by, last_number

FROM user_sequences;

6. Informaţii referitoare la indecşi:

Page 252: SOLUTII - Baze de Date - Adunate

SELECT index_name, table_name

FROM user_indexes;

SELECT index_name

FROM user_ind_columns;

SELECT a.index_name, a.column_name,a.column_position poz, b.uniqueness

FROM user_indexes b, user_ind_columns a

WHERE a.index_name = b.index_name

AND a.table_name = 'EMP_***';

7. Informaţii referitoare la sinonime:

SELECT synonym_name, table_owner, table_name

FROM user_synonyms;

Page 253: SOLUTII - Baze de Date - Adunate

Adevarat / Fals Pentru a fi in a treia forma normala , o relatie trebuie sa nu fie in prima forma normala sau in a doua forma normala:- Adevarat - Fals Pentru a fi in a treia forma normala o relatie nu trebuie sa fie in prima sau a doua forma normala?- Adevarat - Fals Probleme de dependenta tranzitiva apar atunci cand un atribut non-cheie depinde de un alt atribut non-cheie- Adevarat - Fals Diagrama ERD este un model de date conceptual de nivel înalt, dependent de platforma hardware utilizată şi de tipul de RDBMS (SGBD) – ului utilizat- Adevarat - Fals Folosind aplicatia Microsoft Access, se poate administra toata informatia într-o singura baza de date (Database)?- Adevarat - Fals Folosing MSAccess se poate administra toata informatia intr-o singura baza de date ?- Adevarat - FalsA doua forma normala nu rezolva anomaliile cauzate de a. Dependentele partiale de cheia primarăb. Grupurile repetitivec. Dependentele tranzitived. Atributele multi valoaree. Relatiile de tip unu-la-mai-multi

A doua formă normală rezolvă anomaliile cauzate de a. Grupurile repetitiveb. Dependentele partiale de cheia primarăc. Grupurile repetitive si atributele multivaloared Dependentele tranzitive

A treia forma normala rezolva anomaliile cauzate de : si 4 var de raspuns a. Dependentele partiale de cheia primară b. Grupurile repetitive c. Dependentele tranzitive d. Atributele multivaloare e. Relatiile de tip unu-la-mai-multi

Atunci când se foloseste operatorul “+” , apare o eroare de tipul Type Mismatch (Nepotrivire de tip) in cazul cand a. ambii operanzi sunt valori numericeb. ambii operanzi sunt siruri de caracterec. un operand este valoare numerica si celalalt un sir de caractered. un operand este valoare numerica si celalalt de tipul date/time

Page 254: SOLUTII - Baze de Date - Adunate

Care din următoarele baze de date nu este RDBMSa. Postage SQLb. Oracle Databasec. My SQLd. Microsoft SQL Servere. Excel database

Care nu este un concept utilizat pentru a descrie formal-uzual-fizic elementele de baza ale organizarii datelora. relatie-tablou-fisierb. tuplu-linie-inregistrarec. atribut-coloana-campd. domeniu-functie-functie

Care nu este o interogare de actiune?a. cu actualizareb. cu creeare de tabelec. cu adaugare si stergered. cu parametru

Care din interogarile cu actiune pot afecta doar campuri izolate?:a. cu actualizareb.cu adaugarec.cu stergered.cu creare de tabele

Clinetii SQL oferiti de Microsoft nu sunt:a. SqLWorsheetb. sql PLUS c. iSqld. Isql PLUS

Campurile calculate intr-un raport se pot introduce in modul Design View:a. numai in banda Report Footerb. numai in banda Group Footerc. in banda de Detail,Group F.si Report F.d. numai in banda de Detail

Cind se realizeaza un table cu Report View din tabele relationale, informatiile fiind grupate pe parte one a relatiei si se opteaza pentru SUMMARY OPTION atunci:a. se introduc calculele solicitate in banda de subsol de grupb. se introduc calculele solicitate in banda de detaliu de grupc. se introduc calculele solicitate in benzile de subsol de grup de subsol de raportd. se introduc calculele solicitate in banda de detaliu de grup si subsol de grup

Cate reguli a emis Codd / Modelul relational conceput si dezvoltat de E.F. Codd cuprinde un set de a. 25 regulib. 13 regulic. 100 regulid 15 reguli

Page 255: SOLUTII - Baze de Date - Adunate

Cand operatorii AND si OR sunt combinati in aceeasi clauza WHEREa. Operatorul AND are prioritate mai mare decat operatorul OR b. Sistemul DBMS returneaza un mesaj de eroare c. Operatorul AND are prioritate mai mica decat operatorul OR d. Parantezele, sunt obligatorii

Cand operatorii AND §i OR sunt combinati in aceeasi clauza WHEREa. Sistemul SGBD returneaza un mesaj de eroareb. Operatorul AND are prioritate mai mare decat operatorul ORc. Operatorul AND are prioritate mai mica decat operatorul ORd. Parantezele, sunt obligatoriie. Parantezele sunt optionale

Componentele unei baze de date relationale NU includ :a. Relatiib. tabelec. restrictii d. diagrame ERD Componentele unei baze de date relationale nu includ:a.indexurib.tabelec.diagrame ERD d.restrictiie.relatii

<!>Criteriul de selectie se poate seta a. prin intermediul celulei TOTALS + Expression Builder b. prin intermediul celulei Criteria +Expression Builder sau prin tastarea expresiei c. prin intermediul celulei Sort + tastarea expresiei d. prin intermediul celulei TOTALS si Criteria, ambele ambele avand acelasi efect

<!>Criteriul de selectie se poate setaa. prin intermediul celulei TOTALS + Expression Builderb. prin intermediul celulei Criteria +Expression Builder sau prin tastarea expresieic. prin intermediul celulei Sort + tastarea expresieid. prin intermediul celulei TOTALS si Criteria, ambele ambele avand acelasi efect

<!>Calificatorii numelor de coloane NU :a. rezolva referintele ambigue la coloaneb. pot fi nume de tabelec. pot fi pseudonime ptr. numele de coloane, definite in clauza FROMd. pot fi pseudonime pentru numele de tabele, definite in clauza FROM

<!>Calificatorii numelor de coloane NU :a. rezolva referintele ambigue la coloaneb. pot fi nume de tabelec. pot fi pseudonime pentru numele de coloane, definite in clauza FROMd. pot fi pseudonime pentru numele de tabele, definite in clauza FROM

Page 256: SOLUTII - Baze de Date - Adunate

Daca relationarea tabelelor dintr-o interogare s-a facut prin definirea legaturilor implicite (din fereastra Relationships), atunci:a. trebuie refacute legaturile in cadrul interogariib. acestea sunt ignorate in timpul rularii interogariic. adaugarea lor intr-o interogare se face impreuna cu relatiile dintre eled. tabelele nu trebuiesc sa fie legate in interogare

Dacă tabelele dintr-o interogare nu sunt legate una de alta fie direct (în interogare), fie indirect (prin legătură implicită, din fereastra Relationship), Acces afisează a. Toate combinatiile de înregistrări (produs cartezian) dintre câmpurile tabelelor b. Numai înregistrările din prima tabelă c. Numai înregistrările din ultima tabelă d. Nu afisează nimic

Definitia unei coloane din instructiunea CREATE TABLE nu poate include a. Numele tabelului …sau [/restrictie la nivel de tabel/] b. O clauză DEFAULT c. O clauză NULL sau NOT NULL d Numele coloanei

<!>Din ferestra Relationships la apasarea butonului Join Type se poate selecta modul in care vor fi extrase datele din tabele, mod care nu poate fi:a. numai acele înregistrari în care câmpurile din legatura coincidb. toate înregistrarile din tabela principala si numai acele înregistrari din tabela corelata în care câmpurile din legatura coincid.c. toate înregistrarile din tabela corelata si numai acele înregistrari din tabela principala în care câmpurile din legatura coincid.d. toate inregistrarile din ambele tabele

<!>Din ferestra Relationships la apasarea butonului Join Type se poate selecta modul in care vor fi extrase datele din tabele, mod care nu poate fi:a. numai acele înregistrari în care câmpurile din legatura coincid b. toate înregistrarile din tabela principala si numai acele înregistrari din tabela corelata în care câmpurile din legatura coincid. c. toate înregistrarile din tabela corelata si numai acele înregistrari din tabela principala în care câmpurile din legatura coincid. d. toate inregistrarile din ambele tabele

Expresiile nu se utilizează în a. Definirea unui criteriu de selectie b. Crearea unui câmp calculat c. Actualizarea unor înregistrări într-o interogare d. Definirea proprietătii Validation Text a unei tabele

Functia AVG(Expr):a. include campuri de valoare NULL in calculb. poate fi folosita intr-o interogarec. calculeaza media geometrica a datelor din acel campd. operanzii din Expr nu pot include o functie definita de utilizator.

Page 257: SOLUTII - Baze de Date - Adunate

Functiile SQL matematice standard NU includ :-ROUND-ABS-CAST-EXP

Functia LTRIMa. Elimina spatiile de la sfarsitul sirurilor de caractereb. Elimina spatiile de la inceputul sirurilor de caracterec. Poate fi imbricata cu alte functiid. Inlocuieste valorile nule cu alte valori in sirurile de caracteree. Elimina spatiile de la inceputul si de la sfarsitul sirurilor de caractere

Integritatea referintiala este un sistem de reguli folosit de Acces pentru a se asigura ca: a. relatiile intre tabele sunt valide b. relatiile intre tabele nu se modica c. relatiile intre tabele sunt valide si ca nu se sterg sau modica accidental datele in legatura d. nu sunt definite relatii Integritatea referentială nu se poate seta atunci când a. Câmpurile în relatie au acelasii tip de date b. Tabelele nu apartin aceleasi baze de date Access c. Tabelele apar in aceleasi baze de date Access d. Câmpul în relatie din tabela principală este cheie primară sau are un index unic

In cadrul diagramei entitate-relatie (ERD) care nu este o entitate specialaa. Entitate dependentã b. Entitate tranzitivac. Subentitated. Superentitate Interogariea de tip functiea. poate calcula suma, media, numararea, minimul, maximul, varianta sau deviatia standard pentru unul sau mai multe câmpuri dintr-o tabela in linia Totals, fie pentru toate înregistrarile, fie pe unul sau mai multe grupuri de înregistrari b. poate calcula suma, media, numararea, minimul, maximul, varianta sau deviatia standard pentru unul sau mai multe câmpuri dintr-o tabela in linia Totals, numai pentru toate înregistrarile c. poate calcula suma, media, numararea, minimul, maximul, varianta sau deviatia standard pentru unul sau mai multe câmpuri dintr-o tabela in linia Totals, numai pentru pe un grup de înregistrarid. prin intermediul liniei Criteria nu pot fi afectate rezultatele calcularii. Integritatea referentială nu se poate seta atunci când a. Câmpurile în relatie au acelasii tip de date b. Tabelele nu apartin aceleasi baze de date Access c. Tabelele apar in aceleasi baze de date Access d. Câmpul în relatie din tabela principală este cheie primară sau are un index unic

Page 258: SOLUTII - Baze de Date - Adunate

Limbajul DML nu include următoarea instructiune SQL a. INSERT b. UPDATE c. SELECT …sau [/CREATE /] d. DELETE

Modelul relational NU are ca regula de integritate structurala :a. Unicitatea cheii primareb. Intregritatea entitatii.Atributele cheii primare sunt diferite de valoarea NULLc. Integritatea referiirii. O cheie externa trebuie sa corespunda unei valori a cheii primare associate. d. Integritatea referiirii. O cheie externa trebuie sa fie NULL in intregime, ori sa corespunda unei valori a cheii primare asociate

Modelul relațional conceput și dezvoltat de E.F. Codd cuprinde un set de a. 25 regulib. 13 reguli c. 100 regulid. 15 reguli Nu sunt clientii SQL oferiti de Oracle a. SQL Worksheet b. My SQL c. SQL*Plus d. iSQL*Plus

Nu se selecteaza intr-o interogarea. un singur câmp prin executarea unui click pe numele unui câmpului b. un bloc de câmpuri prin click pe primul câmp din bloc, se tine apasata tasta Shift si apoi se executa click pe ultimul câmp din blocul dorit.c. mai multor câmpuri dar nesituate intr-un bloc atunci se executa click pe fiecare dintre ele tinându-se apasata tot timpul tasta Shift d. toate cimpurile prin dublu-click pe bara de titlu a tabelei sau printr-un singur click pe asterix (*). Normalizarea nu rezolva anomalia:a. de creareb. de stergerec. de actualizared. de inserare

Nu este functie SQL matematica standard:a. ROUNDb. EXPc. ABSd. CAST

Page 259: SOLUTII - Baze de Date - Adunate

Numele unei coloane dintr-un tabel :a. Nu trebuie sa fie in baza de dateb. Nu trebuie sa fie in cadrul unui tabelc. Trebuie sa fie specificat in instructiunea ALTER TABLEd. Trebuie sa fie specificat in instructiunea CREATE TABLE …sau[/trebuie sa fie unic in cadrul tabelului/]

O interogare parametrizată este o interogare a. În care una sau mai multe valori ale criteriilor de selectie sunt specificate în mod interactive b. În care numai una dintre valorile criteriilor de selectie poate fi specificată c. Care atunci când se rulează afisează o fereastră creată de utilizator d.Care atunci când se rulează afisează o fereastră proprie în care afisează un rezultat O uniune incrucisata(cross join) a. O uniune Naturală b. N produs cartezian c. O uniune externă d. O uniune Internă O uniune (Join) fara o clauza WHERE sau o clauza JOIN a. Are ca rezultat un mesaj de eroareb. Nu returnează nici un rând din setul de rezultatec. Reprezintă o uniune externă (outer join)d. Reprezintă o uniune internă (inner join)e. Are ca rezultat un produs cartezian O uniune de egalitate(equijoin):a. este cunoscuta si sub numele de auto-uniune(slfjoin)b. este cunoscuta si sub numele de uniune externa(outerjoin)c. realizeaza intotdeauna legarea randurilor folosind o conditie de egalitate(=)d. realizeaza intotdeauna legarea randurilor folosind o conditie de inegalitate(<>) O cheie Primara nu poate fi setata: U click-dreaptape campul dorit sa fie cheie primarasi din meniul afisat se apasa Primary Key sau U se selecteaza campul respectiv si se apasa butonul de Primary Key meniul Design View,U se deschide fereastra de definire a unui index caruia i se adreseaza proprietatea Primary la Yes.a. cu click dreapta pe campul dorit sa fie cheie primara si din meniul afisat se apasa Primary Key.b. daca se deschide fereastra de definire a unui index si se creeaza un index caruia i se seteaza proprietatea Primary la Yes.c. din FieldProprerties,Indexed,Yes(No Duplicates)d. daca se selecteaza campul respectiv si se apasa butonul de Primary Key din meniul Design View.

O interogare incrucisata (Crosstab) este realizata dintr-o o interogare de selectie, din care se poate alegea. toate campurile interogariib. cel mult 3 campuri pentru antet de linii, un camp pentru antet coloana si o functie aplicata valorilor dintr-un campc. cal putin 3 campuri pentru antet de linii, si mai multe campuri entru antet coloana si o functie aplicata valorilor dintr-un cimpd. nu se poate realiza astfel de interogari

Page 260: SOLUTII - Baze de Date - Adunate

O forma (sau formular) reprezinta modalitatea de aa. modifica date numai dintr-o singura tabelab. modifica, adauga, sterge date din mai multe tabelec. modifica date dintr-o singura interogared. modifica date dintr-o interogare si un tabel

O baza de date estea. O colectie de date interrelationate gestionate ca o singura unitateb. Un produs software furnizat de un producator de baze de datec. O structura de date, cum ar fi un tabel, o vizualizare sau un indexd. Definita in acelasi mod de toti producatorii de software

O forma nu poate fi creataa. pe baza unei interogari de actiuneb. pe baza unui tabelc. pe baza unei interogarid. pe baza mai multor tabele O forma (sau formular) reprezinta modalitatea de aa. modifica date numai dintr-o singura tabelab. modifica, adauga, sterge date din mai multe tabelec. modifica date dintr-o singura interogared. modifica date dintr-o interogare si un tabel O cheie Primara nu poate fi setata: a. cu click dreapta pe campul dorit sa fie cheie primara si din meniul afisat se apasa Primary Key.b. daca se deschide fereastra de definire a unui index si se creeaza un index caruia i se seteaza proprietatea Primary la Yes.c. din FieldProprerties,Indexed,Yes(No Duplicates)d. daca se selecteaza campul respectiv si se apasa butonul de Primary Key din meniul Design View. O uniune de egalitate(equijoin):a. este cunoscuta si sub numele de auto-uniune(slfjoin)b. este cunoscuta si sub numele de uniune externa(outerjoin)c. realizeaza intotdeauna legarea randurilor folosind o conditie de egalitate(=)d. realizeaza intotdeauna legarea randurilor folosind o conditie de inegalitate(<>)

O clauza JOIN folosind cuvantul cheie USINGa. Nu poate fi folosita atunci cand coloanele prin care se face legarea tabelelor au aceleasi numeb. Nu poate fi folosita atunci cand coloanele prin care se face legarea tabelelor au nume diferitec. Defineste o uniune externad. Defineste o auto-uniune

O interogare cu stergere (Delete Query) poate:a. sterge doar cimpurile izolateb. sterge un grup de inregistrari dintr-un tabelc. sterge un grup de inregistrari dintr-un table sau din mai multe tabele legate intr-o relatie unu-la- mai- multi daca stergerile in cascada sunt actived. sterge o inregistrare dintr-un tabel la un moment dat

Page 261: SOLUTII - Baze de Date - Adunate

Operatorul + genereaza eroarea Type Mismatch atunci cand a. ambii operanzi sunt siruri de caractereb. ambii operanzi sunt numerec. un operator este numar si unul sir de caractered. un operator este numar si unul data

O interogare incrucisata (Crosstab) este realizata dintr-o interogare de selectie din care se poate alege:a. toate campurile interogatoriib. cel mult 3 campuri pt. antet de linii,un camp pt. antet coloana si o functie aplicata valorilor dintr-un camp.c. cel putin 3 campuri pt. antet de linii si mai multe campuri penru antet coloana si o functie aplicata valorilor dintr-un camp.d. nu se poate realiza astfel de interogari.

O instructiune UPDATE trebuie sa includa:a. o clauza WHEREb. o clauza SET c. o clauza SELECTd. o clauza INSERT

O interogare parametrizata este o interogarea. in care una sau mai multe valori ale criteriilor de selectie sunt specificate in mod interactivb. in care numai una dintre valorile criteriilor de selectie poate fi specificatac. care atunci cand se ruleaza afiseaza o fereastra creata de utilizatord. care atunci cand se ruleaza afiseaza o fereastra proprie in care afiseaza un rezultat

O forma (formulare) reprezinta modalitatea de a:a. modifica date numai dintr-o singura tabela b. modifica, adauga, sterge date din mai multe tabelec. modifica date dintr-o singura interogared. modifica date dintr-o interogare si un tabel

O interogare MakeQuery nu realizeaza:a. Realizarea unei copii de siguranta a unei tabeleb. Schimbarea ordinii inregistrarilor dintr-o tabelac. Crearea unei tabele pentru exportul intr-o alta baza de date MS Accessd. Crearea unei tabele ce va contine numai inregistrari vechi

<!>O interogare cu actiune este o interogare care realizeaza modificari asupra:a. unei singure inregistrari dintr-un tableb. asupra mai multor inregistrari din una sau mai multe tabelec. unei singure tabele la un moment datd. mai multor tabele la un moment dat

<!>O interogare cu actiune este o interogare care realizeaza modificari asupra:a. unei singure inregistrari dintr-un tableb. asupra mai multor inregistrari din una sau mai multe tabelec. unei singure tabele la un moment datd. mai multor tabele la un moment dat

Page 262: SOLUTII - Baze de Date - Adunate

Operatorul BETWEENa. Specifică un domeniu de valori care include si capeteleb. Poate fi rescris folosind operatorii <= si NOT <=c. Selectează rândurile adăugate în tabel într-un anumit interval de timpd. Nu este inclus în standardul ISO/ANSI

Proprietatea Format se foloseste pt:a. a seta modul in care campurile de tip text sunt afisateb. a stoca datele intr-un anumit format c. a seta modul in care campul de tip numar sunt tiparited. a seta modul in care datele sunt afisate si tiparite

Proprietatea de Indexare (Indexed)a. seteaza un index pe un singur cimpb. creaza si seteaza un index pe un cimp al unei tabelec. se foloseste pentru a mari viteza de interogare a unei tabele pe unul sau mai multe campuri d. afecteaza ordinea de stocare (ordinea fizica) a inregistrarilor

Pentru a crea un raport utilizând generatorul (Report Wizard) avem planul general cu optiunea implicita a. Columnarb. Tabularc. Justified

Pentru a introduce câmpuri calculate într-un raport se foloseşte elemente din bara toolboxa. Label Box Aab. Text Box abc. Checkd. Combo Box

Pentru aducerea in prima forma normala a unei relatii ne-normalizate se operatie nu se efectueaza ?a. Grupurile repetitive sunt mutate intr-o noua relatieb. Atributele multivaloare sunt mutate intr-o noua relatiec. Atributele care sunt dependente tranzitiv sunt eliminated. Identificatorul unic al unei relatii originale este copiat in noua relatie

Pentru a specifica criterii de selectii pentru o interogare, acestea nu se faca. numai pentru un campb. pentru mai multe campuri, daca expresiile pentru criteriile de selectie sunt pe aceeasi linie in tabelul de design, cand Access foloseste operatorul And, adica vor fi returnate numai inregistratile ce indeplinesc toate criteriilec. pentru mai multe campuri, daca expresiile pentru criteriile de selectie sunt in linii diferite ale tabelului de design, cand Access foloseste operatorul Or, adica vor fi returnate numai inregistratile ce indeplinesc cel putin unul din criteriile de selectied. in celula TOTALS a tabelului de design

Problemele de dependenta partiala nu:a. sunt rezolvate de a 2 forma normalab. sunt rezolvate de a 3 forma normalac. apar atunci cand un atribut non-cheie depinde doar de o parte a cheii primared. pot aparea numai in relatii cu chei primare concatenate

Page 263: SOLUTII - Baze de Date - Adunate

Pentru realizarea unei interogari cu actualizare nu se efectueaza pasul:a. se creeeaza o interogare b. se adauga tabelele si se selecteaza campurile ce se doresc actualizatec. se stabilesc criteriile de selectie pt acestea,daca exista atunci se apasa butonul Update Query din meniul Query Type din Toolbard. in celula Update To …(aici cred ca e incompleta)

Problemele de dependenta partiala nu:a. sunt rezolvate de a 2 forma normalab. sunt rezolvate de a 3 forma normalac. apar atunci cand un atribut non-cheie depinde doar de o parte a cheii primared. pot aparea numai in relatii cu chei primare concatenate Pentru realizarea unei interogari cu actualizare nu se efectueaza pasul:a. se creeeaza o interogare b. se adauga tabelele si se selecteaza campurile ce se doresc actualizatec. se stabilesc criteriile de selectie pt acestea,daca exista atunci se apasa butonul Update Query din meniul Query Type din Toolbard. in celula Update To (aici cred ca e incompleta) Pentru a introduce câmpuri calculate într-un raport se foloseste din bara toolbox:a. Label Box Aab. Text Box abc. Checkd. Combo Box

Prima forma normala rezolva anomaliile cauzate dea. Grupurile repetitive si atributele multivaloare b. Dependentele partiale de cheia primara c. Dependentele tranzitive d. Relatiile de tip unu-la-mai-multi

Pentru a specifica criterii de selctie pentru o interogare, aceste nu se faca. numai pentru un cimp b. penrtru mai multe cimpuri, daca expresiile pentru criteriile de selectie sunt pe aceeasi linie în tabelul de design, cand Access foloseste operatorul And, adica vor fi returnate numai înregistrarile ce îndeplinesc toate criteriile. c. pentru mai multe criterii pe acelasi camp, expresiile sunt în linii diferite ale tabelului de deisgn cand Access foloseste operatorul Or, adica vor fi returnate acele înregistrari ce îndeplinesc cel putin unul dintre criteriile de selectie. d. in celula TOTALS a tabelului design Relatia m:n devine in modelul relational:a. tabel asociativ cu cheia primara formata din 2 chei externe pt. cele 2 tabele asociateb. tabel asociativ cu cheia primara formata din 2 chei externe pt. cele 2 tabele asociate plus eventuale coloane aditionalec. chei externed. entitate independenta

Page 264: SOLUTII - Baze de Date - Adunate

Sintaxa corectă pentru o restricţie NOT NULL este a. nume_coloană tip-de-date IS NOT NULLb. nume_coloană tip_de_date NOT NULLc. DEFAULT [NULL | NOT NULL]d. CREATE NOT NULL INDEX ON nume_coloană

Sintaxa corecta pentru o restrictie referentiala estea. [CONSTRAINT nume—restrictie] REFERENCES nume_indexb. [CONSTRAINT nume—restrictie] REFERENCES nume_tabelc. FOREIGN KEY nume_coloana REFERENCES nume_tabel (nume_coloana)d. REFERENCES nume—tabel (nume_coloana)

Sintaxa corecta pentru eliminarea valorilor nule din rezultatele interogarii estea. = NULLb. NOT = NULLc. <>NULLd. IS NULLe. IS NOT NULL

SQL NU este:a. Un limbaj procedural b. Un limbaj nonproceduralc. Un limbaj declarativd. Un limbaj standard Tipurile numerice standard nu includ:a. INTEGERb. FLOATc. INTERVAL d. BIGINT

Textul de validare se folosestea. pentru a valida datele dintr-un cimp b. impreuna cu Regula de Validare (Validation Rule) si reprezinta mesajul afisat la incalcarea regulei de validare c. impreuna cu Regula de Validare (Validation Rule) si reprezinta mesajul afisat daca nu se incalca regula de validare d. pentru a valida datele dintr-o inregistrare

Un model de date reprezinta o colectie integrata de concepte care nu descriu:a. dateb. relatii dintre datec. date despre echipa realizatoare a modeluluid. constrangeri existente asupra datelor sistemului real analizat

Un obiect al bazei de date estea. O structura denumita de date, cum ar fi un tabel, o vizualizare sau un index b. Un produs software furnizat de un producator de baze de datec. O colectie de date interrelationale gestionate ca o singura unitated. O colectie de inregistrari inrudite, stocate ca o singura unitate

Page 265: SOLUTII - Baze de Date - Adunate

Un sistem de gestionare a bazelor de date, abreviat sub forma DBMS sau RDBMS sau SGBD estea. o colectie de inregistrari inrudite, stocate ca o singura unitateb. o colectie de date interrelationate gestionate ca o singura unitatec. o structura de date, cum ar fi un tabel, o vizualizare sau un indexd. un produs software furnizat de un producator de baze de date

Un sistem de gestionare a bazelor de date :a. o structura cum ar fi un tabel b. o colectie de date interrelationate c. un produs softwer furnizat de un producator d. o structura denumita date , cum ar fi un tabel Un câmp calculat într-o interogare a. Se efectuează pe fiecare înregistrare folosind numai un câmp b. Afisează rezultatul unei expresii si valoarea este recalculată de fiecare dată când o valoare din exprese se schimbă c. Se pot folosi numai la afisarea unor rezultate d. Se pot folosi numai la definirea unor criterii de selectie sau pentru a determina asupra căror înregistrări să se execute o actiune

Valorile NULLa. pot fi folosite pentru reprezentarea datelor care lipsesc sau care nu sunt cunoscuteb. înseamnă acelaşi lucru ca şi spaţiile liberec. sunt egale cu alte valori NULLd. sunt întotdeauna permise în mod prestabilit Un identificator unic (cheie) poate fi compus...- am raspuns : poate fi compus din mai multe atribute concatenate

Pentru realizarea unor interogari grupate...- am raspuns: se realizeaza o interogare de selectie din tabelele dorite si se selecteaza pentru anumite campuri o functie de celula Total. Daca integritatea referentiala este setata:- am raspuns: nu se poate valoarea unei chei primare in tabela principala, daca acea inregistrare are inregistrari corelate in tabela secuindara.

Functia NOW() intoarce:- am raspuns: data si timpul exact conform cu data si ora sistemului

Prin operatia Export se poate- am raspuns: exporta dintr-o baza de date access intr-o alta baza de date access

Proprietatea Format se foloseste pentru- am raspuns: a seta modalitatea in care datele sunt afisate si tiparite

Daca integritatea referentiala este setata- am raspuns: nu se poate schimba valoarea unei chei primare

Page 266: SOLUTII - Baze de Date - Adunate

In meniul Tools ce apartine database Utilities nu exista- am raspuns: memo

Problemele de dependenta partiala Nu- am raspuns: sunt rezolvate de FN3

Relatia m:n devine in mod relational- am raspuns: tabel asociativ in care o inregistrare din A poate avea mai multe in B si invers

Pentru a crea un raport utilizand report Wizard avem planul general cu optiunea implicita- am raspuns: tabular

O instructiune Alter Table nu poate fi folosita pentru- am raspuns: redenumirea unei coloane

DDL nu include urmatoarea instructiune- am raspuns: DELETE

Un identificator unic (o cheie primara)- am raspuns: poate fi compus dintr-un singur atribut

O interogare cu stergere (Delete Query) - am raspuns : sterge un grup de inregistrari dintr-un tabel sau din mai multe tabele legate printr-o relatie unu la mai multi daca stergerile in cascada sunt active.

Componentele unei baze de date relationale nu includ - am raspuns : diagrame ERD

O uniune fara clauza WHERE sau o clauza Join - am raspuns are ca rezultat un produs cartezian

Operatorul BETWEENa. Specifică un domeniu de valori care include si capeteleb. Poate fi rescris folosind operatorii <= si NOT <=c. Selectează rândurile adăugate în tabel într-un anumit interval de timpd. Nu este inclus în standardul ISO/ANSI

O instructiune DELETE nua. Poate include o listă optională de coloaneb. Poate include o clauză WHERE optionalăc. Nu poate încălca restrictiile referentiale ale tabeluluid. Poate avea o instructiune SELECT internă, ca parte a clauzei WHERE Functiile SQL standar pt.siruri de caractere NU includ - Upper-LOWER-...-LIKE - raspuns LIKE

Page 267: SOLUTII - Baze de Date - Adunate

Care este secvenţa corectă pentru a şterge toate înregistrările tabelului TOTALURI- DELETE FROM TOTALURI

Access permite crearea unor relaţii logice sub forma unor legări între tabele- temporale (la nivelul interogărilor) şi implicite (din fereastra Relationships)

O interogare cu creare de tabele (Make-tables Query) nu realizează- crearea unor tabele pentru exportul într-o bază de date MS Access

Pentru realizarea unor interogări grupate- se selectează pentru toate câmpurile o funcţie în celula Totals

Un obiect al unei baze de date este- o structură, cum ar fi un tabel, o vizualizare sau un index

Pasii pentru conversia unei baze de date NU sunt: - deschiderea bazei ce urmeaza a fi convertita

O instructiune SELECT fara o clauza WHERE- va selecta toate randurile din tabel sau vizualizare

Instructiune SQL prin care se cerea sa se stearga toti profesorii din tabel. - DELETE profesori FROM tabel

table cod fac, denumire adresacare este secventa corecta pentru o inserare folosind instructiunea SELECT -INSERT INTO FAC(COD_FAC, DENUMIRE, ADRESA)SELECT VALUES(MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA'); -INSERT INTO FACSELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA'FROM FAC; -INSERT INTO FAC(COD_FAC, DENUMIRE, ADRESA)SELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA'FROM FAC;

table prof cod fac, cod prof,nume, prenume, salariu, cod functiecare este secventa corecta , pentru a modifica functia si salariu prof cu (cod_fac=2 cod_prof=1) din lector(cod_funct=3, salariu 2000) la conferentiar(cod_funct=4, salriu=3000)?-UPDATE PROF SET COD_FUNCT=4, SALARIU=3000WHERE COD_FAC=2 AND COD_PROF=1; -UPDATE PROF SELECT COD_FUNCT=4, SALARIU=3000WHERE COD_FAC=2 AND COD_PROF=1; -UPDATE PROF SET COD_FAC=2 AND COD_PROF=1WHERE COD_FUNCT=4, SALARIU=3000;

Page 268: SOLUTII - Baze de Date - Adunate

2 tabele a. ca cel de la nr 12 b.functiicod functii, den functiicare este secventa corecta pentru o subinterogare necorelata, care sa afiseze toate functiile pentru care nu exista profesorii incadrati-SELECT cod_funct, nume_functFROM functiiWHERE cod_funct NOT IN(SELECT DISTINCT cod_funct FROM prof)-SELECT cod_funct, nume_functFROM functii WHERE cod_funct NOT INSELECT DISTINCT cod_funct FROM prof-SELECT cod_funct, nume_functFROM functiiWHERE cod_funct IN(SELECT cod_funct FROM prof);

Pt. tabelul:PROF cod_fac# cod_prof# nume prenume salariucare este secvența corectă pt. a insera o înregistrare:• INSERT INTO PROF VALUES (4, 3, ’POPA’, ’DAN’, 1234)• INSERT INTO PROF VALUES (4, 5, POPA, DAN, 1234)• INSERT INTO PROF (cod_prof, nume, prenume, salariu) VALUES (4, 3, ’POPA’, ’DAN’, 1234)

Pt. tabelul:PROF cod_fac# cod_prof# nume prenume salariucare este secvența corectă pt. a afișa toate facultățile pt. care COD_FAC=1 și salariu>=1200, sau facultățile pt. care COD_FAC=3 și salariu<2000• SELECT COD_FAC, COD_PROF, NUME, SALARIU, FROM PROF WHERE (COD_FAC=1 AND SALARIU>1200) OR (COD_FAC=3 AND SALARIU<2000)Au mai fost 3 variante asemănătoare unde erau înlocuite AND cu OR

Care nu sunt instructiuni SQL?Limbajul dc replicare a datelor (DRL - Dala Replication Language)

Limbajul de manipulare a datelor (DML - Data Manipulation Language) NU include: CREATE Tipurile de date temporale standard NU includTIMEZONE

Text boxurile unei forme create automat sint legate direct la mai multe tabele astfel incit orice modificare adusa valorilor din ele se transmite..

O interogare SQL din care trebuie selectati din tabelul PROF profesorii care au codul facultatii (COD_FAC) egal cu 8a. SELECT FROM PROF WHERE COD_FAC=8;b. SELECT FROM PROF WHERE COD_FAC<>8;c. SELECT FROM PROF WHERE COD_FAC IS 8; (asa imi aduc aminte aici, dar daca nu era IS era tot o balarie)

Page 269: SOLUTII - Baze de Date - Adunate

Pentru tabelul PROF Cod_fac# | Cod_prof# | Nume | Pren | SalariuCare este secventa corecta pentru a modifica salariile cu 10%, care nu contin valori NULL?a. UPDATE PROF SET SALARIU = SALARIU*1.1WHERE SALARIU NOT NULL;b. UPDATE PROF SET SALARIU = SALARIU*1.1WHERE SALARIU IS NOT NULLc. UPDATE PROF SELECT SALARIU = SALARIU*1.1WHERE SALARIU <> 0;

O cheie primara (Primary Key) reprezinta un mod unic de identificare a unei înregistrari într-o tabela. a. nu este un index b. este un idex creat numai pe un cimp c. este un idex creat pe minimum doua cimpuri

Dacă tabelele dintr-o interogare nu sunt legate una de alta fie direct (în interogare), fie indirect (prin legătură implicită, din fereastra Relationship), Acces afișează• Toate combinațiile de înregistrări (produs cartezian) dintre câmpurile tabelelor• Numai înregistrările din prima tabelă• Numai înregistrările din ultima tabelă• Nu afișează nimic

Textul de validare se folosesteRaspuns: impreuna cu Regula de Validare si reprezinta mesajul afisat la incalcarea regulei de validate

Numerele stocate in campuri nenumerice ale unei interogari sunt stocateRaspuns: ca siruri de caractere (celelalte variante erau ca siruri numerice, se pune in fata 0 pt numerele mici si nu se accepta sortarea)

Un camp calculat intr-o interogareRaspuns: afiseaza rezultatul unei expresii si valoarea este recalculata de fiecare data cand o valoare din expresie se schimba)

Pentru aducerea in prima forma normala a unei relatii ne-normalizate ce operatie nu se efectueazaRaspuns: nu mai tin minte cum era formulat ceva despre atribute dependent tranzitive, oricum era singurul care nu avea legatura cu FN1

O insctructiune SELECT fara o clauza WHERERaspuns: selecteaza toate randurile din tabel sau vizualizare

Tabelul PROF cu coloanele cod_fac, cod_prof, nume, ore, salariu se intreba care este secventa corecta pentru a afisa suma salariilor tuturor profesorilor (de la toate facultatile)Raspuns: SELECT SUM(salariu) AS TotalSalariiFROM PROFGROUP BY

Page 270: SOLUTII - Baze de Date - Adunate

Se dadea tabelul FAC cu campurile cod_fac, denumire si adresa si se intreba care este varianta corecta pentru introducerea unei noi inregistrariRaspuns: INSERT INTO FAC(cod_fac, denumire, adresa)SELECT VALUES (MAX(cod_fac)+1, 'o demunire', 'o adresa');

Utilizarile valide ale instructiunii ALTER TABLE nu includeRaspuns: Redenumirea unui tabel

Operatorul LIKERaspuns: Foloseste caracterul procent drept caracter de inlocuire nepozitional

O interogare SQL prin care se solicita afisarea rotunjirii mediei salariilor profesorilor, cu 2 zecimale, grupat dupa facultati.Aici a fost ceva ciudat. O varianta era cu SORTED BY, una era cu expresia numerica fara o paranteza si 2 erau identice, si aici ma refer la semne de punctuatie, paranteze, spatii, etc.Aceste 2 variante identice aveau si formatul corect din punctul meu de vedere:SELECT ROUND(AVG(expresie numerica),2)AS salariiFROM prof GROUP BY COD_FAC;

Care nu este un concept utilizat pentru a descrie formal-uzual-fizic elementele de baza ale organizarii datelor:raspuns: domeniu- functie-functieUn sistem de gestiune al bazelor de date este:raspuns : un produs software furnizat de un producator de baze de date Numerele stocate in campuri nenumerice ale unei interogari sunt sortate:raspuns: ca siruri de caractereCare nu este restrictie (Tipuri de restrictii)raspuns: relatie ( mai erau variantele primary key, not null, check)Functia NOW() ...raspuns: returneaza data si ora sistemuluiEliminarea valorilor nule ...raspuns: IS NOT NULL57. Instructiunile SQL ....raspuns: incep cu un cuvant cheie si se termina cu caracterul;58. Intr-un aranjament client server:raspuns: componentele soft ale clientului SQL ruleaza pe client O auto-uniune:raspuns: autouniunea foloseste un singur tabelextensiile procedurale ale limbajului sql includ:java,c++,php, oracle pl/sqlpt tabelul ... raspuns INSERT INTO PROF(cod_prof nume, prenume, salariu) NAMES (4,3,POPA,DAN,1234)nu este functie sql standard pt siruri de caractere:upper, lenght, lower, like

pt tabelul... raspuns SELECT DISTINCT DENUMIRE FROM FAC WHERE 1000<(SELECT sum(salariu)

O uniune join --combina coloanele din doua sau mai multe tabele in rezultatul unei singure interogari

Page 271: SOLUTII - Baze de Date - Adunate

un sistem dbms nu ofera serviciul- - mecanisme de securitate

un index poate fi creat pe urmat tipuri-- text number, currency sau date and time

daca relationarea tabelelor dintr-o interogare s-a facut prin definirea legaturilor implicite atunci:- adaugarea lor intr-o interogare se face impreuna cu relatiile dintre eleinterogarea cu stergere sterge.. daca stergerile in cascada sint active prin operatia de import nu se pot introduce in baza de date - tabele de informare din baze de date in versiuni mai vechi..prima forma normala rezolva anomaliile- grupuri repetitive si atribute multivaloareintegritatea referentiala este un sistem de reguli folosit de acces pt a se asigura ca :relatiile intre tabele sint validecare nu este un concept utilizat pt a descrie formal- uzual- fizic - domeniu-functie- functietext boxurile unei forme create automat - sint legate direct la mai multe tabele astfel incit orice modificare adusa valorilor din ele se transmite..

Numerele stocate in campuri nenumerice ale unei interogari sunt sortate:a.ca siruri de caractere Pentru realizarea unei interogari cu actualizare nu se efectueaza pasul:a)se creeeaza o interogareb)se adauga tabelele si se selecteaza campurile ce se doresc actualizatec)se stabilesc criteriile de selectie pt acestea,daca exista atunci se apasa butonul Update Query din meniul Query Type din Toolbard) NU.......(aici este o varianta de raspuns care incepe cu NU...si aceasta este cea corecta )

Tabelul PROF cu coloanele cod_fac, cod_prof, nume, ore, salariu se intreba care este secventa corecta pentru a afisa suma salariilor tuturor profesorilor :SELECT SUM(salariu) AS TotalSalarii FROM PROF

Intr-un aranjament client/server NU : (componentele softwer DBMS ruleaza pe un client )

Definitia unei coloane din instructiunea CREATE TABEL NU poate include :Numele tabelului

O uniune Join fara o clauza WHERE sau o clauza JOIN:Are ca rezultat un produs cartezian

Dacă o tabelă din baza de date cerută care a fost legată de o tabelă externă, se şterg- se şterge şi legătura sa, nu însă şi fişierul extern de care a fost legat

Page 272: SOLUTII - Baze de Date - Adunate

1. SQL a. Poate fi pronuntat ca literele SQL (es-q-el) b. Poate fi pronuntat ca cuvantul englezesc ,,sequel,, c. Poate fi folosit pentru redactarea paginilor web d. Poate fi folosit pentru comunicarea cu orice baza e. Poate fi flolosit pentru comunicarea cu bazele de date relationale A, B, C, E 2. Extensiile procedurale ale limbajului SQL include a. Java b. Oracle c. C++ d. Microsoft Transact-SQL e. FORTRAN B, D 3. Limbajul SQL a fost dezvoltat initial a. De IBM b. De ANSI c. In 1982 d. In anii `70 e. Pe baza standardelor ANSI A, D 4. Printe standardele SQL se numara a. SQL-88 b. SQL-89 c. SQL-92 d. SQL-99 e. SQL:2003 B, C, D, E "5. Limbajul de manipulare a datelor (DML-Data Manipulation Language) include instructiuni: a. SELECT b. INSERT c. CREATE d. ALTER e. DELETE" B,E

Page 273: SOLUTII - Baze de Date - Adunate

1.Functia pentru valori nule a. Se numeste NVL in bazele de date Oracle b. Se numeste ISNULL in bazele de date IBM DB2 c. Se numeste ISNULL in bazele de date Microsoft SQL Seever d. Se numeste ISNULL in bazele de date MySQL e. SE numeste IFNULL in standardul SQL A, C 2. Functiile pentru data si ora a. Sunt foarte asemanatoare intre implementarile diferitilor producatori b. Difera foarte mult intre implementarile diferitilor producatori c. Include functii care formateaza data si ora d. Include functii care transforma siruri de caractere in data si ora e. Include functii care transforma data si ora in siruri de caractere B, C, D, E

Page 274: SOLUTII - Baze de Date - Adunate

O baza de date este a. O colectie de date interrelationate gestionate ca o singura unitate b. Un produs software furnizat de un producator de baze de date c. O structura de date, cum ar fi un tabel, o vizualizare sau un index d. Definita in acelasi mod de toti producatorii de software In cadrul diagramei entitate-relatie (ERD) care nu este o entitate speciala a. Entitate dependentã b. Entitate tranzitiva c. Subentitate d. Superentitate Proprietatea Format se foloseste pentru a. a seta modalitatea in care campurile de tip text sunt afisate b. a stoca datele intr-un anumit format c. a seta modalitatea in care campurile de tip numere sunt tiparite d. a seta modalitatea in care datele sunt afisate si tiparite Proprietatea de Indexare (Indexed) a. seteaza un index pe un singur cimp b. creaza si seteaza un index pe un cimp al unei tabele c. se foloseste pentru a mari viteza de interogare a unei tabele pe unul sau mai multe campuri d. afecteaza ordinea de stocare (ordinea fizica) a inregistrarilor Nu se selecteaza intr-o interogare a. un singur câmp prin executarea unui click pe numele unui câmpului b. un bloc de câmpuri prin click pe primul câmp din bloc, se tine apasata tasta Shift si apoi se executa click pe ultimul câmp din blocul dorit. c. mai multor câmpuri dar nesituate intr-un bloc atunci se executa click pe fiecare dintre ele tinându-se apasata tot timpul tasta Shift d. toate cimpurile prin dublu-click pe bara de titlu a tabelei sau printr-un singur click pe asterix (*). O interogare parametrizata este o interogare a. in care una sau mai multe valori ale criteriilor de selectie sunt specificate in mod interactiv b. in care numai una dintre valorile criteriilor de selectie poate fi specificata c. care atunci cand se ruleaza afiseaza o fereastra creata de utilizator d. care atunci cand se ruleaza afiseaza o fereastra proprie in care afiseaza un rezultat Interogarea de tip functie a. poate calcula suma, media, numararea, minimul, maximul, varianta sau deviatia standard pentru unul sau mai multe câmpuri dintr-o tabela in linia Totals, fie pentru toate inregistrarile, fie pe unul sau mai multe grupuri de inregistrari

Page 275: SOLUTII - Baze de Date - Adunate

b. poate calcula suma, media, numararea, minimul, maximul, varianta sau deviatia standard pentru unul sau mai multe câmpuri dintr-o tabela in linia Totals, numai pentru toate inregistrarile c. poate calcula suma, media, numararea, minimul, maximul, varianta sau deviatia standard pentru unul sau mai multe câmpuri dintr-o tabela in linia Totals, numai pentru pe un grup de inregistrari d. prin intermediul liniei Criteria nu pot fi afectate rezultatele calcularii. Atunci când se foloseste operatorul “+” , apare o eroare de tipul Type Mismatch (Nepotrivire de tip) in cazul cand a. ambii operanzi sunt valori numerice b. ambii operanzi sunt siruri de caractere c. un operand este valoare numerica si celalalt un sir de caractere d. un operand este valoare numerica si celalalt de tipul date/time Daca tabelele dintr-o interogare nu sunt legate una de alta fie direct (in interogare), fie indirect (prin legatura implicita, fie din fereastra Relationships), Access afiseaza a. toate combinatiile de inregistrari (produs cartezian) dintre câmpurile tabelelor b. numai inregistrarile din prima tabela c. numai inregistrarile din ultima tabela d. nu afiseaza nimic Daca relationarea tabelelor dintr-o interogare s-a facut prin definirea legaturilor implicite (din fereastra Relationships), atunci a. trebuiesc refacute legaturile in cadrul interogarii b. acestea sunt ignorate in timpul rularii interogarii c. adaugarea lor intr-o interogare se face impreuna cu relatiile dintre ele d. tabelel nu trebuiesc sa fie legate in interogare Integritatea referintiala este un sistem de reguli folosit de Acces pentru a se asigura ca: a. relatiile intre tabele sunt valide b. relatiile intre tabele nu se modica c. relatiile intre tabele sunt valide si ca nu se sterg sau modica accidental datele in legatura d. nu sunt definite relatii Pentru a crea un raport utilizând generatorul (Report Wizard) avem planul general cu optiunea implicita a. Columnar b. Tabular c. Justified O interogare incrucisata (Crosstab) este realizata dintr-o o interogare de selectie, din care se poate alege a. toate campurile interogarii

Page 276: SOLUTII - Baze de Date - Adunate

b. cel mult 3 campuri pentru antet de linii, un camp pentru antet coloana si o functie aplicata valorilor dintr-un camp c. cal putin 3 campuri pentru antet de linii, si mai multe campuri entru antet coloana si o functie aplicata valorilor dintr-un cimp d. nu se poate realiza astfel de interogari Pentru tabelul PROF Cod_fac# | Cod_prof# | Nume | Pren | Salariu Care este secventa corecta pentru a modifica salariile cu 10%, care nu contin valori NULL? a. UPDATE PROF SET SALARIU = SALARIU*1.1 WHERE SALARIU NOT NULL; b. UPDATE PROF SET SALARIU = SALARIU*1.1 WHERE SALARIU IS NOT NULL c. UPDATE PROF SELECT SALARIU = SALARIU*1.1 WHERE SALARIU <> 0; Răspunsurile acestea sunt 100% corecte.

Page 277: SOLUTII - Baze de Date - Adunate

O baza de date este a. O colectie de date interrelationate gestionate ca o singura unitate b. Un produs software furnizat de un producator de baze de date c. O structura de date, cum ar fi un tabel, o vizualizare sau un index d. Definita in acelasi mod de toti producatorii de software O interogare parametrizata este o interogare a. in care una sau mai multe valori ale criteriilor de selectie sunt specificate in mod interactiv b. in care numai una dintre valorile criteriilor de selectie poate fi specificata c. care atunci cand se ruleaza afiseaza o fereastra creata de utilizator d. care atunci cand se ruleaza afiseaza o fereastra proprie in care afiseaza un rezultat Atunci când se foloseste operatorul “+” , apare o eroare de tipul Type Mismatch (Nepotrivire de tip) in cazul cand a. ambii operanzi sunt valori numerice b. ambii operanzi sunt siruri de caractere c. un operand este valoare numerica si celalalt un sir de caractere d. un operand este valoare numerica si celalalt de tipul date/time Pentru a crea un raport utilizând generatorul (Report Wizard) avem planul general cu optiunea implicita a. Columnar b. Tabular c. Justified O interogare incrucisata (Crosstab) este realizata dintr-o o interogare de selectie, din care se poate alege a. toate campurile interogarii b. cel mult 3 campuri pentru antet de linii, un camp pentru antet coloana si o functie aplicata valorilor dintr-un camp c. cal putin 3 campuri pentru antet de linii, si mai multe campuri entru antet coloana si o functie aplicata valorilor dintr-un cimp d. nu se poate realiza astfel de interogari O forma (sau formular) reprezinta modalitatea de a a. modifica date numai dintr-o singura tabela b. modifica, adauga, sterge date din mai multe tabele c. modifica date dintr-o singura interogare d. modifica date dintr-o interogare si un tabel Numerele stocate in campuri nenumerice ale unei interogari sunt sortate: a.ca siruri de caractere (acesta este rsp corect restu variantelor nu le mai tin minte...mai erau cu valori numerice) Pt realizarea unei interogari cu actualizare nu se efectueaza pasul: a)se creeeaza o interogare

Page 278: SOLUTII - Baze de Date - Adunate

b)se adauga tabelele si se selecteaza campurile ce se doresc actualizate c)se stabilesc criteriile de selectie pt acestea,daca exista atunci se apasa butonul Update Query din meniul Query Type din Toolbar d) NU.......(aici este o varianta de raspuns care incepe cu NU...si aceasta este cea corecta ) Cind se realizeaza un table cu Report View din tabele relationale, informatiile fiind grupate pe parte one a relatiei si se opteaza pentru SUMMARY OPTION atunci: a. se introduc calculele solicitate in banda de subsol de grup b. se introduc calculele solicitate in banda de detaliu de grup c. se introduc calculele solicitate in benzile de subsol de grup de subsol de raport d. se introduc calculele solicitate in banda de detaliu de grup si subsol de grup O clauza JOIN folosind cuvantul cheie USING -Nu poate fi folosita atunci cand coloanele prin care se face legarea tabelelor au aceleasi nume -Nu poate fi folosita atunci cand coloanele prin care se face legarea tabelelor au nume diferite -Defineste o uniune externa -Defineste o auto-uniune Care baze nu este RDBMS a.Postage SQL b.Oracle database c.MySQL d.Microsoft SQL Server e.Excel database Din ferestra Relationships la apasarea butonului Join Type se poate selecta modul in care vor fi extrase datele din tabele, mod care nu poate fi: -numai acele înregistrari în care câmpurile din legatura coincid -toate înregistrarile din tabela principala si numai acele înregistrari din tabela corelata în care câmpurile din legatura coincid. -toate înregistrarile din tabela corelata si numai acele înregistrari din tabela principala în care câmpurile din legatura coincid. -toate inregistrarile din ambele tabele Cam asta e tot ce imi amintesc si 100% corecte.

Page 279: SOLUTII - Baze de Date - Adunate
Page 280: SOLUTII - Baze de Date - Adunate

baze_de_date

Probleme pentru examenul de licenta

____ 1. O baza de date relationala este

a. O colectie de date interrelationate gestionate ca o singura unitate b. Un produs software furnizat de un producator de baze de date c. O structura de date, cum ar fi un tabel, o vizualizare sau un index d. Definita in acelasi mod de toti producatorii de software

____ 2. Un Obiect al unei baze de date este a. O colectie de inregistrari inrudite, stocate ca o singura unitate b. Un produs software furnizat de un producator de baze de date c. O structura, cum ar fi un tabel, o vizualizare sau un index d. O colectie de date interrelationate gestionate ca o singuraunitate

____ 3. Care din urmtoarele baze de date nu este un RDBMS (sistem de gestionare a bazelor de date relatioanale) a. Oracle Database b. MySQL c. Excel Database d. Microsoft SQL Server

____ 4. Un sistem RDBMS(sistem de gestionare a bazelor de date relatioanale) nu include urmatorul serviciu a. Acceptarea unui limbaj de interogare b. Mecanisme de securitate, pentru a impiedica accesul si modificarea neautorizata a

datelor c. Mutarea datelor in si din fisiere de date, dupa cum este necesar d. Generarea diagramelor ERD (Entity Relationship Diagram)

____ 5. Componentele unei baze de date relationale nu includ a. Tabele b. Diagrame ERD c. Restrictii d. Relatii

____ 6. Printre tipurile de restrictii care pot fi folosite in bazele de date relationale, nu se numara a. NOT NULL b. Relatii c. CHECK d. Cheie primara e. Unicitate

____ 7. Normalizarea nu rezolva a. Anomalia de stergere b. Anomalia de actualizare c. Anomalia de inserare d. Anomalia de creare

____ 8. Un identificator unic (cheie primara) a. Poate fi compus numai dintr-un singur atribut

A

C

C

D

B

B

D

B

Page 281: SOLUTII - Baze de Date - Adunate

b. Poate fi compus din atribute concatenate c. Poate fi compus din atribute cu valoarea NULL d. Poate fi compus din zero, unul sau mai multe atribute

____ 9. 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

____ 10. A doua forma normala rezolva anomaliile cauzate de a. Grupurile repetitive b. Dependentele partiale de cheia primara c. Grupurile repetitive si atributele multi valoare d. Dependentele tranzitive

____ 11. A treia forma normala rezolva anomaliile cauzate de a. Dependentele partiale de cheia primara b. Grupurile repetitive c. Dependentele tranzitive d. Atributele multivaloare

____ 12. Problemele de dependenŃă tranzitivă a. Sunt rezolvate de a doua formă normală b. Sunt rezolvate de prima formă normală c. Apar atunci când un atribut non-cheie depinde doar de o parte a cheii primare d. Sunt rezolvate de a treia formă normală

____ 13. SQL este a. Un limbaj procedural b. Un limbaj neprocedural c. Un limbaj orientat spre obiecte d. Un limbaj grafic, folosit pentru definirea diagramelor ER si a diagramelor

conceptuale

____ 14. Un model de date reprezinta o colectie integrata de concepte care nu descriu a. date b. relatii dintre date c. date despre echipa realizatoare a modelului d. constrângeri existente asupra datelor sistemului real analizat.

____ 15. Nu este caracteristica a modelului relational: a. prezenta tuplurilor identice b. articolele unui domeniu sunt omogene c. toate valorile unui domeniu corespunzatoare tuturor cazurilor nu mai pot fi

descompuse in alte valori (sunt atomice) d. fiecare coloana defineste un domeniu distinct si nu se poate repeta in cadrul

aceleiasi relatii

____ 16. Modelul relational nu are ca regula de integritate structurala a. Unicitatea cheii. Cheia primara trebuie sa fie unica si minimala. b. Integritatea entitatii. Atributele cheii primare trebuie sa fie diferite de valoarea

null.

A

B

C

D

B

C

A

C

Page 282: SOLUTII - Baze de Date - Adunate

c. Integritatea referirii. O cheie externa trebuie sa corespunda unei valori a cheii primare asociate.

d. Integritatea referirii. O cheie externa trebuie sa fie ori null in intregime, ori sa corespunda unei valori a cheii primare asociate.

____ 17. 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

____ 18. Care nu este un concept utilizat pentru a descrie formal - uzual - fizic elementele de baza ale organizarii datelor a. relatie - tablou- fisier b. tuplu - linie- inregistrare c. atribut - coloana - camp d. domeniu - zona- functie

____ 19. Instructiunile SQL nu fac parte din categoria a. Limbajul de interogare a datelor (DQL) b. Limbajul de definire a datelor (DDL - Data Definition Language) c. Limbajul de selectare a datelor (DSL - Data Selection Language) d. Limbajul de manipulare a datelor (DML - Data Manipulation Language)

____ 20. Limbajul de definire a datelor (DDL - Data Definition Language) nu include urmatoarea instructiune a. DELETE b. CREATE c. ALTER d. DROP

____ 21. Limbajul de manipulare a datelor (DML – Data Manipulation Language) nu include instructiuniea a. INSERT b. UPDATE c. DELETE d. ALTER

____ 22. Tipurile de date temporale standard nu includ a. DATE b. DATETIME c. TIME d. TIMESTAMP

____ 23. Valorile NULL a. Sunt egale cu alte valori NULL b. Este acelasi lucru ca si spatiile libere c. Sunt intotdeauna permise in mod prestabilit d. Pot fi folosite pentru reprezentarea datelor care lipsesc sau nu sunt cunoscute

____ 24. Definitia unei coloane din instructiunea CREATE TABLE nu poate include a. Numele tabelului b. O clauza DEFAULT c. O clauza NULL sau NOT NULL

B

D

C

A

D

B

D

A

Page 283: SOLUTII - Baze de Date - Adunate

d. Numele coloanei

____ 25. Sintaxa corecta pentru o restrictie NOT NULL este a. nume_coloana REFERENCES NOT NULL b. nume_coloana tip_de_DATA IS NOT NULL c. nume_coloana tip_de_DATA NOT NULL d. DEFAULT [NULL | NOT NULL]

____ 26. Sintaxa corecta pentru o restrictie UNIQUE este a. [CONSTRAINT nume_restrictie] UNIQUE {nume_coloana[,nume coloana...]) b. [CONSTRAINT nume_restrictie] UNIQUE (nume_tabel) c. nume_coloana REFERENCES UNIQUE nume_tabel d. DEFAULT UNIQUE (nume_coloana)

____ 27. Sintaxa corecta pentru o restrictie referentiala asupra unei coloane este a. CONSTRAINT nume_restrictie] REFERENCES nume_tabel b. nume_coloana REFERENCES nume_tabel c. FOREIGN KEY nume_coloana REFERENCES nume_tabel (nume_coloana) d. REFERENCES nume_tabel (nume_coloana)

____ 28. Utilizarile valide ale instructiunii ALTER TABLE nu include a. Adaugarea coloanelor b. Eliminarea unei chei primare c. Redenumirea unui tabel d. Adaugarea unei restrictii

____ 29. Nu este functie SQL standard pentru siruri de caractere a. UPPER b. LENGTH sau LEN c. LOWER d. LIKE

____ 30. 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

____ 31. O instructiune SQL care contine o functie de agregare a. Nu poate include, in acelasi timp, o clauza GROUP BY si o clauza ORDER BY b. Trebuie sa includa o clauza GROUP BY c. Trebuie sa includa o clauza ORDER BY d. Poate contine si coloane obisnuite si coloane calculate

____ 32. Care este varianta corecta pentru a crea tabelul Salariat, cu caracteristicile de mai jos?

COD _ANG NUME PRENUME DATA_ANG VARST

A EMAIL SALARIU

not null numeric de 5

sir caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0 numar de 10 cu 2 zecimale

C

A

D

C

D

B

D

A

Page 284: SOLUTII - Baze de Date - Adunate

a. CREATE TABLE SALARIAT ( cod_ang NUMBER(5) NOT NULL, nume VARCHAR2(20), prenume VARCHAR2(20), data_angajarii DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2) DEFAULT 0);

b. CREATE TABLE SALARIAT ( cod_ang NUMBER(5) nume VARCHAR2(20), prenume VARCHAR2(20), data_angajarii DATE , varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2) DEFAULT 0);

c. CREATE TABLE SALARIAT ( cod_ang NUMBER(5) , NOT NULL, nume VARCHAR2(20), prenume VARCHAR2(20), data_angajarii DATE , DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2) , DEFAULT 0);

____ 33. Pentru a insera in tabelul SALARIAT inregistrari,

COD _ANG NUME PRENUME DATA_AN

G VARSTA EMAIL SALARIU

not null numeric de 5

sir caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0

numar de 10 cu 2 zecimale

care varianta este incorecta? a. INSERT INTO SALARIAT(COD _ANG, NUME, PRENUME, DATA_ANG, VARSTA, EMAIL,

SALARIU) VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘[email protected]’, 2500.50) b. INSERT INTO SALARIAT(COD _ANG, NUME, PRENUME, VARSTA, EMAIL)

VALUES(5, ‘Ene’, ‘Ana’, 20, ‘[email protected]’) c. INSERT INTO SALARIAT(COD _ANG, NUME,PRENUME,VARSTA,EMAIL, SALARIU)

VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘[email protected]’) d. INSERT INTO SALARIAT

VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘[email protected]’, 2500.50)

____ 34. Care este varianta corecta pentru a crea tabelul CARTE, cu caracteristicile de mai jos, indicand cheile la nivel de coloana? (Tabelele DOMENIU_CARTE si CARTE sunt in relatia 1:M) CARTE(codc CHAR(5), titlu VARCHAR2(30), autor VARCHAR2(30), pret NUMBER(8,2), nrex NUMBER(3), coddom CHAR(5)) a. CREATE TABLE CARTE

C

B

Page 285: SOLUTII - Baze de Date - Adunate

(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));

____ 35. 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) CARTE(codc CHAR(5) , titlu VARCHAR2(30), autor VARCHAR2(30), pret NUMBER(8,2), nrex NUMBER(3), coddom CHAR(5)) 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),

C

Page 286: SOLUTII - Baze de Date - Adunate

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));

____ 36. Sa se creeze tabelul asociativ imprumuta, a carui structura este data mai jos(codc, codcit si dataim sunt chei primare). Sa se precizeze legatura cu tabelele carte si cititor, aflate in relatia M:M (mai multi la mai multi) a. IMPRUMUTA (

codc CHAR(5), codcit CHAR(5), dataim DATE DEFAULT SYSDATE, datares DATE, dataef DATE, PRIMARY KEY (codel, codec, 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, datares DATE, dataef DATE, PRIMARY KEY (codel, codec, dataim));

____ 37. Sa se creeze tabelul CARTE_INFO(codc, titlu, autor) prin copiere din tabelul

A

C

Page 287: SOLUTII - Baze de Date - Adunate

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’;

____ 38. Pentru a introduce in tabelul SALARIAT COD

_ANG NUME PRENUME

DATA_ANG

VARSTA SALARIU

not null numeric de 5

sircaractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

valoare implicita 0

numar de 10 cu 2 zecimale

doua coloane: Cod_Funct si Email ce varianta folosim? a. ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER COLUMN ADD

Email char(25); b. ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ADD Email CHAR(25); c. ALTER TABLE SALARIAT ADD (Cod_Funct NUMBER(2) , Email CHAR(25)); d. ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER ADD Email

char(25);

____ 39. Ce comanda creeaza tabelul SALARIAT_1 care să aiba aceeiasi structura cu tabelul SALARIAT

COD _ANG NUME PRENUME DATA_AN

G VARST

A EMAIL SALARIU

not null numeric de 5

sir de caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0

numar de

C

B

Page 288: SOLUTII - Baze de Date - Adunate

10 cu 2 zecimale

si sa contina salariatii care au salariu >100? a. CREATE TABLE SALARIAT_1

SELECT * FROM SALARIAT WHERE SALARIU>100; b. CREATE TABLE SALARIAT_1

AS SELECT * FROM SALARIAT WHERE SALARIU>100; c. CREATE TABLE SALARIAT_1

AS SELECT FROM SALARIAT WHERE SALARIU>100; d. CREATE TABLE SALARIAT_1

AS SELECT COD_ANG, SALARIU FROM SALARIAT WHERE SALARIU>100;

____ 40. Ce comanda sterge din tabelul SALARIAT COD

_ANG NUME PRENUME

DATA_ANG

VARSTA EMAIL SALARIU

not null numeric de 5

sir de caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0

numar de 10 cu 2 zecimale

coloana nume si coloana salariu? a. ALTER TABLE SALARIAT

DROP nume, salariu; b. ALTER TABLE SALARIAT

DROP COLUMN (nume, salariu); c. ALTER TABLE SALARIAT

DROP (nume, salariu); d. ALTER TABLE SALARIAT

DROP COLUMN nume, COLUMN salariu;

____ 41. Ce comanda creeaza corect tabelul SALARIAT, specificand constrangerile? COD

_ANG NUME PRENUME DATA_AN

G VARSTA EMAIL SALARIU

cheie primara numeric de 5

not null sir de caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

unic sir de caractere de dimensiune fixa, de 30

> 0 numar de 10 cu 2 zecimale

a. CREATE TABLE salariat(

cod_ang NUMBER(5) PRIMARY KEY, nume VARCHAR2(20) NOT NULL, prenume VARCHAR2(20), data_ang DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(30) UNIQUE, salariu NUMBER(10,2) CHECK (salariu > 0));

C

A

Page 289: SOLUTII - Baze de Date - Adunate

b. CREATE TABLE salariat( cod_ang NUMBER(5) PRIMARY KEY, nume VARCHAR2(20) NOT NULL, prenume VARCHAR2(20), data_ang DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(30) UNIQUE, salariu NUMBER(10,2) > 0));

c. CREATE TABLE salariat( cod_ang NUMBER(5) PRIMARY KEY, nume VARCHAR2(20) NOT NULL, prenume VARCHAR2(20), data_ang DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(30), salariu NUMBER(10,2) CHECK (salariu > 0));

____ 42. 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 PRIMARY KEY (cod_cititor, cod_carte, data_imprumut);

____ 43. Pentru tabelul Salariat cod_depart cod_ang# nume pren salariu cod_funct

care este comanda corecta, pentru a modifica salariu la 3000, pentru angajatii care lucreaza in departamentul 10 si au salariul<3000? a. UPDATE salariat SET salariu=3000

WHERE cod_depart=10 AND salariu<3000; b. MODIFY salariat SET salariu=3000

WHERE cod_depart=10 , salariu<3000; c. UPDATE salariat SET cod_depart=10 AND salariu<3000

WHERE salariu=3000; d. MODIFY salariat SET salariu=3000

WHERE cod_depart=10 AND salariu<3000;

____ 44. Să se insereze în tabelul CARTE toate cărŃile din tabelul CARTE_INFO, presupunând că 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

C

A

D

Page 290: SOLUTII - Baze de Date - Adunate

AS SELECT * FROM CARTE_INFO;

d. INSERT INTO CARTE SELECT * FROM CARTE_INFO;

____ 45. Pentru profesorii titulari, sa se maresca cumulul cu 10% si sa se rotunjeasca la 2 zecimale. UPDATE PROF SET CUMUL = ROUND([CUMUL]*1.1,2) WHERE TITULAR="Y"; 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);

____ 46. Sã 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);

____ 47. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu cod_fuct TOTALURI

C

A

C

Page 291: SOLUTII - Baze de Date - Adunate

cod_fac# nr_prof total_sal

care este secventa corecta pentru o instructiune INSERT cu o instructiune SELECT interna, pentru a insera in tabelul TOTALURI, un rand pentru fiecare facultate din tabelul PROF, care sa contina numarul de profesori din facultate si suma salariilor lor?

a. INSERT TO TOTALURI SELECT COD_FAC, COUNT(*) , SUM(SALARIU) FROM PROF ORDER BY COD_FAC;

b. INSERT INTO TOTALURI SELECT COD_FAC, COUNT(*) AS NR_PROF, SUM(SALARIU) AS TOTAL_SAL FROM PROF ;

c. INSERT INTO TOTALURI SELECT COD_FAC, COUNT(*) AS NR_PROF, SUM(SALARIU) AS TOTAL_SAL FROM PROF GROUP BY COD_FAC;

____ 48. Pentru tabelul PROF cod_prof# cod_fac pren salariu care este secventa corecta pentru a modifica salariile cu 10% , care nu contin valori NULL?

a. UPDATE PROF SET SALARIU = SALARIU*1.1 WHERE SALARIU NOT NULL;

b. UPDATE PROF SET SALARIU = SALARIU*1.1 WHERE SALARIU IS NOT NULL;

c. UPDATE PROF SElLECT SALARIU = SALARIU*1.1 WHERE SALARIU <>0;

____ 49. Pentru tabelul PROF cod_prof# cod_fac nume pren salariu cod_funct care este secventa corecta pentru a sterge toate cadrele didactice care sunt profesori consultanti? a. DELETE FROM PROF WHERE COD_FUNCT=’C’; b. DELETE PROF WHERE COD_FUNCT<>’C’; c. DROP FROM PROF WHERE COD_FUNCT=’C’; d. DROP PROF WHERE COD_FUNCT=’C’;

____ 50. Pentru tabelul: FAC cod_fac# denumire adresa care este secventa corecta pentru o inserare, folosind instructiunea SELECT a. INSERT INTO FAC

(COD_FAC, DENUMIRE, ADRESA) SELECT VALUES(MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA');

b. INSERT INTO FAC SELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA' FROM FAC;

c. INSERT INTO FAC (COD_FAC, DENUMIRE, ADRESA) SELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA' FROM FAC;

____ 51. Pentru tabelul PROF

B

A

C

C

Page 292: SOLUTII - Baze de Date - Adunate

cod_prof# cod_fac nume pren salariu

care este secventa corecta pentru a afisa toti profesorii impreuna cu media _ salariu pentru fiecare facultate , rotunjita la doua pozitii zecimale

a. SELECT COD_FAC, ROUND (AVG (SALARIU), 2) AS medie_salariu FROM PROF ORDER BY COD_FAC;

b. SELECT COD_FAC, ROUND (AVG (SALARIU, 2) AS medie_salariu FROM PROF GROUP BY COD_FAC;

c. SELECT COD_FAC, ROUND (AVG (SALARIU), 2) AS medie_salariu FROM PROF GROUP BY COD_FAC;

d. SELECT FROM PROF COD_FAC, ROUND AVG (SALARIU), 2 AS medie_salariu GROUP BY COD_FAC;

____ 52. Pentru tabelul PROF cod_prof# cod_fac nume pren salariu care este secventa corecta pentru a afisa suma salariilor tuturor profesorilor din universitate.

a. SELECT SUM (Salariu) AS Total_Salariu FROM PROF;

b. SELECT SUM (Salariu) AS Total_Salariu FROM PROF GROUP BY COD_FAC;

c. SELECT SALARIU, SUM (Salariu) AS Total_Salariu FROM PROF;

d. SELECT COD_FAC, SUM (Salariu) AS Total_Salariu FROM PROF;

____ 53. Pentru tabelul PROF cod_prof# cod_fac nume pren salariu care este secventa corecta pentru a afisa toti profesorii pentru care COD_FAC =1 si salariu>=1200, sau toti profesorii pentru care COD_FAC =3 si salariu < 2000. a. SELECT COD_FAC, COD_PROF, NUME, SALARIU

FROM PROF WHERE (COD_FAC=1 OR SALARIU >1200) AND (COD_FAC =3 OR SALARIU<2000);

b. SELECT COD_FAC, COD_PROF, NUME,SALARIU FROM PROF WHERE (COD_FAC=1 AND SALARIU >1200) AND (COD_FAC =3 AND SALARIU<2000);

A

C

Page 293: SOLUTII - Baze de Date - Adunate

c. SELECT COD_FAC, COD_PROF, NUME, SALARIU FROM PROF WHERE (COD_FAC=1 AND SALARIU >1200) OR (COD_FAC =3 AND SALARIU<2000);

d. SELECT COD_FAC, COD_PROF, NUME,SALARIU FROM PROF WHERE COD_FAC=1 OR SALARIU >1200 OR (COD_FAC =3 OR SALARIU<2000);

____ 54. Pentru tabelul PROF cod_prof# cod_fac nume pren salariu care secventa este corecta pentru a afisa citi profesori nu au o valoare introdusa pe coloana salariu? a. SELECT COUNT(salariu)

FROM PROF WHERE SALARIU =0;

b. SELECT COUNT(*) FROM PROF WHERE SALARIU =NULL;

c. SELECT COUNT(*) FROM PROF WHERE SALARIU IS NOT NULL;

d. SELECT COUNT(*) FROM PROF WHERE SALARIU IS NULL;

____ 55. O uniune (join) fara o clauzä 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)

____ 56. 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

____ 57. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu FAC cod_fac# denumire adresa care este secventa corecta pentru o interogare de uniune interna(inner join) care sa afiseze toti profesorii si denumirile facultatilor la care predau, in ordinea crescatoare a denumirilor

a. SELECT NUME, PREN, DENUMIRE FROM FAC, PROF WHERE A.COD_FAC =B.COD_FAC ORDER BY FAC.DENUMIRE;

D

C

A

B

Page 294: SOLUTII - Baze de Date - Adunate

b. SELECT NUME, PREN, DENUMIRE FROM FAC, PROF WHERE FAC.COD_FAC=PROF.COD_FAC ORDER BY FAC.DENUMIRE;

c. SELECT NUME, PREN, DENUMIRE FROM FAC, PROF WHERE FAC.COD_FAC=PROF.COD_FAC;

____ 58. Să se obtinapentru fiecare carte, codul sau şi 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;

____ 59. Care este secventa corecta care să afişeze numărul cărŃilor împrumutate cel puŃin de două ori (pentru fiecare carte împrumutată mai mult decât o dată să se obŃină numărul de câte ori a fost împrumutată).

a. SELECT COUNT(COUNT(codel))

FROM imprumuta GROUP BY codcarte HAVING COUNT(*)>1;

b. SELECT COUNT(codel) FROM imprumuta GROUP BY codcarte HAVING COUNT(*)>1;

c. SELECT COUNT(COUNT(codel)) FROM imprumuta WHERE COUNT(*)>1;

d. SELECT COUNT(codel) FROM imprumuta ORDERBY BY codcarte HAVING COUNT(*)>1;

____ 60. Care este secventa corecta care afiseaza pentru fiecare domeniu de carte, numărul cărŃilor din domeniu, media preŃurilor şi numărul total de exemplare a. SELECT codcarte, COUNT(*), AVG(pret)

FROM CARTE

C

A

C

Page 295: SOLUTII - Baze de Date - Adunate

GROUP BY codcarte; b. SELECT coded, AVG(pret), SUM(nrex)

FROM CARTE GROUP BY codcarte;

c. SELECT codcarte, COUNT(*), AVG(pret), SUM(nrex) FROM CARTE GROUP BY codcarte;

d. SELECT COUNT(*), AVG(pret), SUM(nrex) FROM CARTE ORDER BY codcarte;

____ 61. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu FAC cod_fac# denumire adresa care este secventa corecta pentru o interogare de uniune externa catre stanga, care sa afiseze toti profesorii si denumirile facultatilor la care predau a. SELECT NUME, PREN, DENUMIRE

FROM FAC PROF LEFT OUTER JOIN ON A.COD_FAC = B.COD_FAC; b. SELECT NUME, PREN, DENUMIRE

FROM FAC LEFT OUTER JOIN PROF ON A.COD_FAC = B.COD_FAC;

c. SELECT NUME, PREN, DENUMIRE FROM FAC A LEFT OUTER JOIN PROF B ON A.COD_FAC = B.COD_FAC;

____ 62. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu cod_funct FUNCTII cod_funct# nume_funct care este secventa corecta pentru o subinterogare necorelata, care sa afiseze toate functiile pentru care nu exista profesorii incadrati

a. SELECT cod_funct, nume_funct FROM functii WHERE cod_funct NOT IN (SELECT DISTINCT cod_funct FROM prof);

b. SELECT cod_funct, nume_funct FROM functii WHERE cod_funct NOT IN SELECT DISTINCT cod_funct FROM prof;

c. SELECT cod_funct, nume_funct FROM functii WHERE cod_funct IN (SELECT cod_funct FROM prof);

____ 63. Care este comanda corecta care pentru fiecare facultate, se 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

C

A

C

Page 296: SOLUTII - Baze de Date - Adunate

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;

____ 64. Să se obŃină titlurile şi preŃurile cărŃilor mai scumpe decât cartea având titlul “Baze de date”, al cărui 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’;

____ 65. Pentru tabelele PROFESORI(codp, nume, pren, salariu) COPII (codp, nume_c, virsta) care este secventa corecta pentru a afisa profesorii cu 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 codp IN (SELECT codp FROM COPII);

B

A

Page 297: SOLUTII - Baze de Date - Adunate

c. SELECT a.nume, a.pren FROM PROFESORI A WHERE a.codp IN COPII;

d. SELECT a.nume, a.pren FROM PROFESORI A WHERE a.codp IN DISTINCT codp FROM COPII;

____ 66. Pentru tabelele PROFESORI(codp, nume, pren, salariu) COPII (codp, nume_c, virsta) care este secventa corecta pentru a afisa profesorii fara copii a. SELECT a.nume, a.pren

FROM PROFESORI A WHERE codp NOT IN (SELECT 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;

d. SELECT a.nume, a.pren FROM PROFESORI A WHERE a.codp IS NOT (SELECT DISTINCT codpFROM COPII);

____ 67. 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), valoar 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.codact=b.codact AND b.nume=‘&x’;

b. SELECT a.seriain, a.seriasf, b.nume FROM actiuni , actionari WHERE a.codact=b.codact AND nume=‘&x’;

c. SELECT a.seriain, a.seriasf, b.nume FROM actiuni a, actionari b WHERE a.codact=b.codact ;

d. SELECT a.seriain, a.seriasf, b.nume FROM actiuni a, actionari b WHERE a.codact=b.codact OR b.nume=‘&x’;

____ 68. Se considera pentru actionarii unei firme, tabelul ACTIUNI (cod_act number(5), seriain number(8), seriasf number(8), valoar number(8)) (unde seriain si seriasf reprezinta seria de inceput, respectiv de sfarsit al intervalului de actiuni pe care il are un actionar).

B

A

D

Page 298: SOLUTII - Baze de Date - Adunate

A

Care este secventa corecta care afiseaza suma necesara firmei pentru plata tuturor devidentelor (numrul 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;

____ 69. 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’;

____ 70. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu cod_funct FAC cod_fac# denumire adresa care este secventa corecta pentru o subinterogare corelata, care sa afiseze toate facultatile pentru care suma salariile profesorilor este mai mare 10000 a. SELECT DISTINCT DENUMIRE

FROM FAC WHERE 10000< (SELECT sum(salariu) FROM PROF WHERE A.COD_FAC=B.COD_FAC);

b. SELECT DISTINCT DENUMIRE FROM FAC A WHERE 10000< ( SELECT sum(salariu) FROM PROF B WHERE A.COD_FAC=B.COD_FAC);

c. SELECT DISTINCT DENUMIRE FROM FAC A WHERE 10000< SELECT sum(salariu) FROM PROF B WHERE A.COD_FAC=B.COD_FAC;

____ 71. Care este comanda corecta pentru a afisa toti salariatii , in ordine crescatoare dupa nume, care sunt manageri ? a. SELECT DISTINCT sef.nume, angajat.cod_manager

FROM salariati sef, salariati angajat

C

B

Page 299: SOLUTII - Baze de Date - Adunate

WHERE sef.cod_salariat= angajat.cod_manager ORDER BY sef.nume;

b. SELECT DISTINCT sef.nume, angajat.cod_manager FROM salariati sef, salariati angajat WHERE cod_salariat= cod_manager ORDER BY sef.nume;

c. SELECT DISTINCT nume, cod_manager FROM salariati sef, salariati angajat WHERE sef.cod_salariat= angajat.cod_manager;

d. ELECT DISTINCT nume, cod_manager FROM salariati sef, salariati angajat WHERE cod_salariat= cod_manager ORDER BY sef.nume;

____ 72. Care este comanda corecta care sa afiseze 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’);

____ 73. 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;

C

D

Page 300: SOLUTII - Baze de Date - Adunate

____ 74. Care este comanda corecta care determina micsorarea salariilor cu 10%, cu rotunjire la 2 zecimale , a angajatilor care nu sunt titulari? a. UPDATE salariat

SET salariu=ROUND(salariu*0.9, 2); b. UPDATE salariat

SET salariu=ROUND(salariu*1.1) WHERE titular =’N’;

c. UPDATE salariat SET salariu = ROUND(salariu*0.9, 2) WHERE TITULAR=’N’;

d. UPDATE salariat SET salariu=ROUND(salariu+salariu*0.1) WHERE titular =’Y’;

____ 75. Care este comanda corecta care afiseaza numele si salariul angajatilor condusi direct de ‘ENE DAN’? a. SELECT nume, salariu

FROM salariati WHERE cod_ang = (SELECT cod_manager FROM salariati WHERE UPPER(nume) ='ENE' , UPPER(pren) ='DAN' );

b. SELECT nume, salariu FROM salariati WHERE cod_manager IN (SELECT cod_ang FROM salariati WHERE nume ='ENE' , pren ='DAN' );

c. SELECT nume, salariu FROM salariati (SELECT cod_ang FROM salariati WHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN' );

d. SELECT nume, salariu FROM salariati WHERE cod_manager = (SELECT cod_ang FROM salariati WHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN' );

____ 76. Care este comanda corecta care afiseaza numele cititorilor care au carti nerestituite? a. SELECT nume_cititor

FROM imprumuta WHERE data_restituirii = NULL;

b. SELECT nume_cititor FROM imprumuta WHERE data_restituirii IS NOT NULL;

c. SELECT nume_cititor FROM imprumuta WHERE data_restituirii IS NULL;

d. SELECT nume_cititor FROM imprumuta WHERE data_restituirii > SYSDATE;

____ 77. Care este comanda corecta care sterge valoarea coloanei salariu pentru angajatii care sunt angajati cu contract de colaborare?

a. DELETE salariu

FROM salariati WHERE contract=’colaborare’;

b. UPDATE salariati

C

D

C

D

Page 301: SOLUTII - Baze de Date - Adunate

SET salariu IS null WHERE contract=’colaborare’;

c. DROP salariu FROM salariati WHERE contract=’colaborare’;

d. UPDATE salariati SET salariu=null WHERE contract=’colaborare’;

____ 78. Care este comanda corecta care afiseaza codul departamentelor, numele departamentelor si suma salariilor pentru fiecare departament? a. SELECT cod_departament, nume_departament, SUM(salariu)

FROM salariati s, departamente d GROUP BY cod_departament, nume_departament;

b. SELECT cod_departament, nume_departament, SUM(salariu) FROM salariati s, departamente d WHERE s.cod_departament=d.cod_departament GROUP BY cod_departament;

c. SELECT cod_departament, nume_departament, SUM(salariu) FROM salariati s, departamente d WHERE s.cod_departament=d.cod_departament GROUP BY cod_departament, nume_departament;

d. SELECT cod_departament, nume_departament, SUM(salariu) FROM salariati, departamente WHERE s.cod_departament=d.cod_departament GROUP BY cod_departament, nume_departament;

____ 79. 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;

____ 80. 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

C

B

D

Page 302: SOLUTII - Baze de Date - Adunate

(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);

Page 303: SOLUTII - Baze de Date - Adunate

A doua forma normala rezolva anomaliile cauzate de     Dependentele partiale de cheia primara ____ 10.b.

A treia forma normala rezolva anomaliile cauzate de      Dependentele tranzitive ____ 11.c.

Care   din   urmtoarele   baze   de   date   nu   este   un   RDBMS __      Excel Database ___ 3.c.

Care   este   comanda   corecta   care   afiseaza   numele   salariatilor   __                                                                                     SELECT nume FROM salariati WHERE salariu > (SELECT AVG(salariu) FROM salariati) ORDER BY salariu; ____ 79. b.

Care este comanda corecta prin care se adauga constrangerea __ ALTER TABLE IMPRUMUTA ADD CONSTRAINT cp PRIMARY KEY (cod_cititor, cod_carte, data_imprumut); ____ 42. c.

Care   este   secventa   corecta   care   afiseaza   pentru  fiecare   domeniu  de   carte,  __                                     SELECT codcarte, COUNT(*), AVG(pret), SUM(nrex) FROM CARTE GROUP BY codcarte; ____ 60. c.  

Care   este   secventa   corecta   care   sa afiseze   numarul   carNilor   împrumutate   __                                            SELECT COUNT(COUNT(codel)) FROM imprumuta GROUP BY codcarte HAVING COUNT(*)>1; ____ 59. a.

Care   nu   este   un   concept   utilizat pentru   a   descrie  formal   __     domeniu - zona- functie ____ 18. d.

Care este comanda corecta care afiseaza codul departamentelor, numele departamentelor si suma salariilor SELECT cod_departament, nume_departament, SUM(salariu) FROM salariati s, departamente d WHERE s.cod_departament=d.cod_departament GROUP BY cod_departament, nume_departament; ____ 78. c.

Care este comanda corecta care afiseaza numarul total de carti imprumutate si restituite pentru fiecare cititor SELECT cod_cititor, COUNT(*) FROM imprumuta WHERE data_restituirii IS NOT NULL GROUP BY cod_cititor; ____ 73. d.

Care este comanda corecta care afiseaza numele cititorilor care au carti nerestituite?                                                     SELECT nume_cititor FROM imprumuta WHERE data_restituirii IS NULL; ____ 76. c.

Care este comanda corecta care afiseaza numele si salariul angajatilor condusi direct de ‘ENE DAN’?  SELECT nume, salariu FROM salariati WHERE cod_manager = (SELECT cod_ang FROM salariati WHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN' ); ____ 75. d.

Care este comanda corecta care afiseaza toate functiile pe care nu lucreaza angajati?                                       SELECT cod_functie FROM functii WHERE cod_functie NOT IN (SELECT cod_functie FROM salariati WHERE cod_functie IS NOT NULL); ____ 80. d.

Page 304: SOLUTII - Baze de Date - Adunate

Care este comanda corecta care determina micsorarea   salariilor cu 10%, cu rotunjire la 2 zecimale , a              UPDATE salariat SET salariu = ROUND(salariu*0.9, 2) WHERE TITULAR=’N’; ____ 74. c.

Care este comanda corecta care pentru fiecare facultate, se insereaza in tabelul                                                    INSERT INTO TOTALURI SELECT COD_FAC, COUNT(*) , SUM(SALARIU) FROM PROF GROUP BY COD_FAC; ____ 63. c.

Care este comanda corecta care sa afiseze daca exista angajati care nu lucreaza in departamentul ‘Contractari’ 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’); ____ 72. c.

Care este comanda corecta care sterge valoarea coloanei salariu pentru angajatii care sunt angajati cu contract UPDATE salariati SET salariu=null WHERE contract=’colaborare’; ____ 77. d.

Care este comanda corecta pentru a afisa toti salariatii , in ordine crescatoare dupa nume, care sunt manageri ?SELECT DISTINCT sef.nume, angajat.cod_manager

FROM salariati sef, salariati angajat WHERE sef.cod_salariat= angajat.cod_manager ORDER BY sef.nume; ____ 71. a.

Care este varianta corecta pentru a crea tabelul CARTE, cu caracteristicile de mai jos, indicand cheile la nivel    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)); ____ 34. b.

Care este varianta corecta pentru a crea tabelul CARTE, cu caracteristicile de mai jos(codc cheie primara,   __  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)); ____ 35. c.

Care este varianta corecta pentru a crea tabelul Salariat, cu caracteristicile de mai jos?                                         CREATE TABLE SALARIAT ( cod_ang NUMBER(5) NOT NULL, nume VARCHAR2(20), prenume VARCHAR2(20), data_angajarii DATE DEFAULT SYSDATE,

Page 305: SOLUTII - Baze de Date - Adunate

varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2) DEFAULT 0); ____ 32.a.

Ce comanda creeaza corect tabelul SALARIAT, specificand constrangerile?                                                                 CREATE TABLE salariat( cod_ang NUMBER(5) PRIMARY KEY, nume VARCHAR2(20) NOT NULL, prenume VARCHAR2(20), data_ang DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(30) UNIQUE, salariu NUMBER(10,2) CHECK (salariu > 0)); ____ 41. a.

Ce comanda creeaza tabelul SALARIAT_1        care sa aiba aceeiasi structura cu                                                       CREATE TABLE SALARIAT_1 AS SELECT * FROM SALARIAT WHERE SALARIU>100; ____ 39. b.

Ce comanda sterge din tabelul SALARIAT ALTER TABLE SALARIAT DROP (nume, salariu); ____ 40. c.

Componentele unei baze de date relationale   nu includ  __   Diagrame ERD ____ 5.b.

Definitia unei coloane din instructiunea CREATE TABLE nu poate include   __   Numele tabelului ____ 24. a.

Instructiunile SQL nu fac parte din categoria  __  Limbajul de selectare a datelor (DSL - Data Selection

Language) ____ 19. c.

Limbajul de definire a datelor (DDL ‐ Data Definition Language) __  DELETE ____ 20. a.

Limbajul de manipulare a datelor (DML – Data Manipulation Language) __ ALTER ____ 21. d.

Modelul relational nu are ca regula de integritate structurala    __     Integritatea referirii. O cheie externa trebuie

sa corespunda unei valori a cheii primare asociate. ____ 16. c.

Normalizarea nu rezolva   __ Anomalia de creare ____ 7.d.

Nu este   caracteristica a modelului relational:   __ prezenta tuplurilor identice ____ 15. a.

Nu este functie SQL standard pentru siruri de caractere   __    LIKE ____ 29. d.

O baza de date relationala este   __   O colectie de date interrelationate gestionate ca o singura unitate ____

1.a.

O instructiune SQL care contine o functie de agregare   __   Poate contine si coloane obisnuite si coloane

calculate ____ 31. d.

O uniune (join) fara o clauzä WHERE sau o clauza JOIN__ Reprezinta o uniune externa(outer join) ____ 55. d.

O uniune externa (outer join) nu   __   Poate fi scrisa in Oracle SQL folosind un simbol (+) in clauza FROM ____

56. a.

Operatorul UNION    __ Combina seturile de rezultate a doua interogari intr-un singur set de rezultate si elimina

randurile duplicate din setul de rezultate ____ 30. b.

Page 306: SOLUTII - Baze de Date - Adunate

Pentru a insera in tabelul SALARIAT inregistrari INSERT INTO SALARIAT(COD _ANG, NUME,PRENUME,VARSTA,EMAIL, SALARIU) VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘[email protected]’) ____ 33.c.

Pentru a introduce in tabelul SALARIAT                                                                                                                                  ALTER TABLE SALARIAT ADD (Cod_Funct NUMBER(2) , Email CHAR(25)); ____ 38. c.

Pentru profesorii titulari, sa se maresca cumulul cu 10% si sa se rotunjeasca la 2 zecimale.                                        UPDATE PROF SET CUMUL = ROUND(CUMUL*1.1,2); WHERE TITULAR=’Y’; ____ 45. c.

Pentru tabelele      __  profesorii cu copii   SELECT a.nume, a.pren FROM PROFESORI A WHERE a.codp IN (SELECT DISTINCT codp FROM COPII); ____ 65. a.

Pentru tabelele   __  profesorii fara copii                                                                                                                                              SELECT a.nume, a.pren FROM PROFESORI A WHERE a.codp NOT IN (SELECT DISTINCT codp FROM COPII); ____ 66. b.

Pentru tabelele                                                                                                                                                                              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’; ____ 69. c.

Pentru tabelele:   __ numarul de profesori   din facultate si suma salariilor lor?                                                                           INSERT INTO TOTALURI SELECT COD_FAC, COUNT(*) AS NR_PROF, SUM(SALARIU) AS TOTAL_SAL FROM PROF GROUP BY COD_FAC; ____ 47. c.

Pentru tabelele:    __  in ordinea crescatoare a denumirilor                                                                                                              SELECT NUME, PREN, DENUMIRE FROM FAC, PROF WHERE FAC.COD_FAC=PROF.COD_FAC ORDER BY FAC.DENUMIRE; ____ 57. b.

Pentru tabelele:  __  nu exista profesorii incadrati                                                                                                                             SELECT cod_funct, nume_funct FROM functii WHERE cod_funct NOT IN (SELECT DISTINCT cod_funct FROM prof); ____ 62. a.

Pentru tabelele:   __ salariile profesorilor este mai mare 10000                                                                                                      SELECT DISTINCT DENUMIRE FROM FAC A WHERE 10000< ( SELECT sum(salariu) FROM PROF B WHERE A.COD_FAC=B.COD_FAC); ____ 70. b.

Pentru tabelele:      __  denumirile facultatilor la care predau                                                                                                          SELECT NUME, PREN, DENUMIRE FROM FAC A LEFT OUTER JOIN PROF B ON A.COD_FAC = B.COD_FAC; ____ 61. c.

Pentru tabelul    __              salariu>=1200, sau toti profesorii  pentru care COD_FAC =3 si salariu < 2000.                              SELECT COD_FAC, COD_PROF, NUME, SALARIU FROM PROF

Page 307: SOLUTII - Baze de Date - Adunate

WHERE (COD_FAC=1 AND SALARIU >1200) OR (COD_FAC =3 AND SALARIU<2000); ____ 53. c.  

Pentru tabelul      __             facultate , rotunjita la doua pozitii zecimale                                                                                        SELECT COD_FAC, ROUND (AVG (SALARIU), 2) AS medie_salariu FROM PROF GROUP BY COD_FAC; ____ 51. c.

Pentru tabelul    __  care secventa este corecta pentru a afisa citi profesori nu au o valoare introdusa pe coloana salariu?                                                                                                                                                                                  SELECT COUNT(*) FROM PROF WHERE SALARIU IS NULL; ____ 54. d.

Pentru tabelul    __ care este secventa corecta pentru a afisa suma salariilor tuturor profesorilor din universitate.             SELECT SUM (Salariu) AS Total_Salariu FROM PROF; ____ 52. a.

Pentru tabelul PROF                                                                                                                                                                UPDATE PROF SET SALARIU = SALARIU*1.1 WHERE SALARIU IS NOT NULL; ____ 48. b.

Pentru tabelul PROF     DELETE FROM PROF WHERE COD_FUNCT=’C’; ____ 49. a.

Pentru tabelul Salariat                                                                                                                                                                UPDATE salariat SET salariu=3000 WHERE cod_depart=10 AND salariu<3000; ____ 43. a.

Pentru tabelul:                                                                                                                                                                               INSERT INTO FAC (COD_FAC, DENUMIRE, ADRESA) SELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA' FROM FAC; ____ 50. c.

Prima forma normala rezolva anomaliile cauzate de  __   Grupurile repetitive si atributele multivaloare ____

9.a.

Printre tipurile de restrictii care pot fi folosite in bazele de date relationale, nu se numara  __ Relatii ____ 6.b.

Problemele de dependenNa tranzitiva    __        Sunt rezolvate de a treia forma normala ____ 12.d.

Relatia m:n devine in modelul relational   __          tabel asociativ cu cheia primara formata din doua chei externe

pentru cele doua tabele asociate plus eventuale coloane aditionale ____ 17. b.

Sã   se   modifice   pretul   cartilor   din   biblioteca,   care  se   gasesc   intr‐un   numar   de   exemplare   mai   mic UPDATE CARTE SET pret = (SELECT SUM(pret) FROM CARTE WHERE autor = ’BARBU’) WHERE nrex < (SELECT AVG(nrex) FROM CARTE); ____ 46. a.

Sa se creeze tabelul CARTE_INFO(codc, titlu, autor) prin copiere din  tabelu                                                                 CREATE TABLE CARTE_INFO AS SELECT codc, titlu, autor FROM CARTE WHERE coddom = ’I’; ____ 37. c.  

Page 308: SOLUTII - Baze de Date - Adunate

Sa se insereze în tabelul CARTE toate carNile din tabelul CARTE_INFO, presupunând ca tabelul                               INSERT INTO CARTE SELECT * FROM CARTE_INFO; ____ 44. d.

Sa se obtina titlurile si preturile cartilor mai scumpe decât cartea având titlul “Baze de date”, al carui 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’; ____ 64. b.

Sa se obtinapentru fiecare carte, codul sau �i numarul de exemplare care nu au fost inca restituite.                           SELECT codc, COUNT(*) FROM IMPRUMUTA WHERE dataef IS NULL GROUP BY codc; ____ 58. c.

Sa se   creeze tabelul   asociativ imprumuta,   a   carui   structura   este   data   mai   jos(codc,                          IMPRUMUTA ( codc CHAR(5), codcit CHAR(5), dataim DATE DEFAULT SYSDATE, datares DATE, dataef DATE, PRIMARY KEY (codel, codec, dataim), FOREIGN KEY (codc) REFERENCES CARTE (codc), FOREIGN KEY (codcit) REFERENCES CITITOR(codcit)); ____ 36. a.

Se considera pentru actionarii unei firme,    tabelul                                                                                                                  SELECT SUM((seriasf-seriain+1)*valoare)) FROM ACTIUNI; ____ 68. d.

Se considera pentru actionarii unei firme,    urmatoarele tabele                                                                                 SELECT a.seriain, a.seriasf, b.nume FROM actiuni a, actionari b WHERE a.codact=b.codact AND b.nume=‘&x’; ____ 67. a.

Sintaxa corecta pentru o restrictie NOT NULL este   __   nume_coloana tip_de_DATA NOT NULL ____ 25. c.

Sintaxa corecta pentru o restrictie referentiala asupra unei coloane este     REFERENCES nume_tabel

(nume_coloana) ____ 27. d.

Sintaxa corecta pentru o restrictie UNIQUE este __ [CONSTRAINT nume_restrictie] UNIQUE {nume_coloana[,nume coloana...]) ____ 26. a.

SQL este    __    Un limbaj neprocedural ____ 13. b.

Tipurile de date temporale standard nu includ     __   DATETIME ____ 22. b.

Un   sistem   RDBMS(sistem   de   gestionare   a   bazelor   de   date   relatioanale)     __    Generarea diagramelor

ERD (Entity Relationship Diagram) ____ 4.d.

Un identificator unic (cheie primara)  __   Poate fi compus din atribute concatenate ____ 8.b.

Page 309: SOLUTII - Baze de Date - Adunate

Un model de date reprezinta o colectie integrata de concepte care nu descriu           __    date despre echipa

realizatoare a modelului ____ 14. c.

Un Obiect al unei baze de date este  __  O structura, cum ar fi un tabel, o vizualizare sau un index ____ 2.c.

Utilizarile valide ale instructiunii ALTER TABLE   nu include  __  Redenumirea unui tabel ____ 28. c.

Valorile NULL  __  Pot fi folosite pentru reprezentarea datelor care lipsesc sau nu sunt cunoscute ____ 23. d.

Page 310: SOLUTII - Baze de Date - Adunate

BAZE_DE_DATE_licenta_raspunsuri

1 A 2 C 3 C 4 D 5 B 6 B 7 D 8 B 9 A 10 B 11 C 12 D 13 B 14 C 15 A 16 C 17 B 18 D 19 C 20 A 21 D 22 B 23 D 24 A 25 C 26 A 27 D 28 C 29 D 30 B 31 D 32 A 33 C 34 B 35 C 36 A 37 C 38 C 39 B 40 C 41 A 42 C 43 A 44 D 45 C

46 A 47 C 48 B 49 A 50 C 51 C 52 A 53 C 54 D 55 C 56 A 57 B 58 C 59 A 60 C 61 C 62 A 63 C 64 B 65 A 66 B 67 A 68 D 69 C 70 B 71 A 72 C 73 D 74 C 75 D 76 C 77 D 78 C 79 B 80 D 

Page 311: SOLUTII - Baze de Date - Adunate

baze_de_date

Probleme pentru examenul de licenta

____ 1. O baza de date relationala este

a. O colectie de date interrelationate gestionate ca o singura unitate b. Un produs software furnizat de un producator de baze de date c. O structura de date, cum ar fi un tabel, o vizualizare sau un index d. Definita in acelasi mod de toti producatorii de software

____ 2. Un Obiect al unei baze de date este a. O colectie de inregistrari inrudite, stocate ca o singura unitate b. Un produs software furnizat de un producator de baze de date c. O structura, cum ar fi un tabel, o vizualizare sau un index d. O colectie de date interrelationate gestionate ca o singuraunitate

____ 3. Care din urmtoarele baze de date nu este un RDBMS (sistem de gestionare a bazelor de date relatioanale) a. Oracle Database b. MySQL c. Excel Database d. Microsoft SQL Server

____ 4. Un sistem RDBMS(sistem de gestionare a bazelor de date relatioanale) nu include urmatorul serviciu a. Acceptarea unui limbaj de interogare b. Mecanisme de securitate, pentru a impiedica accesul si modificarea neautorizata a

datelor c. Mutarea datelor in si din fisiere de date, dupa cum este necesar d. Generarea diagramelor ERD (Entity Relationship Diagram)

____ 5. Componentele unei baze de date relationale nu includ a. Tabele b. Diagrame ERD c. Restrictii d. Relatii

____ 6. Printre tipurile de restrictii care pot fi folosite in bazele de date relationale, nu se numara a. NOT NULL b. Relatii c. CHECK d. Cheie primara e. Unicitate

____ 7. Normalizarea nu rezolva a. Anomalia de stergere b. Anomalia de actualizare c. Anomalia de inserare d. Anomalia de creare

____ 8. Un identificator unic (cheie primara) a. Poate fi compus numai dintr-un singur atribut

MUGUR
Typewritten Text
A
MUGUR
Typewritten Text
C
MUGUR
Typewritten Text
C
MUGUR
Typewritten Text
D
MUGUR
Typewritten Text
B
MUGUR
Typewritten Text
B
MUGUR
Typewritten Text
D
MUGUR
Typewritten Text
B
MUGUR
Typewritten Text
Page 312: SOLUTII - Baze de Date - Adunate

b. Poate fi compus din atribute concatenate c. Poate fi compus din atribute cu valoarea NULL d. Poate fi compus din zero, unul sau mai multe atribute

____ 9. 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

____ 10. A doua forma normala rezolva anomaliile cauzate de a. Grupurile repetitive b. Dependentele partiale de cheia primara c. Grupurile repetitive si atributele multi valoare d. Dependentele tranzitive

____ 11. A treia forma normala rezolva anomaliile cauzate de a. Dependentele partiale de cheia primara b. Grupurile repetitive c. Dependentele tranzitive d. Atributele multivaloare

____ 12. Problemele de dependenŃă tranzitivă a. Sunt rezolvate de a doua formă normală b. Sunt rezolvate de prima formă normală c. Apar atunci când un atribut non-cheie depinde doar de o parte a cheii primare d. Sunt rezolvate de a treia formă normală

____ 13. SQL este a. Un limbaj procedural b. Un limbaj neprocedural c. Un limbaj orientat spre obiecte d. Un limbaj grafic, folosit pentru definirea diagramelor ER si a diagramelor

conceptuale

____ 14. Un model de date reprezinta o colectie integrata de concepte care nu descriu a. date b. relatii dintre date c. date despre echipa realizatoare a modelului d. constrângeri existente asupra datelor sistemului real analizat.

____ 15. Nu este caracteristica a modelului relational: a. prezenta tuplurilor identice b. articolele unui domeniu sunt omogene c. toate valorile unui domeniu corespunzatoare tuturor cazurilor nu mai pot fi

descompuse in alte valori (sunt atomice) d. fiecare coloana defineste un domeniu distinct si nu se poate repeta in cadrul

aceleiasi relatii

____ 16. Modelul relational nu are ca regula de integritate structurala a. Unicitatea cheii. Cheia primara trebuie sa fie unica si minimala. b. Integritatea entitatii. Atributele cheii primare trebuie sa fie diferite de valoarea

null.

MUGUR
Typewritten Text
MUGUR
Typewritten Text
8 B
MUGUR
Typewritten Text
9 C
MUGUR
Typewritten Text
10 B
MUGUR
Typewritten Text
11 C
MUGUR
Typewritten Text
12 D
MUGUR
Typewritten Text
A
MUGUR
Typewritten Text
D
MUGUR
Typewritten Text
A
Page 313: SOLUTII - Baze de Date - Adunate

c. Integritatea referirii. O cheie externa trebuie sa corespunda unei valori a cheii primare asociate.

d. Integritatea referirii. O cheie externa trebuie sa fie ori null in intregime, ori sa corespunda unei valori a cheii primare asociate.

____ 17. 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

____ 18. Care nu este un concept utilizat pentru a descrie formal - uzual - fizic elementele de baza ale organizarii datelor a. relatie - tablou- fisier b. tuplu - linie- inregistrare c. atribut - coloana - camp d. domeniu - zona- functie

____ 19. Instructiunile SQL nu fac parte din categoria a. Limbajul de interogare a datelor (DQL) b. Limbajul de definire a datelor (DDL - Data Definition Language) c. Limbajul de selectare a datelor (DSL - Data Selection Language) d. Limbajul de manipulare a datelor (DML - Data Manipulation Language)

____ 20. Limbajul de definire a datelor (DDL - Data Definition Language) nu include urmatoarea instructiune a. DELETE b. CREATE c. ALTER d. DROP

____ 21. Limbajul de manipulare a datelor (DML – Data Manipulation Language) nu include instructiuniea a. INSERT b. UPDATE c. DELETE d. ALTER

____ 22. Tipurile de date temporale standard nu includ a. DATE b. DATETIME c. TIME d. TIMESTAMP

____ 23. Valorile NULL a. Sunt egale cu alte valori NULL b. Este acelasi lucru ca si spatiile libere c. Sunt intotdeauna permise in mod prestabilit d. Pot fi folosite pentru reprezentarea datelor care lipsesc sau nu sunt cunoscute

____ 24. Definitia unei coloane din instructiunea CREATE TABLE nu poate include a. Numele tabelului b. O clauza DEFAULT c. O clauza NULL sau NOT NULL

MUGUR
Typewritten Text
MUGUR
Typewritten Text
13 B
MUGUR
Typewritten Text
MUGUR
Typewritten Text
14 D
MUGUR
Typewritten Text
15 C
MUGUR
Typewritten Text
16 A
MUGUR
Typewritten Text
17 D
MUGUR
Typewritten Text
18 D
MUGUR
Typewritten Text
19 A
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
B
MUGUR
Typewritten Text
Page 314: SOLUTII - Baze de Date - Adunate

d. Numele coloanei

____ 25. Sintaxa corecta pentru o restrictie NOT NULL este a. nume_coloana REFERENCES NOT NULL b. nume_coloana tip_de_DATA IS NOT NULL c. nume_coloana tip_de_DATA NOT NULL d. DEFAULT [NULL | NOT NULL]

____ 26. Sintaxa corecta pentru o restrictie UNIQUE este a. [CONSTRAINT nume_restrictie] UNIQUE {nume_coloana[,nume coloana...]) b. [CONSTRAINT nume_restrictie] UNIQUE (nume_tabel) c. nume_coloana REFERENCES UNIQUE nume_tabel d. DEFAULT UNIQUE (nume_coloana)

____ 27. Sintaxa corecta pentru o restrictie referentiala asupra unei coloane este a. CONSTRAINT nume_restrictie] REFERENCES nume_tabel b. nume_coloana REFERENCES nume_tabel c. FOREIGN KEY nume_coloana REFERENCES nume_tabel (nume_coloana) d. REFERENCES nume_tabel (nume_coloana)

____ 28. Utilizarile valide ale instructiunii ALTER TABLE nu include a. Adaugarea coloanelor b. Eliminarea unei chei primare c. Redenumirea unui tabel d. Adaugarea unei restrictii

____ 29. Nu este functie SQL standard pentru siruri de caractere a. UPPER b. LENGTH sau LEN c. LOWER d. LIKE

____ 30. 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

____ 31. O instructiune SQL care contine o functie de agregare a. Nu poate include, in acelasi timp, o clauza GROUP BY si o clauza ORDER BY b. Trebuie sa includa o clauza GROUP BY c. Trebuie sa includa o clauza ORDER BY d. Poate contine si coloane obisnuite si coloane calculate

____ 32. Care este varianta corecta pentru a crea tabelul Salariat, cu caracteristicile de mai jos?

COD _ANG NUME PRENUME DATA_ANG VARST

A EMAIL SALARIU

not null numeric de 5

sir caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0 numar de 10 cu 2 zecimale

MUGUR
Typewritten Text
MUGUR
Typewritten Text
20 C
MUGUR
Typewritten Text
21 A
MUGUR
Typewritten Text
MUGUR
Typewritten Text
22 D
MUGUR
Typewritten Text
23 C
MUGUR
Typewritten Text
MUGUR
Typewritten Text
26 D
MUGUR
Typewritten Text
MUGUR
Typewritten Text
27 B
MUGUR
Typewritten Text
28 A
MUGUR
Typewritten Text
D
MUGUR
Typewritten Text
Page 315: SOLUTII - Baze de Date - Adunate

a. CREATE TABLE SALARIAT ( cod_ang NUMBER(5) NOT NULL, nume VARCHAR2(20), prenume VARCHAR2(20), data_angajarii DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2) DEFAULT 0);

b. CREATE TABLE SALARIAT ( cod_ang NUMBER(5) nume VARCHAR2(20), prenume VARCHAR2(20), data_angajarii DATE , varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2) DEFAULT 0);

c. CREATE TABLE SALARIAT ( cod_ang NUMBER(5) , NOT NULL, nume VARCHAR2(20), prenume VARCHAR2(20), data_angajarii DATE , DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2) , DEFAULT 0);

____ 33. Pentru a insera in tabelul SALARIAT inregistrari,

COD _ANG NUME PRENUME DATA_AN

G VARSTA EMAIL SALARIU

not null numeric de 5

sir caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0

numar de 10 cu 2 zecimale

care varianta este incorecta? a. INSERT INTO SALARIAT(COD _ANG, NUME, PRENUME, DATA_ANG, VARSTA, EMAIL,

SALARIU) VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘[email protected]’, 2500.50) b. INSERT INTO SALARIAT(COD _ANG, NUME, PRENUME, VARSTA, EMAIL)

VALUES(5, ‘Ene’, ‘Ana’, 20, ‘[email protected]’) c. INSERT INTO SALARIAT(COD _ANG, NUME,PRENUME,VARSTA,EMAIL, SALARIU)

VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘[email protected]’) d. INSERT INTO SALARIAT

VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘[email protected]’, 2500.50)

____ 34. Care este varianta corecta pentru a crea tabelul CARTE, cu caracteristicile de mai jos, indicand cheile la nivel de coloana? (Tabelele DOMENIU_CARTE si CARTE sunt in relatia 1:M) CARTE(codc CHAR(5), titlu VARCHAR2(30), autor VARCHAR2(30), pret NUMBER(8,2), nrex NUMBER(3), coddom CHAR(5)) a. CREATE TABLE CARTE

MUGUR
Typewritten Text
29 C
MUGUR
Typewritten Text
30 B
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 316: SOLUTII - Baze de Date - Adunate

(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));

____ 35. 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) CARTE(codc CHAR(5) , titlu VARCHAR2(30), autor VARCHAR2(30), pret NUMBER(8,2), nrex NUMBER(3), coddom CHAR(5)) 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),

MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
31 C
MUGUR
Typewritten Text
Page 317: SOLUTII - Baze de Date - Adunate

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));

____ 36. Sa se creeze tabelul asociativ imprumuta, a carui structura este data mai jos(codc, codcit si dataim sunt chei primare). Sa se precizeze legatura cu tabelele carte si cititor, aflate in relatia M:M (mai multi la mai multi) a. IMPRUMUTA (

codc CHAR(5), codcit CHAR(5), dataim DATE DEFAULT SYSDATE, datares DATE, dataef DATE, PRIMARY KEY (codel, codec, 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, datares DATE, dataef DATE, PRIMARY KEY (codel, codec, dataim));

____ 37. Sa se creeze tabelul CARTE_INFO(codc, titlu, autor) prin copiere din tabelul

MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
32 A
MUGUR
Typewritten Text
33 C
MUGUR
Typewritten Text
Page 318: SOLUTII - Baze de Date - Adunate

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’;

____ 38. Pentru a introduce in tabelul SALARIAT COD

_ANG NUME PRENUME

DATA_ANG

VARSTA SALARIU

not null numeric de 5

sircaractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

valoare implicita 0

numar de 10 cu 2 zecimale

doua coloane: Cod_Funct si Email ce varianta folosim? a. ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER COLUMN ADD

Email char(25); b. ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ADD Email CHAR(25); c. ALTER TABLE SALARIAT ADD (Cod_Funct NUMBER(2) , Email CHAR(25)); d. ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER ADD Email

char(25);

____ 39. Ce comanda creeaza tabelul SALARIAT_1 care să aiba aceeiasi structura cu tabelul SALARIAT

COD _ANG NUME PRENUME DATA_AN

G VARST

A EMAIL SALARIU

not null numeric de 5

sir de caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0

numar de

MUGUR
Typewritten Text
MUGUR
Typewritten Text
34 C
MUGUR
Typewritten Text
35 B
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 319: SOLUTII - Baze de Date - Adunate

10 cu 2 zecimale

si sa contina salariatii care au salariu >100? a. CREATE TABLE SALARIAT_1

SELECT * FROM SALARIAT WHERE SALARIU>100; b. CREATE TABLE SALARIAT_1

AS SELECT * FROM SALARIAT WHERE SALARIU>100; c. CREATE TABLE SALARIAT_1

AS SELECT FROM SALARIAT WHERE SALARIU>100; d. CREATE TABLE SALARIAT_1

AS SELECT COD_ANG, SALARIU FROM SALARIAT WHERE SALARIU>100;

____ 40. Ce comanda sterge din tabelul SALARIAT COD

_ANG NUME PRENUME

DATA_ANG

VARSTA EMAIL SALARIU

not null numeric de 5

sir de caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0

numar de 10 cu 2 zecimale

coloana nume si coloana salariu? a. ALTER TABLE SALARIAT

DROP nume, salariu; b. ALTER TABLE SALARIAT

DROP COLUMN (nume, salariu); c. ALTER TABLE SALARIAT

DROP (nume, salariu); d. ALTER TABLE SALARIAT

DROP COLUMN nume, COLUMN salariu;

____ 41. Ce comanda creeaza corect tabelul SALARIAT, specificand constrangerile? COD

_ANG NUME PRENUME DATA_AN

G VARSTA EMAIL SALARIU

cheie primara numeric de 5

not null sir de caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

unic sir de caractere de dimensiune fixa, de 30

> 0 numar de 10 cu 2 zecimale

a. CREATE TABLE salariat(

cod_ang NUMBER(5) PRIMARY KEY, nume VARCHAR2(20) NOT NULL, prenume VARCHAR2(20), data_ang DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(30) UNIQUE, salariu NUMBER(10,2) CHECK (salariu > 0));

MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
36 C
MUGUR
Typewritten Text
MUGUR
Typewritten Text
37 A
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 320: SOLUTII - Baze de Date - Adunate

b. CREATE TABLE salariat( cod_ang NUMBER(5) PRIMARY KEY, nume VARCHAR2(20) NOT NULL, prenume VARCHAR2(20), data_ang DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(30) UNIQUE, salariu NUMBER(10,2) > 0));

c. CREATE TABLE salariat( cod_ang NUMBER(5) PRIMARY KEY, nume VARCHAR2(20) NOT NULL, prenume VARCHAR2(20), data_ang DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(30), salariu NUMBER(10,2) CHECK (salariu > 0));

____ 42. 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 PRIMARY KEY (cod_cititor, cod_carte, data_imprumut);

____ 43. Pentru tabelul Salariat cod_depart cod_ang# nume pren salariu cod_funct

care este comanda corecta, pentru a modifica salariu la 3000, pentru angajatii care lucreaza in departamentul 10 si au salariul<3000? a. UPDATE salariat SET salariu=3000

WHERE cod_depart=10 AND salariu<3000; b. MODIFY salariat SET salariu=3000

WHERE cod_depart=10 , salariu<3000; c. UPDATE salariat SET cod_depart=10 AND salariu<3000

WHERE salariu=3000; d. MODIFY salariat SET salariu=3000

WHERE cod_depart=10 AND salariu<3000;

____ 44. Să se insereze în tabelul CARTE toate cărŃile din tabelul CARTE_INFO, presupunând că 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

MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
40 D
MUGUR
Typewritten Text
MUGUR
Typewritten Text
39 A
MUGUR
Typewritten Text
38 C
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 321: SOLUTII - Baze de Date - Adunate

AS SELECT * FROM CARTE_INFO;

d. INSERT INTO CARTE SELECT * FROM CARTE_INFO;

____ 45. Pentru profesorii titulari, sa se maresca cumulul cu 10% si sa se rotunjeasca la 2 zecimale. UPDATE PROF SET CUMUL = ROUND([CUMUL]*1.1,2) WHERE TITULAR="Y"; 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);

____ 46. Sã 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);

____ 47. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu cod_fuct TOTALURI

MUGUR
Typewritten Text
43 C
MUGUR
Typewritten Text
MUGUR
Typewritten Text
42 A
MUGUR
Typewritten Text
41 C
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 322: SOLUTII - Baze de Date - Adunate

cod_fac# nr_prof total_sal

care este secventa corecta pentru o instructiune INSERT cu o instructiune SELECT interna, pentru a insera in tabelul TOTALURI, un rand pentru fiecare facultate din tabelul PROF, care sa contina numarul de profesori din facultate si suma salariilor lor?

a. INSERT TO TOTALURI SELECT COD_FAC, COUNT(*) , SUM(SALARIU) FROM PROF ORDER BY COD_FAC;

b. INSERT INTO TOTALURI SELECT COD_FAC, COUNT(*) AS NR_PROF, SUM(SALARIU) AS TOTAL_SAL FROM PROF ;

c. INSERT INTO TOTALURI SELECT COD_FAC, COUNT(*) AS NR_PROF, SUM(SALARIU) AS TOTAL_SAL FROM PROF GROUP BY COD_FAC;

____ 48. Pentru tabelul PROF cod_prof# cod_fac pren salariu care este secventa corecta pentru a modifica salariile cu 10% , care nu contin valori NULL?

a. UPDATE PROF SET SALARIU = SALARIU*1.1 WHERE SALARIU NOT NULL;

b. UPDATE PROF SET SALARIU = SALARIU*1.1 WHERE SALARIU IS NOT NULL;

c. UPDATE PROF SElLECT SALARIU = SALARIU*1.1 WHERE SALARIU <>0;

____ 49. Pentru tabelul PROF cod_prof# cod_fac nume pren salariu cod_funct care este secventa corecta pentru a sterge toate cadrele didactice care sunt profesori consultanti? a. DELETE FROM PROF WHERE COD_FUNCT=’C’; b. DELETE PROF WHERE COD_FUNCT<>’C’; c. DROP FROM PROF WHERE COD_FUNCT=’C’; d. DROP PROF WHERE COD_FUNCT=’C’;

____ 50. Pentru tabelul: FAC cod_fac# denumire adresa care este secventa corecta pentru o inserare, folosind instructiunea SELECT a. INSERT INTO FAC

(COD_FAC, DENUMIRE, ADRESA) SELECT VALUES(MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA');

b. INSERT INTO FAC SELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA' FROM FAC;

c. INSERT INTO FAC (COD_FAC, DENUMIRE, ADRESA) SELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA' FROM FAC;

____ 51. Pentru tabelul PROF

MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
44 B
MUGUR
Typewritten Text
45 A
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
46 B
MUGUR
Typewritten Text
47 C
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 323: SOLUTII - Baze de Date - Adunate

cod_prof# cod_fac nume pren salariu

care este secventa corecta pentru a afisa toti profesorii impreuna cu media _ salariu pentru fiecare facultate , rotunjita la doua pozitii zecimale

a. SELECT COD_FAC, ROUND (AVG (SALARIU), 2) AS medie_salariu FROM PROF ORDER BY COD_FAC;

b. SELECT COD_FAC, ROUND (AVG (SALARIU, 2) AS medie_salariu FROM PROF GROUP BY COD_FAC;

c. SELECT COD_FAC, ROUND (AVG (SALARIU), 2) AS medie_salariu FROM PROF GROUP BY COD_FAC;

d. SELECT FROM PROF COD_FAC, ROUND AVG (SALARIU), 2 AS medie_salariu GROUP BY COD_FAC;

____ 52. Pentru tabelul PROF cod_prof# cod_fac nume pren salariu care este secventa corecta pentru a afisa suma salariilor tuturor profesorilor din universitate.

a. SELECT SUM (Salariu) AS Total_Salariu FROM PROF;

b. SELECT SUM (Salariu) AS Total_Salariu FROM PROF GROUP BY COD_FAC;

c. SELECT SALARIU, SUM (Salariu) AS Total_Salariu FROM PROF;

d. SELECT COD_FAC, SUM (Salariu) AS Total_Salariu FROM PROF;

____ 53. Pentru tabelul PROF cod_prof# cod_fac nume pren salariu care este secventa corecta pentru a afisa toti profesorii pentru care COD_FAC =1 si salariu>=1200, sau toti profesorii pentru care COD_FAC =3 si salariu < 2000. a. SELECT COD_FAC, COD_PROF, NUME, SALARIU

FROM PROF WHERE (COD_FAC=1 OR SALARIU >1200) AND (COD_FAC =3 OR SALARIU<2000);

b. SELECT COD_FAC, COD_PROF, NUME,SALARIU FROM PROF WHERE (COD_FAC=1 AND SALARIU >1200) AND (COD_FAC =3 AND SALARIU<2000);

MUGUR
Typewritten Text
MUGUR
Typewritten Text
48 A
MUGUR
Typewritten Text
MUGUR
Typewritten Text
49 C
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 324: SOLUTII - Baze de Date - Adunate

c. SELECT COD_FAC, COD_PROF, NUME, SALARIU FROM PROF WHERE (COD_FAC=1 AND SALARIU >1200) OR (COD_FAC =3 AND SALARIU<2000);

d. SELECT COD_FAC, COD_PROF, NUME,SALARIU FROM PROF WHERE COD_FAC=1 OR SALARIU >1200 OR (COD_FAC =3 OR SALARIU<2000);

____ 54. Pentru tabelul PROF cod_prof# cod_fac nume pren salariu care secventa este corecta pentru a afisa citi profesori nu au o valoare introdusa pe coloana salariu? a. SELECT COUNT(salariu)

FROM PROF WHERE SALARIU =0;

b. SELECT COUNT(*) FROM PROF WHERE SALARIU =NULL;

c. SELECT COUNT(*) FROM PROF WHERE SALARIU IS NOT NULL;

d. SELECT COUNT(*) FROM PROF WHERE SALARIU IS NULL;

____ 55. O uniune (join) fara o clauzä 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)

____ 56. 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

____ 57. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu FAC cod_fac# denumire adresa care este secventa corecta pentru o interogare de uniune interna(inner join) care sa afiseze toti profesorii si denumirile facultatilor la care predau, in ordinea crescatoare a denumirilor

a. SELECT NUME, PREN, DENUMIRE FROM FAC, PROF WHERE A.COD_FAC =B.COD_FAC ORDER BY FAC.DENUMIRE;

MUGUR
Typewritten Text
50 D
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
51 C
MUGUR
Typewritten Text
A
MUGUR
Typewritten Text
B
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 325: SOLUTII - Baze de Date - Adunate

b. SELECT NUME, PREN, DENUMIRE FROM FAC, PROF WHERE FAC.COD_FAC=PROF.COD_FAC ORDER BY FAC.DENUMIRE;

c. SELECT NUME, PREN, DENUMIRE FROM FAC, PROF WHERE FAC.COD_FAC=PROF.COD_FAC;

____ 58. Să se obtinapentru fiecare carte, codul sau şi 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;

____ 59. Care este secventa corecta care să afişeze numărul cărŃilor împrumutate cel puŃin de două ori (pentru fiecare carte împrumutată mai mult decât o dată să se obŃină numărul de câte ori a fost împrumutată).

a. SELECT COUNT(COUNT(codel))

FROM imprumuta GROUP BY codcarte HAVING COUNT(*)>1;

b. SELECT COUNT(codel) FROM imprumuta GROUP BY codcarte HAVING COUNT(*)>1;

c. SELECT COUNT(COUNT(codel)) FROM imprumuta WHERE COUNT(*)>1;

d. SELECT COUNT(codel) FROM imprumuta ORDERBY BY codcarte HAVING COUNT(*)>1;

____ 60. Care este secventa corecta care afiseaza pentru fiecare domeniu de carte, numărul cărŃilor din domeniu, media preŃurilor şi numărul total de exemplare a. SELECT codcarte, COUNT(*), AVG(pret)

FROM CARTE

MUGUR
Typewritten Text
C
MUGUR
Typewritten Text
B
MUGUR
Typewritten Text
C
MUGUR
Typewritten Text
Page 326: SOLUTII - Baze de Date - Adunate

GROUP BY codcarte; b. SELECT coded, AVG(pret), SUM(nrex)

FROM CARTE GROUP BY codcarte;

c. SELECT codcarte, COUNT(*), AVG(pret), SUM(nrex) FROM CARTE GROUP BY codcarte;

d. SELECT COUNT(*), AVG(pret), SUM(nrex) FROM CARTE ORDER BY codcarte;

____ 61. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu FAC cod_fac# denumire adresa care este secventa corecta pentru o interogare de uniune externa catre stanga, care sa afiseze toti profesorii si denumirile facultatilor la care predau a. SELECT NUME, PREN, DENUMIRE

FROM FAC PROF LEFT OUTER JOIN ON A.COD_FAC = B.COD_FAC; b. SELECT NUME, PREN, DENUMIRE

FROM FAC LEFT OUTER JOIN PROF ON A.COD_FAC = B.COD_FAC;

c. SELECT NUME, PREN, DENUMIRE FROM FAC A LEFT OUTER JOIN PROF B ON A.COD_FAC = B.COD_FAC;

____ 62. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu cod_funct FUNCTII cod_funct# nume_funct care este secventa corecta pentru o subinterogare necorelata, care sa afiseze toate functiile pentru care nu exista profesorii incadrati

a. SELECT cod_funct, nume_funct FROM functii WHERE cod_funct NOT IN (SELECT DISTINCT cod_funct FROM prof);

b. SELECT cod_funct, nume_funct FROM functii WHERE cod_funct NOT IN SELECT DISTINCT cod_funct FROM prof;

c. SELECT cod_funct, nume_funct FROM functii WHERE cod_funct IN (SELECT cod_funct FROM prof);

____ 63. Care este comanda corecta care pentru fiecare facultate, se 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

MUGUR
Typewritten Text
C
MUGUR
Typewritten Text
A
MUGUR
Typewritten Text
C
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 327: SOLUTII - Baze de Date - Adunate

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;

____ 64. Să se obŃină titlurile şi preŃurile cărŃilor mai scumpe decât cartea având titlul “Baze de date”, al cărui 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’;

____ 65. Pentru tabelele PROFESORI(codp, nume, pren, salariu) COPII (codp, nume_c, virsta) care este secventa corecta pentru a afisa profesorii cu 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 codp IN (SELECT codp FROM COPII);

MUGUR
Typewritten Text
MUGUR
Typewritten Text
B
MUGUR
Typewritten Text
A
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 328: SOLUTII - Baze de Date - Adunate

c. SELECT a.nume, a.pren FROM PROFESORI A WHERE a.codp IN COPII;

d. SELECT a.nume, a.pren FROM PROFESORI A WHERE a.codp IN DISTINCT codp FROM COPII;

____ 66. Pentru tabelele PROFESORI(codp, nume, pren, salariu) COPII (codp, nume_c, virsta) care este secventa corecta pentru a afisa profesorii fara copii a. SELECT a.nume, a.pren

FROM PROFESORI A WHERE codp NOT IN (SELECT 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;

d. SELECT a.nume, a.pren FROM PROFESORI A WHERE a.codp IS NOT (SELECT DISTINCT codpFROM COPII);

____ 67. 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), valoar 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.codact=b.codact AND b.nume=‘&x’;

b. SELECT a.seriain, a.seriasf, b.nume FROM actiuni , actionari WHERE a.codact=b.codact AND nume=‘&x’;

c. SELECT a.seriain, a.seriasf, b.nume FROM actiuni a, actionari b WHERE a.codact=b.codact ;

d. SELECT a.seriain, a.seriasf, b.nume FROM actiuni a, actionari b WHERE a.codact=b.codact OR b.nume=‘&x’;

____ 68. Se considera pentru actionarii unei firme, tabelul ACTIUNI (cod_act number(5), seriain number(8), seriasf number(8), valoar number(8)) (unde seriain si seriasf reprezinta seria de inceput, respectiv de sfarsit al intervalului de actiuni pe care il are un actionar).

MUGUR
Typewritten Text
B
MUGUR
Typewritten Text
A
MUGUR
Typewritten Text
D
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 329: SOLUTII - Baze de Date - Adunate

Care este secventa corecta care afiseaza suma necesara firmei pentru plata tuturor devidentelor (numrul 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;

____ 69. 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’;

____ 70. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu cod_funct FAC cod_fac# denumire adresa care este secventa corecta pentru o subinterogare corelata, care sa afiseze toate facultatile pentru care suma salariile profesorilor este mai mare 10000 a. SELECT DISTINCT DENUMIRE

FROM FAC WHERE 10000< (SELECT sum(salariu) FROM PROF WHERE A.COD_FAC=B.COD_FAC);

b. SELECT DISTINCT DENUMIRE FROM FAC A WHERE 10000< ( SELECT sum(salariu) FROM PROF B WHERE A.COD_FAC=B.COD_FAC);

c. SELECT DISTINCT DENUMIRE FROM FAC A WHERE 10000< SELECT sum(salariu) FROM PROF B WHERE A.COD_FAC=B.COD_FAC;

____ 71. Care este comanda corecta pentru a afisa toti salariatii , in ordine crescatoare dupa nume, care sunt manageri ? a. SELECT DISTINCT sef.nume, angajat.cod_manager

FROM salariati sef, salariati angajat

MUGUR
Typewritten Text
MUGUR
Typewritten Text
C
MUGUR
Typewritten Text
B
MUGUR
Typewritten Text
A
MUGUR
Typewritten Text
Page 330: SOLUTII - Baze de Date - Adunate

WHERE sef.cod_salariat= angajat.cod_manager ORDER BY sef.nume;

b. SELECT DISTINCT sef.nume, angajat.cod_manager FROM salariati sef, salariati angajat WHERE cod_salariat= cod_manager ORDER BY sef.nume;

c. SELECT DISTINCT nume, cod_manager FROM salariati sef, salariati angajat WHERE sef.cod_salariat= angajat.cod_manager;

d. ELECT DISTINCT nume, cod_manager FROM salariati sef, salariati angajat WHERE cod_salariat= cod_manager ORDER BY sef.nume;

____ 72. Care este comanda corecta care sa afiseze 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’);

____ 73. 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;

MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
C
MUGUR
Typewritten Text
D
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 331: SOLUTII - Baze de Date - Adunate

____ 74. Care este comanda corecta care determina micsorarea salariilor cu 10%, cu rotunjire la 2 zecimale , a angajatilor care nu sunt titulari? a. UPDATE salariat

SET salariu=ROUND(salariu*0.9, 2); b. UPDATE salariat

SET salariu=ROUND(salariu*1.1) WHERE titular =’N’;

c. UPDATE salariat SET salariu = ROUND(salariu*0.9, 2) WHERE TITULAR=’N’;

d. UPDATE salariat SET salariu=ROUND(salariu+salariu*0.1) WHERE titular =’Y’;

____ 75. Care este comanda corecta care afiseaza numele si salariul angajatilor condusi direct de ‘ENE DAN’? a. SELECT nume, salariu

FROM salariati WHERE cod_ang = (SELECT cod_manager FROM salariati WHERE UPPER(nume) ='ENE' , UPPER(pren) ='DAN' );

b. SELECT nume, salariu FROM salariati WHERE cod_manager IN (SELECT cod_ang FROM salariati WHERE nume ='ENE' , pren ='DAN' );

c. SELECT nume, salariu FROM salariati (SELECT cod_ang FROM salariati WHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN' );

d. SELECT nume, salariu FROM salariati WHERE cod_manager = (SELECT cod_ang FROM salariati WHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN' );

____ 76. Care este comanda corecta care afiseaza numele cititorilor care au carti nerestituite? a. SELECT nume_cititor

FROM imprumuta WHERE data_restituirii = NULL;

b. SELECT nume_cititor FROM imprumuta WHERE data_restituirii IS NOT NULL;

c. SELECT nume_cititor FROM imprumuta WHERE data_restituirii IS NULL;

d. SELECT nume_cititor FROM imprumuta WHERE data_restituirii > SYSDATE;

____ 77. Care este comanda corecta care sterge valoarea coloanei salariu pentru angajatii care sunt angajati cu contract de colaborare?

a. DELETE salariu

FROM salariati WHERE contract=’colaborare’;

b. UPDATE salariati

MUGUR
Typewritten Text
C
MUGUR
Typewritten Text
D
MUGUR
Typewritten Text
C
MUGUR
Typewritten Text
D
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 332: SOLUTII - Baze de Date - Adunate

SET salariu IS null WHERE contract=’colaborare’;

c. DROP salariu FROM salariati WHERE contract=’colaborare’;

d. UPDATE salariati SET salariu=null WHERE contract=’colaborare’;

____ 78. Care este comanda corecta care afiseaza codul departamentelor, numele departamentelor si suma salariilor pentru fiecare departament? a. SELECT cod_departament, nume_departament, SUM(salariu)

FROM salariati s, departamente d GROUP BY cod_departament, nume_departament;

b. SELECT cod_departament, nume_departament, SUM(salariu) FROM salariati s, departamente d WHERE s.cod_departament=d.cod_departament GROUP BY cod_departament;

c. SELECT cod_departament, nume_departament, SUM(salariu) FROM salariati s, departamente d WHERE s.cod_departament=d.cod_departament GROUP BY cod_departament, nume_departament;

d. SELECT cod_departament, nume_departament, SUM(salariu) FROM salariati, departamente WHERE s.cod_departament=d.cod_departament GROUP BY cod_departament, nume_departament;

____ 79. 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;

____ 80. 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

MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
C
MUGUR
Typewritten Text
B
MUGUR
Typewritten Text
D
MUGUR
Typewritten Text
MUGUR
Typewritten Text
MUGUR
Typewritten Text
Page 333: SOLUTII - Baze de Date - Adunate

(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);

Page 334: SOLUTII - Baze de Date - Adunate

Adevarat / Fals Pentru a fi in a treia forma normala , o relatie trebuie sa nu fie in prima forma normala sau in a doua forma normala:- Adevarat - Fals Pentru a fi in a treia forma normala o relatie nu trebuie sa fie in prima sau a doua forma normala?- Adevarat - Fals Probleme de dependenta tranzitiva apar atunci cand un atribut non-cheie depinde de un alt atribut non-cheie- Adevarat - Fals Diagrama ERD este un model de date conceptual de nivel înalt, dependent de platforma hardware utilizată şi de tipul de RDBMS (SGBD) – ului utilizat- Adevarat - Fals Folosind aplicatia Microsoft Access, se poate administra toata informatia într-o singura baza de date (Database)?- Adevarat - Fals Folosing MSAccess se poate administra toata informatia intr-o singura baza de date ?- Adevarat - FalsA doua forma normala nu rezolva anomaliile cauzate de a. Dependentele partiale de cheia primarăb. Grupurile repetitivec. Dependentele tranzitived. Atributele multi valoaree. Relatiile de tip unu-la-mai-multi

A doua formă normală rezolvă anomaliile cauzate de a. Grupurile repetitiveb. Dependentele partiale de cheia primarăc. Grupurile repetitive si atributele multivaloared Dependentele tranzitive

A treia forma normala rezolva anomaliile cauzate de : si 4 var de raspuns a. Dependentele partiale de cheia primară b. Grupurile repetitive c. Dependentele tranzitive d. Atributele multivaloare e. Relatiile de tip unu-la-mai-multi

Atunci când se foloseste operatorul “+” , apare o eroare de tipul Type Mismatch (Nepotrivire de tip) in cazul cand a. ambii operanzi sunt valori numericeb. ambii operanzi sunt siruri de caracterec. un operand este valoare numerica si celalalt un sir de caractered. un operand este valoare numerica si celalalt de tipul date/time

Page 335: SOLUTII - Baze de Date - Adunate

Care din următoarele baze de date nu este RDBMSa. Postage SQLb. Oracle Databasec. My SQLd. Microsoft SQL Servere. Excel database

Care nu este un concept utilizat pentru a descrie formal-uzual-fizic elementele de baza ale organizarii datelora. relatie-tablou-fisierb. tuplu-linie-inregistrarec. atribut-coloana-campd. domeniu-functie-functie

Care nu este o interogare de actiune?a. cu actualizareb. cu creeare de tabelec. cu adaugare si stergered. cu parametru

Care din interogarile cu actiune pot afecta doar campuri izolate?:a. cu actualizareb.cu adaugarec.cu stergered.cu creare de tabele

Clinetii SQL oferiti de Microsoft nu sunt:a. SqLWorsheetb. sql PLUS c. iSqld. Isql PLUS

Campurile calculate intr-un raport se pot introduce in modul Design View:a. numai in banda Report Footerb. numai in banda Group Footerc. in banda de Detail,Group F.si Report F.d. numai in banda de Detail

Cind se realizeaza un table cu Report View din tabele relationale, informatiile fiind grupate pe parte one a relatiei si se opteaza pentru SUMMARY OPTION atunci:a. se introduc calculele solicitate in banda de subsol de grupb. se introduc calculele solicitate in banda de detaliu de grupc. se introduc calculele solicitate in benzile de subsol de grup de subsol de raportd. se introduc calculele solicitate in banda de detaliu de grup si subsol de grup

Cate reguli a emis Codd / Modelul relational conceput si dezvoltat de E.F. Codd cuprinde un set de a. 25 regulib. 13 regulic. 100 regulid 15 reguli

Page 336: SOLUTII - Baze de Date - Adunate

Cand operatorii AND si OR sunt combinati in aceeasi clauza WHEREa. Operatorul AND are prioritate mai mare decat operatorul OR b. Sistemul DBMS returneaza un mesaj de eroare c. Operatorul AND are prioritate mai mica decat operatorul OR d. Parantezele, sunt obligatorii

Cand operatorii AND §i OR sunt combinati in aceeasi clauza WHEREa. Sistemul SGBD returneaza un mesaj de eroareb. Operatorul AND are prioritate mai mare decat operatorul ORc. Operatorul AND are prioritate mai mica decat operatorul ORd. Parantezele, sunt obligatoriie. Parantezele sunt optionale

Componentele unei baze de date relationale NU includ :a. Relatiib. tabelec. restrictii d. diagrame ERD Componentele unei baze de date relationale nu includ:a.indexurib.tabelec.diagrame ERD d.restrictiie.relatii

<!>Criteriul de selectie se poate seta a. prin intermediul celulei TOTALS + Expression Builder b. prin intermediul celulei Criteria +Expression Builder sau prin tastarea expresiei c. prin intermediul celulei Sort + tastarea expresiei d. prin intermediul celulei TOTALS si Criteria, ambele ambele avand acelasi efect

<!>Criteriul de selectie se poate setaa. prin intermediul celulei TOTALS + Expression Builderb. prin intermediul celulei Criteria +Expression Builder sau prin tastarea expresieic. prin intermediul celulei Sort + tastarea expresieid. prin intermediul celulei TOTALS si Criteria, ambele ambele avand acelasi efect

<!>Calificatorii numelor de coloane NU :a. rezolva referintele ambigue la coloaneb. pot fi nume de tabelec. pot fi pseudonime ptr. numele de coloane, definite in clauza FROMd. pot fi pseudonime pentru numele de tabele, definite in clauza FROM

<!>Calificatorii numelor de coloane NU :a. rezolva referintele ambigue la coloaneb. pot fi nume de tabelec. pot fi pseudonime pentru numele de coloane, definite in clauza FROMd. pot fi pseudonime pentru numele de tabele, definite in clauza FROM

Page 337: SOLUTII - Baze de Date - Adunate

Daca relationarea tabelelor dintr-o interogare s-a facut prin definirea legaturilor implicite (din fereastra Relationships), atunci:a. trebuie refacute legaturile in cadrul interogariib. acestea sunt ignorate in timpul rularii interogariic. adaugarea lor intr-o interogare se face impreuna cu relatiile dintre eled. tabelele nu trebuiesc sa fie legate in interogare

Dacă tabelele dintr-o interogare nu sunt legate una de alta fie direct (în interogare), fie indirect (prin legătură implicită, din fereastra Relationship), Acces afisează a. Toate combinatiile de înregistrări (produs cartezian) dintre câmpurile tabelelor b. Numai înregistrările din prima tabelă c. Numai înregistrările din ultima tabelă d. Nu afisează nimic

Definitia unei coloane din instructiunea CREATE TABLE nu poate include a. Numele tabelului …sau [/restrictie la nivel de tabel/] b. O clauză DEFAULT c. O clauză NULL sau NOT NULL d Numele coloanei

<!>Din ferestra Relationships la apasarea butonului Join Type se poate selecta modul in care vor fi extrase datele din tabele, mod care nu poate fi:a. numai acele înregistrari în care câmpurile din legatura coincidb. toate înregistrarile din tabela principala si numai acele înregistrari din tabela corelata în care câmpurile din legatura coincid.c. toate înregistrarile din tabela corelata si numai acele înregistrari din tabela principala în care câmpurile din legatura coincid.d. toate inregistrarile din ambele tabele

<!>Din ferestra Relationships la apasarea butonului Join Type se poate selecta modul in care vor fi extrase datele din tabele, mod care nu poate fi:a. numai acele înregistrari în care câmpurile din legatura coincid b. toate înregistrarile din tabela principala si numai acele înregistrari din tabela corelata în care câmpurile din legatura coincid. c. toate înregistrarile din tabela corelata si numai acele înregistrari din tabela principala în care câmpurile din legatura coincid. d. toate inregistrarile din ambele tabele

Expresiile nu se utilizează în a. Definirea unui criteriu de selectie b. Crearea unui câmp calculat c. Actualizarea unor înregistrări într-o interogare d. Definirea proprietătii Validation Text a unei tabele

Functia AVG(Expr):a. include campuri de valoare NULL in calculb. poate fi folosita intr-o interogarec. calculeaza media geometrica a datelor din acel campd. operanzii din Expr nu pot include o functie definita de utilizator.

Page 338: SOLUTII - Baze de Date - Adunate

Functiile SQL matematice standard NU includ :-ROUND-ABS-CAST-EXP

Functia LTRIMa. Elimina spatiile de la sfarsitul sirurilor de caractereb. Elimina spatiile de la inceputul sirurilor de caracterec. Poate fi imbricata cu alte functiid. Inlocuieste valorile nule cu alte valori in sirurile de caracteree. Elimina spatiile de la inceputul si de la sfarsitul sirurilor de caractere

Integritatea referintiala este un sistem de reguli folosit de Acces pentru a se asigura ca: a. relatiile intre tabele sunt valide b. relatiile intre tabele nu se modica c. relatiile intre tabele sunt valide si ca nu se sterg sau modica accidental datele in legatura d. nu sunt definite relatii Integritatea referentială nu se poate seta atunci când a. Câmpurile în relatie au acelasii tip de date b. Tabelele nu apartin aceleasi baze de date Access c. Tabelele apar in aceleasi baze de date Access d. Câmpul în relatie din tabela principală este cheie primară sau are un index unic

In cadrul diagramei entitate-relatie (ERD) care nu este o entitate specialaa. Entitate dependentã b. Entitate tranzitivac. Subentitated. Superentitate Interogariea de tip functiea. poate calcula suma, media, numararea, minimul, maximul, varianta sau deviatia standard pentru unul sau mai multe câmpuri dintr-o tabela in linia Totals, fie pentru toate înregistrarile, fie pe unul sau mai multe grupuri de înregistrari b. poate calcula suma, media, numararea, minimul, maximul, varianta sau deviatia standard pentru unul sau mai multe câmpuri dintr-o tabela in linia Totals, numai pentru toate înregistrarile c. poate calcula suma, media, numararea, minimul, maximul, varianta sau deviatia standard pentru unul sau mai multe câmpuri dintr-o tabela in linia Totals, numai pentru pe un grup de înregistrarid. prin intermediul liniei Criteria nu pot fi afectate rezultatele calcularii. Integritatea referentială nu se poate seta atunci când a. Câmpurile în relatie au acelasii tip de date b. Tabelele nu apartin aceleasi baze de date Access c. Tabelele apar in aceleasi baze de date Access d. Câmpul în relatie din tabela principală este cheie primară sau are un index unic

Page 339: SOLUTII - Baze de Date - Adunate

Limbajul DML nu include următoarea instructiune SQL a. INSERT b. UPDATE c. SELECT …sau [/CREATE /] d. DELETE

Modelul relational NU are ca regula de integritate structurala :a. Unicitatea cheii primareb. Intregritatea entitatii.Atributele cheii primare sunt diferite de valoarea NULLc. Integritatea referiirii. O cheie externa trebuie sa corespunda unei valori a cheii primare associate. d. Integritatea referiirii. O cheie externa trebuie sa fie NULL in intregime, ori sa corespunda unei valori a cheii primare asociate

Modelul relațional conceput și dezvoltat de E.F. Codd cuprinde un set de a. 25 regulib. 13 reguli c. 100 regulid. 15 reguli Nu sunt clientii SQL oferiti de Oracle a. SQL Worksheet b. My SQL c. SQL*Plus d. iSQL*Plus

Nu se selecteaza intr-o interogarea. un singur câmp prin executarea unui click pe numele unui câmpului b. un bloc de câmpuri prin click pe primul câmp din bloc, se tine apasata tasta Shift si apoi se executa click pe ultimul câmp din blocul dorit.c. mai multor câmpuri dar nesituate intr-un bloc atunci se executa click pe fiecare dintre ele tinându-se apasata tot timpul tasta Shift d. toate cimpurile prin dublu-click pe bara de titlu a tabelei sau printr-un singur click pe asterix (*). Normalizarea nu rezolva anomalia:a. de creareb. de stergerec. de actualizared. de inserare

Nu este functie SQL matematica standard:a. ROUNDb. EXPc. ABSd. CAST

Page 340: SOLUTII - Baze de Date - Adunate

Numele unei coloane dintr-un tabel :a. Nu trebuie sa fie in baza de dateb. Nu trebuie sa fie in cadrul unui tabelc. Trebuie sa fie specificat in instructiunea ALTER TABLEd. Trebuie sa fie specificat in instructiunea CREATE TABLE …sau[/trebuie sa fie unic in cadrul tabelului/]

O interogare parametrizată este o interogare a. În care una sau mai multe valori ale criteriilor de selectie sunt specificate în mod interactive b. În care numai una dintre valorile criteriilor de selectie poate fi specificată c. Care atunci când se rulează afisează o fereastră creată de utilizator d.Care atunci când se rulează afisează o fereastră proprie în care afisează un rezultat O uniune incrucisata(cross join) a. O uniune Naturală b. N produs cartezian c. O uniune externă d. O uniune Internă O uniune (Join) fara o clauza WHERE sau o clauza JOIN a. Are ca rezultat un mesaj de eroareb. Nu returnează nici un rând din setul de rezultatec. Reprezintă o uniune externă (outer join)d. Reprezintă o uniune internă (inner join)e. Are ca rezultat un produs cartezian O uniune de egalitate(equijoin):a. este cunoscuta si sub numele de auto-uniune(slfjoin)b. este cunoscuta si sub numele de uniune externa(outerjoin)c. realizeaza intotdeauna legarea randurilor folosind o conditie de egalitate(=)d. realizeaza intotdeauna legarea randurilor folosind o conditie de inegalitate(<>) O cheie Primara nu poate fi setata: U click-dreaptape campul dorit sa fie cheie primarasi din meniul afisat se apasa Primary Key sau U se selecteaza campul respectiv si se apasa butonul de Primary Key meniul Design View,U se deschide fereastra de definire a unui index caruia i se adreseaza proprietatea Primary la Yes.a. cu click dreapta pe campul dorit sa fie cheie primara si din meniul afisat se apasa Primary Key.b. daca se deschide fereastra de definire a unui index si se creeaza un index caruia i se seteaza proprietatea Primary la Yes.c. din FieldProprerties,Indexed,Yes(No Duplicates)d. daca se selecteaza campul respectiv si se apasa butonul de Primary Key din meniul Design View.

O interogare incrucisata (Crosstab) este realizata dintr-o o interogare de selectie, din care se poate alegea. toate campurile interogariib. cel mult 3 campuri pentru antet de linii, un camp pentru antet coloana si o functie aplicata valorilor dintr-un campc. cal putin 3 campuri pentru antet de linii, si mai multe campuri entru antet coloana si o functie aplicata valorilor dintr-un cimpd. nu se poate realiza astfel de interogari

Page 341: SOLUTII - Baze de Date - Adunate

O forma (sau formular) reprezinta modalitatea de aa. modifica date numai dintr-o singura tabelab. modifica, adauga, sterge date din mai multe tabelec. modifica date dintr-o singura interogared. modifica date dintr-o interogare si un tabel

O baza de date estea. O colectie de date interrelationate gestionate ca o singura unitateb. Un produs software furnizat de un producator de baze de datec. O structura de date, cum ar fi un tabel, o vizualizare sau un indexd. Definita in acelasi mod de toti producatorii de software

O forma nu poate fi creataa. pe baza unei interogari de actiuneb. pe baza unui tabelc. pe baza unei interogarid. pe baza mai multor tabele O forma (sau formular) reprezinta modalitatea de aa. modifica date numai dintr-o singura tabelab. modifica, adauga, sterge date din mai multe tabelec. modifica date dintr-o singura interogared. modifica date dintr-o interogare si un tabel O cheie Primara nu poate fi setata: a. cu click dreapta pe campul dorit sa fie cheie primara si din meniul afisat se apasa Primary Key.b. daca se deschide fereastra de definire a unui index si se creeaza un index caruia i se seteaza proprietatea Primary la Yes.c. din FieldProprerties,Indexed,Yes(No Duplicates)d. daca se selecteaza campul respectiv si se apasa butonul de Primary Key din meniul Design View. O uniune de egalitate(equijoin):a. este cunoscuta si sub numele de auto-uniune(slfjoin)b. este cunoscuta si sub numele de uniune externa(outerjoin)c. realizeaza intotdeauna legarea randurilor folosind o conditie de egalitate(=)d. realizeaza intotdeauna legarea randurilor folosind o conditie de inegalitate(<>)

O clauza JOIN folosind cuvantul cheie USINGa. Nu poate fi folosita atunci cand coloanele prin care se face legarea tabelelor au aceleasi numeb. Nu poate fi folosita atunci cand coloanele prin care se face legarea tabelelor au nume diferitec. Defineste o uniune externad. Defineste o auto-uniune

O interogare cu stergere (Delete Query) poate:a. sterge doar cimpurile izolateb. sterge un grup de inregistrari dintr-un tabelc. sterge un grup de inregistrari dintr-un table sau din mai multe tabele legate intr-o relatie unu-la- mai- multi daca stergerile in cascada sunt actived. sterge o inregistrare dintr-un tabel la un moment dat

Page 342: SOLUTII - Baze de Date - Adunate

Operatorul + genereaza eroarea Type Mismatch atunci cand a. ambii operanzi sunt siruri de caractereb. ambii operanzi sunt numerec. un operator este numar si unul sir de caractered. un operator este numar si unul data

O interogare incrucisata (Crosstab) este realizata dintr-o interogare de selectie din care se poate alege:a. toate campurile interogatoriib. cel mult 3 campuri pt. antet de linii,un camp pt. antet coloana si o functie aplicata valorilor dintr-un camp.c. cel putin 3 campuri pt. antet de linii si mai multe campuri penru antet coloana si o functie aplicata valorilor dintr-un camp.d. nu se poate realiza astfel de interogari.

O instructiune UPDATE trebuie sa includa:a. o clauza WHEREb. o clauza SET c. o clauza SELECTd. o clauza INSERT

O interogare parametrizata este o interogarea. in care una sau mai multe valori ale criteriilor de selectie sunt specificate in mod interactivb. in care numai una dintre valorile criteriilor de selectie poate fi specificatac. care atunci cand se ruleaza afiseaza o fereastra creata de utilizatord. care atunci cand se ruleaza afiseaza o fereastra proprie in care afiseaza un rezultat

O forma (formulare) reprezinta modalitatea de a:a. modifica date numai dintr-o singura tabela b. modifica, adauga, sterge date din mai multe tabelec. modifica date dintr-o singura interogared. modifica date dintr-o interogare si un tabel

O interogare MakeQuery nu realizeaza:a. Realizarea unei copii de siguranta a unei tabeleb. Schimbarea ordinii inregistrarilor dintr-o tabelac. Crearea unei tabele pentru exportul intr-o alta baza de date MS Accessd. Crearea unei tabele ce va contine numai inregistrari vechi

<!>O interogare cu actiune este o interogare care realizeaza modificari asupra:a. unei singure inregistrari dintr-un tableb. asupra mai multor inregistrari din una sau mai multe tabelec. unei singure tabele la un moment datd. mai multor tabele la un moment dat

<!>O interogare cu actiune este o interogare care realizeaza modificari asupra:a. unei singure inregistrari dintr-un tableb. asupra mai multor inregistrari din una sau mai multe tabelec. unei singure tabele la un moment datd. mai multor tabele la un moment dat

Page 343: SOLUTII - Baze de Date - Adunate

Operatorul BETWEENa. Specifică un domeniu de valori care include si capeteleb. Poate fi rescris folosind operatorii <= si NOT <=c. Selectează rândurile adăugate în tabel într-un anumit interval de timpd. Nu este inclus în standardul ISO/ANSI

Proprietatea Format se foloseste pt:a. a seta modul in care campurile de tip text sunt afisateb. a stoca datele intr-un anumit format c. a seta modul in care campul de tip numar sunt tiparited. a seta modul in care datele sunt afisate si tiparite

Proprietatea de Indexare (Indexed)a. seteaza un index pe un singur cimpb. creaza si seteaza un index pe un cimp al unei tabelec. se foloseste pentru a mari viteza de interogare a unei tabele pe unul sau mai multe campuri d. afecteaza ordinea de stocare (ordinea fizica) a inregistrarilor

Pentru a crea un raport utilizând generatorul (Report Wizard) avem planul general cu optiunea implicita a. Columnarb. Tabularc. Justified

Pentru a introduce câmpuri calculate într-un raport se foloseşte elemente din bara toolboxa. Label Box Aab. Text Box abc. Checkd. Combo Box

Pentru aducerea in prima forma normala a unei relatii ne-normalizate se operatie nu se efectueaza ?a. Grupurile repetitive sunt mutate intr-o noua relatieb. Atributele multivaloare sunt mutate intr-o noua relatiec. Atributele care sunt dependente tranzitiv sunt eliminated. Identificatorul unic al unei relatii originale este copiat in noua relatie

Pentru a specifica criterii de selectii pentru o interogare, acestea nu se faca. numai pentru un campb. pentru mai multe campuri, daca expresiile pentru criteriile de selectie sunt pe aceeasi linie in tabelul de design, cand Access foloseste operatorul And, adica vor fi returnate numai inregistratile ce indeplinesc toate criteriilec. pentru mai multe campuri, daca expresiile pentru criteriile de selectie sunt in linii diferite ale tabelului de design, cand Access foloseste operatorul Or, adica vor fi returnate numai inregistratile ce indeplinesc cel putin unul din criteriile de selectied. in celula TOTALS a tabelului de design

Problemele de dependenta partiala nu:a. sunt rezolvate de a 2 forma normalab. sunt rezolvate de a 3 forma normalac. apar atunci cand un atribut non-cheie depinde doar de o parte a cheii primared. pot aparea numai in relatii cu chei primare concatenate

Page 344: SOLUTII - Baze de Date - Adunate

Pentru realizarea unei interogari cu actualizare nu se efectueaza pasul:a. se creeeaza o interogare b. se adauga tabelele si se selecteaza campurile ce se doresc actualizatec. se stabilesc criteriile de selectie pt acestea,daca exista atunci se apasa butonul Update Query din meniul Query Type din Toolbard. in celula Update To …(aici cred ca e incompleta)

Problemele de dependenta partiala nu:a. sunt rezolvate de a 2 forma normalab. sunt rezolvate de a 3 forma normalac. apar atunci cand un atribut non-cheie depinde doar de o parte a cheii primared. pot aparea numai in relatii cu chei primare concatenate Pentru realizarea unei interogari cu actualizare nu se efectueaza pasul:a. se creeeaza o interogare b. se adauga tabelele si se selecteaza campurile ce se doresc actualizatec. se stabilesc criteriile de selectie pt acestea,daca exista atunci se apasa butonul Update Query din meniul Query Type din Toolbard. in celula Update To (aici cred ca e incompleta) Pentru a introduce câmpuri calculate într-un raport se foloseste din bara toolbox:a. Label Box Aab. Text Box abc. Checkd. Combo Box

Prima forma normala rezolva anomaliile cauzate dea. Grupurile repetitive si atributele multivaloare b. Dependentele partiale de cheia primara c. Dependentele tranzitive d. Relatiile de tip unu-la-mai-multi

Pentru a specifica criterii de selctie pentru o interogare, aceste nu se faca. numai pentru un cimp b. penrtru mai multe cimpuri, daca expresiile pentru criteriile de selectie sunt pe aceeasi linie în tabelul de design, cand Access foloseste operatorul And, adica vor fi returnate numai înregistrarile ce îndeplinesc toate criteriile. c. pentru mai multe criterii pe acelasi camp, expresiile sunt în linii diferite ale tabelului de deisgn cand Access foloseste operatorul Or, adica vor fi returnate acele înregistrari ce îndeplinesc cel putin unul dintre criteriile de selectie. d. in celula TOTALS a tabelului design Relatia m:n devine in modelul relational:a. tabel asociativ cu cheia primara formata din 2 chei externe pt. cele 2 tabele asociateb. tabel asociativ cu cheia primara formata din 2 chei externe pt. cele 2 tabele asociate plus eventuale coloane aditionalec. chei externed. entitate independenta

Page 345: SOLUTII - Baze de Date - Adunate

Sintaxa corectă pentru o restricţie NOT NULL este a. nume_coloană tip-de-date IS NOT NULLb. nume_coloană tip_de_date NOT NULLc. DEFAULT [NULL | NOT NULL]d. CREATE NOT NULL INDEX ON nume_coloană

Sintaxa corecta pentru o restrictie referentiala estea. [CONSTRAINT nume—restrictie] REFERENCES nume_indexb. [CONSTRAINT nume—restrictie] REFERENCES nume_tabelc. FOREIGN KEY nume_coloana REFERENCES nume_tabel (nume_coloana)d. REFERENCES nume—tabel (nume_coloana)

Sintaxa corecta pentru eliminarea valorilor nule din rezultatele interogarii estea. = NULLb. NOT = NULLc. <>NULLd. IS NULLe. IS NOT NULL

SQL NU este:a. Un limbaj procedural b. Un limbaj nonproceduralc. Un limbaj declarativd. Un limbaj standard Tipurile numerice standard nu includ:a. INTEGERb. FLOATc. INTERVAL d. BIGINT

Textul de validare se folosestea. pentru a valida datele dintr-un cimp b. impreuna cu Regula de Validare (Validation Rule) si reprezinta mesajul afisat la incalcarea regulei de validare c. impreuna cu Regula de Validare (Validation Rule) si reprezinta mesajul afisat daca nu se incalca regula de validare d. pentru a valida datele dintr-o inregistrare

Un model de date reprezinta o colectie integrata de concepte care nu descriu:a. dateb. relatii dintre datec. date despre echipa realizatoare a modeluluid. constrangeri existente asupra datelor sistemului real analizat

Un obiect al bazei de date estea. O structura denumita de date, cum ar fi un tabel, o vizualizare sau un index b. Un produs software furnizat de un producator de baze de datec. O colectie de date interrelationale gestionate ca o singura unitated. O colectie de inregistrari inrudite, stocate ca o singura unitate

Page 346: SOLUTII - Baze de Date - Adunate

Un sistem de gestionare a bazelor de date, abreviat sub forma DBMS sau RDBMS sau SGBD estea. o colectie de inregistrari inrudite, stocate ca o singura unitateb. o colectie de date interrelationate gestionate ca o singura unitatec. o structura de date, cum ar fi un tabel, o vizualizare sau un indexd. un produs software furnizat de un producator de baze de date

Un sistem de gestionare a bazelor de date :a. o structura cum ar fi un tabel b. o colectie de date interrelationate c. un produs softwer furnizat de un producator d. o structura denumita date , cum ar fi un tabel Un câmp calculat într-o interogare a. Se efectuează pe fiecare înregistrare folosind numai un câmp b. Afisează rezultatul unei expresii si valoarea este recalculată de fiecare dată când o valoare din exprese se schimbă c. Se pot folosi numai la afisarea unor rezultate d. Se pot folosi numai la definirea unor criterii de selectie sau pentru a determina asupra căror înregistrări să se execute o actiune

Valorile NULLa. pot fi folosite pentru reprezentarea datelor care lipsesc sau care nu sunt cunoscuteb. înseamnă acelaşi lucru ca şi spaţiile liberec. sunt egale cu alte valori NULLd. sunt întotdeauna permise în mod prestabilit Un identificator unic (cheie) poate fi compus...- am raspuns : poate fi compus din mai multe atribute concatenate

Pentru realizarea unor interogari grupate...- am raspuns: se realizeaza o interogare de selectie din tabelele dorite si se selecteaza pentru anumite campuri o functie de celula Total. Daca integritatea referentiala este setata:- am raspuns: nu se poate valoarea unei chei primare in tabela principala, daca acea inregistrare are inregistrari corelate in tabela secuindara.

Functia NOW() intoarce:- am raspuns: data si timpul exact conform cu data si ora sistemului

Prin operatia Export se poate- am raspuns: exporta dintr-o baza de date access intr-o alta baza de date access

Proprietatea Format se foloseste pentru- am raspuns: a seta modalitatea in care datele sunt afisate si tiparite

Daca integritatea referentiala este setata- am raspuns: nu se poate schimba valoarea unei chei primare

Page 347: SOLUTII - Baze de Date - Adunate

In meniul Tools ce apartine database Utilities nu exista- am raspuns: memo

Problemele de dependenta partiala Nu- am raspuns: sunt rezolvate de FN3

Relatia m:n devine in mod relational- am raspuns: tabel asociativ in care o inregistrare din A poate avea mai multe in B si invers

Pentru a crea un raport utilizand report Wizard avem planul general cu optiunea implicita- am raspuns: tabular

O instructiune Alter Table nu poate fi folosita pentru- am raspuns: redenumirea unei coloane

DDL nu include urmatoarea instructiune- am raspuns: DELETE

Un identificator unic (o cheie primara)- am raspuns: poate fi compus dintr-un singur atribut

O interogare cu stergere (Delete Query) - am raspuns : sterge un grup de inregistrari dintr-un tabel sau din mai multe tabele legate printr-o relatie unu la mai multi daca stergerile in cascada sunt active.

Componentele unei baze de date relationale nu includ - am raspuns : diagrame ERD

O uniune fara clauza WHERE sau o clauza Join - am raspuns are ca rezultat un produs cartezian

Operatorul BETWEENa. Specifică un domeniu de valori care include si capeteleb. Poate fi rescris folosind operatorii <= si NOT <=c. Selectează rândurile adăugate în tabel într-un anumit interval de timpd. Nu este inclus în standardul ISO/ANSI

O instructiune DELETE nua. Poate include o listă optională de coloaneb. Poate include o clauză WHERE optionalăc. Nu poate încălca restrictiile referentiale ale tabeluluid. Poate avea o instructiune SELECT internă, ca parte a clauzei WHERE Functiile SQL standar pt.siruri de caractere NU includ - Upper-LOWER-...-LIKE - raspuns LIKE

Page 348: SOLUTII - Baze de Date - Adunate

Care este secvenţa corectă pentru a şterge toate înregistrările tabelului TOTALURI- DELETE FROM TOTALURI

Access permite crearea unor relaţii logice sub forma unor legări între tabele- temporale (la nivelul interogărilor) şi implicite (din fereastra Relationships)

O interogare cu creare de tabele (Make-tables Query) nu realizează- crearea unor tabele pentru exportul într-o bază de date MS Access

Pentru realizarea unor interogări grupate- se selectează pentru toate câmpurile o funcţie în celula Totals

Un obiect al unei baze de date este- o structură, cum ar fi un tabel, o vizualizare sau un index

Pasii pentru conversia unei baze de date NU sunt: - deschiderea bazei ce urmeaza a fi convertita

O instructiune SELECT fara o clauza WHERE- va selecta toate randurile din tabel sau vizualizare

Instructiune SQL prin care se cerea sa se stearga toti profesorii din tabel. - DELETE profesori FROM tabel

table cod fac, denumire adresacare este secventa corecta pentru o inserare folosind instructiunea SELECT -INSERT INTO FAC(COD_FAC, DENUMIRE, ADRESA)SELECT VALUES(MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA'); -INSERT INTO FACSELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA'FROM FAC; -INSERT INTO FAC(COD_FAC, DENUMIRE, ADRESA)SELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA'FROM FAC;

table prof cod fac, cod prof,nume, prenume, salariu, cod functiecare este secventa corecta , pentru a modifica functia si salariu prof cu (cod_fac=2 cod_prof=1) din lector(cod_funct=3, salariu 2000) la conferentiar(cod_funct=4, salriu=3000)?-UPDATE PROF SET COD_FUNCT=4, SALARIU=3000WHERE COD_FAC=2 AND COD_PROF=1; -UPDATE PROF SELECT COD_FUNCT=4, SALARIU=3000WHERE COD_FAC=2 AND COD_PROF=1; -UPDATE PROF SET COD_FAC=2 AND COD_PROF=1WHERE COD_FUNCT=4, SALARIU=3000;

Page 349: SOLUTII - Baze de Date - Adunate

2 tabele a. ca cel de la nr 12 b.functiicod functii, den functiicare este secventa corecta pentru o subinterogare necorelata, care sa afiseze toate functiile pentru care nu exista profesorii incadrati-SELECT cod_funct, nume_functFROM functiiWHERE cod_funct NOT IN(SELECT DISTINCT cod_funct FROM prof)-SELECT cod_funct, nume_functFROM functii WHERE cod_funct NOT INSELECT DISTINCT cod_funct FROM prof-SELECT cod_funct, nume_functFROM functiiWHERE cod_funct IN(SELECT cod_funct FROM prof);

Pt. tabelul:PROF cod_fac# cod_prof# nume prenume salariucare este secvența corectă pt. a insera o înregistrare:• INSERT INTO PROF VALUES (4, 3, ’POPA’, ’DAN’, 1234)• INSERT INTO PROF VALUES (4, 5, POPA, DAN, 1234)• INSERT INTO PROF (cod_prof, nume, prenume, salariu) VALUES (4, 3, ’POPA’, ’DAN’, 1234)

Pt. tabelul:PROF cod_fac# cod_prof# nume prenume salariucare este secvența corectă pt. a afișa toate facultățile pt. care COD_FAC=1 și salariu>=1200, sau facultățile pt. care COD_FAC=3 și salariu<2000• SELECT COD_FAC, COD_PROF, NUME, SALARIU, FROM PROF WHERE (COD_FAC=1 AND SALARIU>1200) OR (COD_FAC=3 AND SALARIU<2000)Au mai fost 3 variante asemănătoare unde erau înlocuite AND cu OR

Care nu sunt instructiuni SQL?Limbajul dc replicare a datelor (DRL - Dala Replication Language)

Limbajul de manipulare a datelor (DML - Data Manipulation Language) NU include: CREATE Tipurile de date temporale standard NU includTIMEZONE

Text boxurile unei forme create automat sint legate direct la mai multe tabele astfel incit orice modificare adusa valorilor din ele se transmite..

O interogare SQL din care trebuie selectati din tabelul PROF profesorii care au codul facultatii (COD_FAC) egal cu 8a. SELECT FROM PROF WHERE COD_FAC=8;b. SELECT FROM PROF WHERE COD_FAC<>8;c. SELECT FROM PROF WHERE COD_FAC IS 8; (asa imi aduc aminte aici, dar daca nu era IS era tot o balarie)

Page 350: SOLUTII - Baze de Date - Adunate

Pentru tabelul PROF Cod_fac# | Cod_prof# | Nume | Pren | SalariuCare este secventa corecta pentru a modifica salariile cu 10%, care nu contin valori NULL?a. UPDATE PROF SET SALARIU = SALARIU*1.1WHERE SALARIU NOT NULL;b. UPDATE PROF SET SALARIU = SALARIU*1.1WHERE SALARIU IS NOT NULLc. UPDATE PROF SELECT SALARIU = SALARIU*1.1WHERE SALARIU <> 0;

O cheie primara (Primary Key) reprezinta un mod unic de identificare a unei înregistrari într-o tabela. a. nu este un index b. este un idex creat numai pe un cimp c. este un idex creat pe minimum doua cimpuri

Dacă tabelele dintr-o interogare nu sunt legate una de alta fie direct (în interogare), fie indirect (prin legătură implicită, din fereastra Relationship), Acces afișează• Toate combinațiile de înregistrări (produs cartezian) dintre câmpurile tabelelor• Numai înregistrările din prima tabelă• Numai înregistrările din ultima tabelă• Nu afișează nimic

Textul de validare se folosesteRaspuns: impreuna cu Regula de Validare si reprezinta mesajul afisat la incalcarea regulei de validate

Numerele stocate in campuri nenumerice ale unei interogari sunt stocateRaspuns: ca siruri de caractere (celelalte variante erau ca siruri numerice, se pune in fata 0 pt numerele mici si nu se accepta sortarea)

Un camp calculat intr-o interogareRaspuns: afiseaza rezultatul unei expresii si valoarea este recalculata de fiecare data cand o valoare din expresie se schimba)

Pentru aducerea in prima forma normala a unei relatii ne-normalizate ce operatie nu se efectueazaRaspuns: nu mai tin minte cum era formulat ceva despre atribute dependent tranzitive, oricum era singurul care nu avea legatura cu FN1

O insctructiune SELECT fara o clauza WHERERaspuns: selecteaza toate randurile din tabel sau vizualizare

Tabelul PROF cu coloanele cod_fac, cod_prof, nume, ore, salariu se intreba care este secventa corecta pentru a afisa suma salariilor tuturor profesorilor (de la toate facultatile)Raspuns: SELECT SUM(salariu) AS TotalSalariiFROM PROFGROUP BY

Page 351: SOLUTII - Baze de Date - Adunate

Se dadea tabelul FAC cu campurile cod_fac, denumire si adresa si se intreba care este varianta corecta pentru introducerea unei noi inregistrariRaspuns: INSERT INTO FAC(cod_fac, denumire, adresa)SELECT VALUES (MAX(cod_fac)+1, 'o demunire', 'o adresa');

Utilizarile valide ale instructiunii ALTER TABLE nu includeRaspuns: Redenumirea unui tabel

Operatorul LIKERaspuns: Foloseste caracterul procent drept caracter de inlocuire nepozitional

O interogare SQL prin care se solicita afisarea rotunjirii mediei salariilor profesorilor, cu 2 zecimale, grupat dupa facultati.Aici a fost ceva ciudat. O varianta era cu SORTED BY, una era cu expresia numerica fara o paranteza si 2 erau identice, si aici ma refer la semne de punctuatie, paranteze, spatii, etc.Aceste 2 variante identice aveau si formatul corect din punctul meu de vedere:SELECT ROUND(AVG(expresie numerica),2)AS salariiFROM prof GROUP BY COD_FAC;

Care nu este un concept utilizat pentru a descrie formal-uzual-fizic elementele de baza ale organizarii datelor:raspuns: domeniu- functie-functieUn sistem de gestiune al bazelor de date este:raspuns : un produs software furnizat de un producator de baze de date Numerele stocate in campuri nenumerice ale unei interogari sunt sortate:raspuns: ca siruri de caractereCare nu este restrictie (Tipuri de restrictii)raspuns: relatie ( mai erau variantele primary key, not null, check)Functia NOW() ...raspuns: returneaza data si ora sistemuluiEliminarea valorilor nule ...raspuns: IS NOT NULL57. Instructiunile SQL ....raspuns: incep cu un cuvant cheie si se termina cu caracterul;58. Intr-un aranjament client server:raspuns: componentele soft ale clientului SQL ruleaza pe client O auto-uniune:raspuns: autouniunea foloseste un singur tabelextensiile procedurale ale limbajului sql includ:java,c++,php, oracle pl/sqlpt tabelul ... raspuns INSERT INTO PROF(cod_prof nume, prenume, salariu) NAMES (4,3,POPA,DAN,1234)nu este functie sql standard pt siruri de caractere:upper, lenght, lower, like

pt tabelul... raspuns SELECT DISTINCT DENUMIRE FROM FAC WHERE 1000<(SELECT sum(salariu)

O uniune join --combina coloanele din doua sau mai multe tabele in rezultatul unei singure interogari

Page 352: SOLUTII - Baze de Date - Adunate

un sistem dbms nu ofera serviciul- - mecanisme de securitate

un index poate fi creat pe urmat tipuri-- text number, currency sau date and time

daca relationarea tabelelor dintr-o interogare s-a facut prin definirea legaturilor implicite atunci:- adaugarea lor intr-o interogare se face impreuna cu relatiile dintre eleinterogarea cu stergere sterge.. daca stergerile in cascada sint active prin operatia de import nu se pot introduce in baza de date - tabele de informare din baze de date in versiuni mai vechi..prima forma normala rezolva anomaliile- grupuri repetitive si atribute multivaloareintegritatea referentiala este un sistem de reguli folosit de acces pt a se asigura ca :relatiile intre tabele sint validecare nu este un concept utilizat pt a descrie formal- uzual- fizic - domeniu-functie- functietext boxurile unei forme create automat - sint legate direct la mai multe tabele astfel incit orice modificare adusa valorilor din ele se transmite..

Numerele stocate in campuri nenumerice ale unei interogari sunt sortate:a.ca siruri de caractere Pentru realizarea unei interogari cu actualizare nu se efectueaza pasul:a)se creeeaza o interogareb)se adauga tabelele si se selecteaza campurile ce se doresc actualizatec)se stabilesc criteriile de selectie pt acestea,daca exista atunci se apasa butonul Update Query din meniul Query Type din Toolbard) NU.......(aici este o varianta de raspuns care incepe cu NU...si aceasta este cea corecta )

Tabelul PROF cu coloanele cod_fac, cod_prof, nume, ore, salariu se intreba care este secventa corecta pentru a afisa suma salariilor tuturor profesorilor :SELECT SUM(salariu) AS TotalSalarii FROM PROF

Intr-un aranjament client/server NU : (componentele softwer DBMS ruleaza pe un client )

Definitia unei coloane din instructiunea CREATE TABEL NU poate include :Numele tabelului

O uniune Join fara o clauza WHERE sau o clauza JOIN:Are ca rezultat un produs cartezian

Dacă o tabelă din baza de date cerută care a fost legată de o tabelă externă, se şterg- se şterge şi legătura sa, nu însă şi fişierul extern de care a fost legat

Page 353: SOLUTII - Baze de Date - Adunate

1. Care este forma corecta pentru a adauga constrangeri la nivel de coloana si /sau la nivelde tabel?CREATE TABLE [schema.]nume_tabel (nume_coloana tip_de_date, [DEFAULT expr] [constrangere_de_coloana], .....[constrangere la nivel de tabel])CREATE TABLE [schema.]nume_tabel (nume_coloana tip_de_date [DEFAULT expr], [constrangere_de_coloana] .....[constrangere la nivel de tabel])CREATE TABLE [schema.]nume_tabel (nume_coloana tip_de_date, [DEFAULT expr], [constrangere_de_coloana], .....[constrangere la nivel de tabel])CREATE TABLE [schema.]nume_tabel (nume_coloana tip_de_date [DEFAULT expr] [constrangere_de_coloana], .....[constrangere la nivel de tabel])2. Care este comanda corecta care determina marirea salariul tuturor angajatilor din tabelulsalariat cu 5%?UPDATE salariuSET salariu = salariu * 1.05;UPDATE salariatSET salariu = salariu * 1.05;UPDATE salariatSET salariu = 1.05;UPDATE salariatSET salariu = salariu + salariu* 1.05;3. Care este comanda corecta care insereaza in tabelul TOTALURI(cod_departament,numar_angajati, suma_salarii)?INSERT INTO totaluriSELECT cod_departament, COUNT(*),SUM(salariu)FROM salariatGROUP BY cod_departament;INSERT INTO totaluriSELECT cod_departament, SUM(cod_angajat),SUM(salariu)FROM salariatGROUP BY cod_departament;INSERT INTO totaluriSELECT cod_departament, COUNT(*),SUM(salariu)FROM salariat;INSERT INTO totaluriSELECT cod_departament, COUNT(),SUM(salariu)FROM salariatORDER BY cod_departament;4. Care comanda afiseaza numele angajatilor, fara duplicate, care au manager?SELECT DISTINCT numeFROM salariatWHERE manager IS NOT NULL;SELECT DISTINCT numeFROM salariatWHERE manager IS NULL;SELECT numeFROM salariatWHERE manager IS NOT NULL;SELECT DISTINCT nume

Page 354: SOLUTII - Baze de Date - Adunate

FROM salariatWHERE manager != NULL;5. Care este comanda corecta care pentru fiecare facultate, se insereaza in tabelulSALARII(cod_fac, nr_prof, total_sal_fac) numarul de profesori si suma salariilor pe carefacultatea o plateste profesorilor sai?INSERT TO TOTALURISELECT COD_FAC, COUNT(*) , SUM(SALARIU)FROM PROF ORDER BY COD_FAC;INSERT INTO TOTALURISELECT COD_FAC, COUNT(*) , SUM(SALARIU)FROM PROF ;INSERT INTO TOTALURISELECT COD_FAC, COUNT(*) , SUM(SALARIU)FROM PROF GROUP BY COD_FAC;INSERT INTO totaluriSELECT COD_FAC, SUM(COD_PROF),SUM(SALARIU)FROM PROFGROUP BY COD_FAC;6. Care secventa este corecta pentru a afisa citi angajati nu au o valoare introdusa pecoloana salariu?SELECT COUNT()FROM salariatiWHERE SALARIU =0;SELECT COUNT(*)FROM salariatiWHERE SALARIU =NULL;SELECT COUNT(*)FROM salariatiWHERE SALARIU IS NOT NULL;SELECT COUNT(*)FROM salariatiWHERE SALARIU IS NULL;7. Care este comanda corecta care determina dublarea salariilor cu rotunjire la 2 zecimale aangajatilor care sunt titulari?UPDATE salariatSET salariu=ROUND(salariu*2,2);UPDATE salariatSET salariu=ROUND(salariu*2)WHERE titular =’y’;UPDATE salariatSET salariu=ROUND(salariu*2,2)WHERE titular =’y’;UPDATE salariatSET salariu=ROUND(salariu*0.5,2)WHERE titular =’y’;8. Care este comanda corecta care afiseaza numele salariatilor care castiga mai mult decatsalariul mediu pe companie, in ordine crescatoare a salariului?SELECT numeFROM salariatiWHERE salariu >AVG(salariu);

Page 355: SOLUTII - Baze de Date - Adunate

SELECT numeFROM salariatiWHERE salariu > (SELECT AVG(salariu) FROM salariati)ORDER BY salariu;SELECT numeFROM salariatiWHERE salariu > (SELECT AVG(salariu) FROM salariatiORDER BY salariu);SELECT numeFROM salariatiWHERE salariu > (SELECT AVG(salariu) FROM salariati)ORDER BY 1;9. Ce comanda modifica in tabelul SALARIATCOD _ANGNUMEPRENUMEDATA_ANGVARSTAEMAILSALARIUnot nullnumeric de5sir decaracteredemaxim 20sircaracterede maxim20date,valoareimplicitadatacurentãnumeric de2sir decaracterededimensiunefixa, de 30valoareimplicita 0numar de10 cu 2zecimaledimensiunea coloanei nume la 30 si pe cea a coloanei salariu la 12 cu 3 zecimale?ALTER TABLE salariatMODIFY nume VARCHAR2(30), salariu NUMBER(12,3);ALTER TABLE salariatMODIFY nume VARCHAR2(30), salariu NUMBER(12,3);ALTER TABLE salariatMODIFY nume VARCHAR2(30), MODIFY salariu NUMBER(12,3);

Page 356: SOLUTII - Baze de Date - Adunate

ALTER TABLE salariatMODIFY (nume VARCHAR2(30), salariu NUMBER(12,3));10. Care este comanda corecta care sterge valoarea coloanei salariu pentru angajatii caresunt angajati cu contract de colaborare?DELETE salariuFROM salariatiWHERE contract=’colaborare’;UPDATE salariatiSET salariu IS nullWHERE contract=’colaborare’;DROP salariuFROM salariatiWHERE contract=’colaborare’;UPDATE salariatiSET salariu=nullWHERE contract=’colaborare’;11. Care este comanda incorecta care afiseaza numele, salariul si varsta pentru toti salariatiicare castiga mai mult de 1000, rezultatul fiind sortat descendent dupa salariu, iar pentru ceicare au acelasi salariu in ordine crescatoare dupa nume?SELECT nume, salariu, varstaFROM salariatWHERE salariu>1000ORDER BY salariu DESC nume ASC;SELECT nume, salariu, varstaFROM salariatWHERE salariu>1000ORDER BY salariu DESC, nume ASC;SELECT nume, salariu, varstaFROM salariatWHERE salariu>1000ORDER BY salariu DESC, nume;SELECT nume, salariu, varstaFROM salariatWHERE salariu>1000ORDER BY 2 DESC, 1 ASC;12. Actualizarile realizate asupra tabelelor de baza ale unei vizualizari se reflecta totdeaunain vizualizareAdevăratFals13. Care este comanda corecta pentru a afisa numele, prenumele si varsta salariatilor, iarpentru cei care au varsta necunoscuta sa apara textul “varsta necunoscuta”?SE LECT nume, prenume, NVL(varsta, ‘varsta necunoscuta’)FROM salariat;SELECT nume, prenume, NVL(TO_CHAR(varsta), ‘varsta necunoscuta’)FROM salariat;SE LECT nume, prenume, NVL(CHAR(varsta), ‘varsta necunoscuta’)FROM salariat;SE LECT nume, prenume, NVL2(TO_CHAR(varsta), ‘varsta necunoscuta’)FROM salariat;14. Care comanda afiseaza numarul de angajati din fiecare departament?

Page 357: SOLUTII - Baze de Date - Adunate

SE LECT cod_departament, COUNT(*)FROM salariat;SE LECT cod_departament, SUM(cod_ angajat)FROM salariatGROUP BY cod_departament;SELECT cod_ departament, COUNT(*)FROM salariatGROUP BY cod_departament;SE LECT cod_departament, COUNT()FROM salariatGROUP BY cod_departament;15. Pentru a introduce in tabelul SALARIATCOD _ ANGNUMEPRENUMEDATA_ ANGVARSTASALARIUnot nullnumeric de 5sircaracterede maxim 20sir caracterede maxim 20date, valoareimplicita datacurentãnumeric de 2valoareimplicita 0numar de 10cu 2 zecimaledoua coloane: Cod_Funct si Email ce varianta folosim?ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER COLUMN ADD Email char(25);ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ADD Email CHAR(25);ALTER TABLE SALARIAT ADD (Cod_Funct NUMBER(2) , Email CHAR(25));ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER ADD Email char(25);16. Ce comanda creeaza tabelul SALARIAT_ 1 care sã aiba aceeiasi structura cutabelul SALARIATCOD _ANGNUMEPRENUMEDATA_ANGVARSTAEMAILSALARIUnot nullnumeric de5sir decaracteredemaxim 20sircaractere

Page 358: SOLUTII - Baze de Date - Adunate

de maxim20date,valoareimplicitadatacurentãnumeric de2sir decaracterededimensiunefixa, de 30valoareimplicita 0numar de10 cu 2zecimalesi sa contina salariatii care au salariu >100?CRE ATE TABLE SALARIAT_1SE LECT * FROM SALARIAT WHERE SALARIU>100;CREATE TABLE SALARIAT_ 1 ASSELECT * FROM SALARIAT WHERE SALARIU>100;CRE ATE TABLE SALARIAT_1 ASSE LECT FROM SALARIAT WHERE SALARIU>100;CRE ATE TABLE SALARIAT_1 ASSE LECT COD_ANG, SALARIU FROM SALARIAT WHERE SALARIU>100;17. Pentru a modifica dimensiunea coloanei prenume la 30 si pe cea a salariului la 12 cu 3zecimale, din tabelul SALARIATCOD _ANGNUMEPRENUMEDATA_ANGVARSTAEMAILSALARIUnot nullnumeric de5sir decaracteredemaxim 20sircaracterede maxim20date,valoareimplicitadatacurentãnumeric de

Page 359: SOLUTII - Baze de Date - Adunate

2sir decaracterededimensiunefixa, de 30valoareimplicita 0numar de10 cu 2zecimalecare varienta este corecta?ALTER TABLE SALARIATMODIFY (prenume VARCHAR2(30) salariu NUMBER(12,3));ALTER TABLE SALARIATMODIFY (prenume VARCHAR2(30)), MODIFY(salariu NUMBE R(12,3));ALTER TABLE SALARIATMODIFY (prenume VARCHAR2(30) , salariu NUMBER(12,3));ALTER TABLE SALARIATADD (prenume VARCHAR2(30), salariu NUMBER(12,3));18. Care este varianta corecta pentru a crea tabelul Salariat, cu caracteristicile de mai jos?COD _ANGNUMEPRENUMEDATA_ANGVARSTAEMAILSALARIUnot nullnumeric de5sir decaracteredemaxim 20sircaracterede maxim20date,valoareimplicitadatacurentãnumeric de2sir decaracterededimensiunefixa, de 30valoareimplicita 0numar de

Page 360: SOLUTII - Baze de Date - Adunate

10 cu 2zecimaleCREATE TABLE SALARIAT (cod_ ang NUMBER(5) NOT NULL,nume VARCHAR2(20),prenume VARCHAR2(20),data_ angajarii DATE DEFAULT SYSDATE,varsta NUMBER(2),email CHAR(50),salariu NUMBER(10,2) DEFAULT 0);CRE ATE TABLE SALARIAT (cod_ ang NUMBER(5)nume VARCHAR2(20),prenume VARCHAR2(20),data_ angajarii DATE ,varsta NUMBER(2),email CHAR(50),salariu NUMBER(10,2) DEFAULT 0);CRE ATE TABLE SALARIAT (cod_ ang NUMBER(5) NOT NULL,nume VARCHAR2(20),prenume VARCHAR2(20),data_ angajarii DATE, DE FAULT SYSDATE ,varsta NUMBER(2),email CHAR(50),salariu NUMBER(10,2), DE FAULT 0);19. Care varianta este corecta pentru a redenumi tabelul SALARIAT cu numeleSALARIATI?RENAME SAL ARIAT TO SALARIATI;RENAME SALARIAT WITH SALARIATI;RENAME TABLE SALARIAT TO TABLE SALARIATI;RENAME TABLE SALARIAT WITH TABLE SALARIATI;20. Care ste comanda corecta care afiseaza codul departamentelor pentru care salariulminim depaseste 5000$?SELECT cod_departamentFROM salariatWHERE MIN(salariu)>5000GROUP BY cod_departament;SE LECT cod_departamentFROM salariatGROUP BY cod_departamentHAVING MIN(salariu)>5000;SE LECT cod_departamentFROM salariatGROUP BY cod_departamentMIN(salariu)>5000;ALTE SUBIECTE TIMISOARACare este comanda corecta care afiseaza numele si salariul angajatilor condusi direct deIonescu Mihai?SELECT nume, salariuFROM salariatiWHERE cod_sef = (SELECT cod_angajat FROM salariatiWHERE nume ='Ionescu' AND prenume ='Mihai' );

Page 361: SOLUTII - Baze de Date - Adunate

SELECT nume, salariuFROM salariatiWHERE cod_sef = (SELECT cod_angajat FROM salariatiWHERE nume ='Ionescu', prenume ='Mihai' );SELECT nume, salariuFROM salariatiWHERE cod_sef = ‘Ionescu Mihai';SELECT nume, salariuFROM salariatiWHERE cod_sef != (SELECT cod_angajat FROM salariatiWHERE nume ='Ionescu' AND prenume ='Mihai' );Ce comanda sterge din tabelul SALARIATCOD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIUnot null numeric de 5 sir decaractere demaxim 20 sir caractere de maxim 20 date, valoare implicita data curentã numeric de 2 sir decaractere de dimensiune fixa, de 30 valoare implicita 0numar de 10 cu 2 zecimalecoloana nume si coloana salariu?ALTER TABLE SALARIATDROP nume, salariu;ALTER TABLE SALARIATDROP COLUMN (nume, salariu);ALTER TABLE SALARIATDROP (nume, salariu);ALTER TABLE SALARIATDROP COLUMN nume, COLUMN salariu;Care este comanda corecta care afiseaza numele salariatilor care lucreaza in departamentul3 si au salariul >100 sau care sunt din departamentul 5 si au salariul <200?SELECT numeFROM salariatWHERE (cod_deptartament=3 OR salariu>100) AND (cod_deptartament=5 OR salariu<200);SELECT numeFROM salariatWHERE (cod_deptartament=3 AND salariu>100) OR (cod_deptartament=5 AND salariu<200);SELECT numeFROM salariatWHERE (cod_deptartament=3 AND salariu>100) AND (cod_deptartament=5 ANDsalariu<200);SELECT numeFROM salariatWHERE (cod_deptartament=3 AND salariu>100) OR (cod_deptartament=5 OR salariu<200);Care dintre urmatoarele comenzi intoarce numarul zilei din luna carespunzator dateicurente?SELECT TO_CHAR(SYSDATE,’DDD’)FROM dual;SELECT TO_CHAR(SYSDATE,’DAY’)FROM dual;SELECT TO_CHAR(SYSDATE,’D’)FROM dual;SELECT TO_CHAR(SYSDATE,’DD’)

Page 362: SOLUTII - Baze de Date - Adunate

FROM dual;Care este comanda corecta care afiseaza numele salariatilor si numele departamentelor incare lucreaza, inclusiv departamentele in care nu lucreaza salariati?SELECT nume_salariat, nume_departamentFROM salariati s, departamente dWHERE s.cod_departament = d.cod_departament;SELECT nume_salariat, nume_departamentFROM salariati s, departamente dWHERE s.cod_departament(+) = d.cod_departament;SELECT nume_salariat, nume_departamentFROM salariati s, departamente dWHERE s.cod_departament = d.cod_departament(+);SELECT nume_salariat, nume_departamentFROM salariati s, departamente dWHERE s.cod_departament(+) = d.cod_departament(+);Pentru a insera in tabelul SALARIAT inregistrari,COD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIUnot null numeric de 5 sir caractere de maxim 20 sir caractere de maxim 20 date, valoareimplicita data curentã numeric de 2 sir decaractere de dimensiune fixa, de 30 valoare implicita 0numar de 10 cu 2 zecimalecare varianta este incorecta?INSERT INTO SALARIAT(COD _ANG, NUME,PRENUME,DATA_ANG,VARSTA,EMAIL, SALARIU)VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘INTERZIS PE FORUM CU ADRESE DE EMAIL.com’, 2500.50)INSERT INTO SALARIAT(COD _ANG, NUME,PRENUME, VARSTA, EMAIL) VALUES(5, ‘Ene’, ‘Ana’, 20,‘INTERZIS PE FORUM CU ADRESE DE EMAIL.com’)INSERT INTO SALARIAT(COD _ANG, NUME,PRENUME,VARSTA,EMAIL, SALARIU) VALUES(5,‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘INTERZIS PE FORUM CU ADRESE DE EMAIL.com’)INSERT INTO SALARIATVALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘INTERZIS PE FORUM CU ADRESE DE EMAIL.com’, 2500.50)Ce comanda creeaza tabelul SALARIAT_1 care sã aiba aceeiasi structura cutabelul SALARIATCOD _ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIUnot null numeric de 5 sir decaractere demaxim 20 sir caractere de maxim 20 date, valoare implicita data curentã numeric de 2 sir decaractere de dimensiune fixa, de 30 valoare implicita 0numar de 10 cu 2 zecimalesi sa contina salariatii care au salariu >100?CREATE TABLE SALARIAT_1SELECT * FROM SALARIAT WHERE SALARIU>100;CREATE TABLE SALARIAT_1 ASSELECT * FROM SALARIAT WHERE SALARIU>100;CREATE TABLE SALARIAT_1 ASSELECT FROM SALARIAT WHERE SALARIU>100;CREATE TABLE SALARIAT_1 ASSELECT COD_ANG, SALARIU FROM SALARIAT WHERE SALARIU>100;

Page 363: SOLUTII - Baze de Date - Adunate

Care este comanda nu elimina simultan spatiile de la inceputul si sfarsitul coloanei nume?SELECT TRIM(nume)FROM salariat;SELECT RTRIM(LTRIM(nume))FROM salariat;SELECT LTRIM(RTRIM(nume))FROM salariat;SELECT LTRIM(nume)FROM salariat;2. Care este comanda corecta care afiseaza toate functiile pe care nu lucreaza angazatii?A SELECT cod_functieFROM functiiWHERE cod_functie IN(select cod_functie FROM salariati WHERE cod_functie IS NOT NULL)B SELECT cod_functieFROM functiiWHERE cod_functie NOT IN(select cod_functie FROM salariati WHERE cod_functie IS NULL)C SELECT cod_functieFROM functiiWHERE cod_functie NOT IN(select cod_functie FROM salariati)D SELECT cod_functieFROM functiiWHERE cod_functie NOT IN(select cod_functie FROM salariati WHERE cod_functie IS NOT NULL)Raspuns D.ALTE TESTE3-Care este comanda corecta care afiseaza numele cititorilor care au carti nerestituite?SELECT nume_ cititorFROM imprumutaWHERE data_ restituirii = NULL;SE LECT nume_cititorFROM imprumutaWHERE data_ restituirii IS NOT NULL;SELECT nume_ cititorFROM imprumutaWHERE data_ restituirii IS NULL;SE LECT nume_cititorFROM imprumutaWHERE data_ restituirii > SYSDATE;6-Care comanda nu defineste corect un tabel?CREATE TABLE [schema.]nume_ tabel (nume_coloana tip_de_date [DEFAULT expr], ...);CREATE TABLE nume_ tabel [(col1, col2...)]AS subcerere;CREATE TABLE [schema.]nume_ tabel (nume_ coloana tip_de_date, [DEFAULT expr], [constrangere_de_coloana], ...);CREATE TABLE [schema.]nume_ tabel (nume_coloana tip_de_date [DEFAULT expr] [constrangere_ de_coloana], .....[constrangere la nivel de tabel])8-Ce comanda creeaza corect tabelul SALARIAT, specificand constrangerileCOD _ ANG NUME PRENUME DATA_ANG VARSTA EMAIL SALARIU

Page 364: SOLUTII - Baze de Date - Adunate

cheie primara numeric de 5 not nullsir decaractere demaxim 20 sir caractere de maxim 20 date, valoareimplicita data curentã numeric de 2 unic sir de caractere de dimensiune fixa, de 30 > 0numar de 10 cu 2 zecimalecoloana nume si coloana salariu?CREATE TABLE salariat(cod_ ang NUMBER(5) PRIMARY KEY,nume VARCHAR2(20) NOT NULL,prenume VARCHAR2(20),data_ ang DATE DEFAULT SYSDATE,varsta NUMBER(2),email CHAR(30) UNIQUE,salariu NUMBER(10,2) CHECK (salariu > 0));CREATE TABLE salariat(cod_ ang NUMBER(5) PRIMARY KE Y,nume VARCHAR2(20) NOT NULL,prenume VARCHAR2(20),data_ ang DATE DEFAULT SYSDATE ,varsta NUMBER(2),email CHAR(30) UNIQUE ,salariu NUMBER(10,2) > 0));CREATE TABLE salariat(cod_ ang NUMBER(5) PRIMARY KE Y,nume VARCHAR2(20) NOT NULL,prenume VARCHAR2(20),data_ ang DATE DEFAULT SYSDATE ,varsta NUMBER(2),email CHAR(30),salariu NUMBER(10,2) CHECK (salariu > 0));9-Care este comanda corecta care afiseaza numele si salariul angajatilor condusi direct de ‘ENEDAN’?SELECT nume, salariuFROM salariatiWHERE cod_manager = (SELE CT cod_manager FROM salariatiWHERE UPPER(nume) ='ENE ' , UPPER(pren) ='DAN' );SE LECT nume, salariuFROM salariatiWHERE cod_manager = (SELE CT cod_ang FROM salariatiWHERE nume ='ENE' , pren ='DAN' );SE LECT nume, salariuFROM salariati(SE LECT cod_ang FROM salariatiWHERE UPPER(nume) ='ENE ' AND UPPER(pren) ='DAN' );SELECT nume, salariuFROM salariatiWHERE cod_manager = (SELECT cod_ ang FROM salariatiWHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN' );10. Care este comanda corecta care afiseaza numarul total al cartilor imprumutate in anul 2008?SELECT COUNT()FROM imprumutaWHERE TO_CHAR(data_ imprumutului,’yyyy’)=2008;SELECT COUNT(*)FROM imprumuta

Page 365: SOLUTII - Baze de Date - Adunate

WHERE TO_CHAR(data_ imprumutului,’yyyy’)=2008;SE LECT COUNT(*)FROM imprumutaWHERE data_ imprumutului=2008;SE LECT COUNT(*)FROM imprumutaWHERE TO_CHAR(data_ imprumutului,’yy’)=2008;14-Care comanda listeaza numele tuturor angajatilor care au a treia litera din nume 'a'?SELECT numeFROM salariatWHERE nume LIKE '_ _a$';SELECT numeFROM salariatWHERE nume LIKE '%a%';SELECT numeFROM salariatWHERE nume LIKE '__ a%';15-Care este comanda corecta care afiseaza toate departamentele care platesc salariatilor sai osuma mai mare ca 20000?SELECT nume_ departamentFROM departamentWHERE 20000<(SE LECT sum(salariu) FROM salariat);SE LECT nume_departamentFROM departament AWHERE 20000<(SE LECT sum(salariu) FROM salariat Bwhere cod_ departament=cod_departament);SE LECT nume_departamentFROM departamentWHERE 20000<(SE LECT sum(salariu) FROM salariatwhere A.cod_ departament=B.cod_departament);SELECT nume_departamentFROM departament AWHERE 20000<(SELECT sum(salariu) FROM salariat Bwhere A.cod_departament=B.cod_departament);18-Care este comanda corecta care afiseaza codul departamentelor, numele departamentelor sisuma salariilor pentru fiecare departament?SELECT cod_ departament, nume_departament, SUM(salariu)FROM salariati s, departamente dGROUP BY cod_departament, nume_departament;SE LECT cod_departament, nume_ departament, SUM(salariu)FROM salariati s, departamente dWHERE s.cod_ departament=d.cod_departamentGROUP BY cod_departament;SELECT cod_departament, nume_departament, SUM(salariu)FROM salariati s, departamente dWHERE s.cod_departament=d.cod_departamentGROUP BY cod_departament, nume_departament;SE LECT cod_departament, nume_ departament, SUM(salariu)FROM salariati, departamente

Page 366: SOLUTII - Baze de Date - Adunate

WHERE s.cod_ departament=d.cod_departamentGROUP BY cod_departament, nume_departament;19-Care este comanda corecta care sa afiseze daca exista angajati care nu lucreaza indepartamentul ‘Contractari’ si al caror salariu coincide cu salariul unui angajat din departamentul‘Contractari’?SELECT nume, salariu, cod_departFROM salariatiWHERE salariu IN (SELECT salariu FROM salariati s, department dWHERE s.cod_depart = d.cod_depart AND nume_depart <> ‘Contractari’)AND cod_depart= (SELECT cod_depart FROM departmentWHERE nume_depart = ‘Contractari’);SE LECT nume, salariu, cod_departFROM salariatiWHERE salariu IS IN (SELECT salariu FROM salariati s, department dWHERE s.cod_ depart = d.cod_ depart , nume_ depart = ‘Contractari’)AND cod_depart<> (SELECT cod_depart FROM departmentWHERE nume_depart = ‘Contractari’);SE LECT nume, salariu, cod_departFROM salariatiWHERE (salariu) IN (SELECT salariu FROM salariati s, department dWHERE s.cod_ depart = d.cod_ depart AND nume_depart = ‘Contractari’)AND cod_depart<> (SELECT cod_depart FROM departmentWHERE nume_depart = ‘Contractari’);

teste fotografii care nu se regasesc mai sus1.Care este comanda corecta care afiseaza numarul total de carti dintr-o biblioteca pentrufiecare domeniu:SELECT cod_domeniu, COUNT(numar_exemplare)FROM bibliotecaGROUP BY cod_domeniu;SELECT cod_domeniu, SUM(numar_exemplare)FROM bibliotecaGROUP BY cod_domeniu;SELECT cod_domeniu, SUM(cod_carte)FROM bibliotecaGROUP BY cod_domeniu;SELECT cod_domeniu, COUNT(*)FROM bibliotecaGROUP BY cod_domeniu;2.Pentru tabelul salariatcod_depart cod_ang# nume pren salariu cod_functcare este comanda corecta, pentru a modifica salariul la 3000, pentru angajatii care lucreazain departamentul 10 si au salariul <3000?UPDATE salariat SET salariu=3000WHERE cod_depart=10 AND salariu<3000;MODIFY salariat SET salariu=3000WHERE cod_depart=10, salariu<3000;UPDATE salariat SET cod_depart=10 AND salariu<3000WHERE salariu=3000;MODIFY salariat SET salariu=3000WHERE cod_depart=10 AND salariu<3000;3.Care este comanda corecta care listeaza numele ale functiilor care exista in departamentul

Page 367: SOLUTII - Baze de Date - Adunate

30, fara duplicateSELECT DISTINCT nume_functieFROM salariati s, functii fWHERE cod_functie=cod_functieAND cod_departament=30;SELECT DISTINCT nume_functieFROM salariati s, functii fWHERE s.cod_functie=f.cod_functieAND cod_departament=30;SELECT DISTINCT nume_functieFROM salariati, functii fWHERE s.cod_functie=f.cod_functieAND cod_departament=30;SELECT nume_functieFROM salariati s, functii fWHERE s.cod_functie=f.cod_functieAND cod_departament=30;4.Care este comanda corecta care determina micsorarea salariilro cu 10%, cu rotunjire la 2zecimale, a angajatilor care sunt titulariUPDATE salariatSET salariu=ROUND(salariu*0.9,2);UPDATE salariatSET salariu=ROUND(salariu*1,1)WHERE titular='N';UPDATE salariatSET salariu=ROUND(salariu*0.9,2)WHERE titular='N';UPDATE salariatSET salariu=ROUND(salariu*0.1,2)WHERE titular='Y';5.O constrangere de tip PRIMARY KEY poate fi declarata numai la nivel de coloanaA / F6.Efectele unei comenzi DDL pot fi anulate cu o comanda ROLLBACKA / F7.Efectele unei comenzi DML pot fi anulate cu o comanda ROLLBACKA / F8.Care este comanda corecta care se afiseaza numele si prenumele pentru toti angajatii cuvarsta necunoscuta?SELECT nume, prenumeFROM salariatWHERE varsta=NULL;SELECT nume, prenumeFROM salariatWHERE varsta IS NULL;SELECT nume, prenumeFROM salariatWHERE varsta=0;SELECT nume, prenumeFROM salariatWHERE varsta IS NOT NULL;9.Care este comanda corecta care determina micsorarea salariilro cu 10%, cu rotunjire la 2zecimale, a angajatilor care NU sunt titulari

Page 368: SOLUTII - Baze de Date - Adunate

UPDATE salariatSET salariu=ROUND(salariu*0.9,2);UPDATE salariatSET salariu=ROUND(salariu*1,1)WHERE titular='N';UPDATE salariatSET salariu=ROUND(salariu*0.9,2)WHERE titular="N";UPDATE salariatSET salariu=ROUND(salariu*0.1,2)WHERE titular='Y';10.Pot fi eliminate mai multe coloane dintr-un tabel folosind o singura comanda ALTERTABLE ... DROP COLUMNA / F11.Care este comanda corecta care afiseaza numele si data angajarii pentru salariatii care aufost angajati dupa angajatul avand codul 10, in ordine descrescatoare a numelui?SELECT nume, data_angajariiFROM salariatWHERE data_angajarii >(SELECT data_angajarii FROM salariat WHERE cod_angajat = 10);SELECT nume, data_angajariiFROM salariatWHERE data_angajarii >(SELECT data_angajarii FROM salariat WHERE cod_angajat = 10)ORDER BY nume;SELECT nume, data_angajariiFROM salariatWHERE data_angajarii >(SELECT data_angajarii FROM salariat WHERE cod_angajat = 10)ORDER BY nume DESC;SELECT nume, data_angajariiFROM salariatWHERE data_angajarii >(SELECT * FROM salariat WHERE cod_angajat = 10)ORDER BY nume DESC;

Page 369: SOLUTII - Baze de Date - Adunate

Name: ________________________ Class: ___________________ Date: __________ ID: A

1

Subiecte baze de date licenta informatica 3 ani

True/False

Indicate whether the sentence or statement is true or false.

____ 1. Modelarea oricarui sistem din lumea reala porneste de la realitate si se exprima printr-o entitate.

____ 2. Elementele principale ale unei BDR sunt: clasa, obiectul, atributul, metoda, etc.

Elementele principale ale unei BDOO sunt: tabelul, campurile si inregistrarile.

____ 3. Se numeste atribut o colectie persistenta, neredundanta, coerenta logic de date corelate.

____ 4. Se numeste inregistrare o unitate elementara de date ce poseda un nume

____ 5. Etapele realizarii diagramei E/R:

1. Se identifica entitatile

2. Se identifica relatiile dintre entitati (legaturile)

3. Se stabilesc cardinalitatile

4. Se identifica atributele pentru fiecare entitate

5. Se stabilesc cheile (atributele de identificare)

____ 6. Restrictii ale modelului ierahic sunt:

- La inserare nu se pot introduce noi realizari ale unei inregistrari subordonate daca nu sunt cunoscuti

superiorii;

- Daca se sterge o realizare radacina a unei inregistrari, atunci se sterg automat toate inregistrarile

subordonate (tot subarborele).

____ 7. Restrictii ale modelului ierahic

- La inserare se pot introduce noi realizari ale unei inregistrari subordonate chiar daca nu sunt

cunoscuti superiorii;

- Daca se sterge o realizare radacina a unei inregistrari, atunci se sterg automat toate inregistrarile

subordonate (tot subarborele).

____ 8. Modelul retea:

−−−− Aranjeaza articolele intr-o lista cu legaturi de tip graf orientat, un articol putand avea mai multi

parinti.

−−−− Deosebirea fata de modelul ierarhic este ca intre un nod inferior si un nod superior exista legatura

de tip 1:n.

____ 9. Modelul ierarhic:

−−−− Aranjeaza articolele intr-o lista cu legaturi de tip graf orientat, un articol putand avea mai multi

parinti.

−−−− Deosebirea fata de modelul retea este ca intre un nod inferior si un nod superior exista legatura

de tip 1:n.

____ 10. Relatia virtuala este numita si vizualizare, relatie derivata, filtru, tabel view, vedere – ea cuprinde

definitia vizualizarii. Este un tabel virtual al datelor, compus din campuri provenite din doua sau mai

multe tabele sau/si campuri din alte vizualizari in care nu se pot face modificari, stergeri, deci are

avantajul pastrarii securitatii tabelului initial de date.

Vizualizarile pot fi:

−−−− Vizualizari de date (tabele);,

−−−− Vizualizari de validare (tabele de validare);

−−−− Vizualizari agregate (informatii selectate din mai multe tabele).

T

T

F

F

F

F

T

T

F

T

Page 370: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

2

____ 11. Relatia virtuala este numita si vizualizare, relatie derivata, filtru, tabel view, vedere – ea cuprinde

definitia vizualizarii. Este un tabel virtual al datelor, compus din campuri provenite din doua sau mai

multe tabele sau/si campuri din alte vizualizari in care se pot face modificari, stergeri, deci are avantajul

pastrarii securitatii tabelului initial de date.

Vizualizarile pot fi:

−−−− Vizualizari de date (tabele);,

−−−− Vizualizari de validare (tabele de validare);

−−−− Vizualizari agregate (informatii selectate din mai multe tabele).

____ 12. Una din etapele ce trebuie parcurse pentru realizarea schemei conceptuale este urmatoarea:

Atributele singulare devin coloane.

____ 13. Una din etapele ce trebuie parcurse pentru realizarea schemei conceptuale este urmatoarea:

Atributele singulare devin linii;

____ 14. SGBD-urile sunt construite modular. Exemple de astfel de module sunt:

Module ce contin programele de gestiune a bazei:

Module pentru LDD

Module pentru LMD

Module utilitare

Module pentru LCD

____ 15. Comenzile SQL se incheie cu ; (punct si virgula ).

____ 16. Crearea unei tabele cu SQL in Access sa face cu ajutorul clauzei ALTER TABLE.

____ 17. Modificarea structurii unei tabele cu SQL in ACCESS se poate face folosind clauza ALTER TABLE.

____ 18. Cu ajutorul sintaxei :

ALTER TABLE nume_tabela ADD nume_camp tip_data;

se adauga un camp tabelei TABLE

____ 19. Crearea unei noi tabele cu SQL in ACCESS se face folosind clauza DROP TABLE.

____ 20. In ACCESS, cu clauza

SELECT *

FROM TABELA1;

se selecteaza numai primul camp din TABELA1.

____ 21. In ACCESS selectarea si redenumirea unor campuri se poate face cu clauza:

SELECT camp1 AS nume1

FROM nume_tabela1;

____ 22. In ACCESS, pentru date de tip text, campurile dintr-un tabel pot fi combinate (concatenate) astfel incat

mai multe campuri sa formeze un singur camp in rezultatul interogarii astfel:

SELECT camp1 + “ “ + camp2 + “ “ + camp3 AS campcompus,

FROM nume_tabela1;

____ 23. Cu clauza DROP TABLE se pot redenumi campurile unei tabele in Access.

____ 24. Stergerea unei tabele folosind SQL in ACCESS se face cu clauza DROP TABLE.

____ 25. Crearea unei noi tabele cu SQL in ACCESS se face cu clauza UPDATE.

____ 26. Cu clauza SELECT se pot extrage informatii din baza de date.

F

F

T

T

T

F

T

F

F

F

T

T

F

T

F

T

Page 371: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

3

____ 27. Deschiderea tabelului TABEL_CARTI pentru a privi datele este echivalenta cu activarea clauzei SQL:

SELECT *

From TABEL_CARTI;

____ 28. Deschiderea tabelului TABEL_CARTI pentru a privi datele este echivalenta cu activarea clauzei SQL:

SELECT *

From TABEL_CARTI!

____ 29. Pentru a selecta unul din campurile tabelei TABEL_STUDENTI, se foloseste clauza:

SELECT *

From TABEL_STUDENTI;

____ 30. Pentru ca baza de date distribuita sa fie usor prelucrabila, prin sistemul distribuit se pun la dispozitia

acesteia o serie de independente.

Una dintre acestea este independenta fragmentarii. Fragmentarea poate fi: orizontala (fragmentele au

structura identica cu cea a multimii de date, dar difera prin continutul datelor), verticala (fragmentele

contin doar o parte din structura relatiei), mixta (fragmentarea orizontala a unui fragment vertical sau

fragmentare verticala a unui fragment orizontal).

____ 31. Pentru ca baza de date distribuita sa fie usor prelucrabila, prin sistemul distribuit se pun la dispozitia

acesteia o serie de independente.

Una dintre acestea este independenta fragmentarii. Fragmentarea poate fi: orizontala (fragmentele contin

doar o parte din structura relatiei) , verticala (fragmentele au structura identica cu cea a multimii de date,

dar difera prin continutul datelor) , mixta (fragmentarea orizontala a unui fragment vertical sau

fragmentare verticala a unui fragment orizontal).

____ 32. Pentru ca baza de date distribuita sa fie usor prelucrabila, prin sistemul distribuit se pun la dispozitia

acesteia o serie de independente.

Autonomia statiilor - permite fiecarei statii sa-si controleze si sa-si manipuleze datele locale, independent

de alte statii. Administrarea unei BDD este complet descentralizata, bazele locale fiind controlate

independent de un administrator local.

____ 33. In organizarea „ideala” a unei BDD se disting doua nivele de date:

- Nivelul global – aici fiecare baza locala din BDD este tratata ca o baza centralizata

- Nivelul local - aici se realizeaza integrarea bazelor de date locale intr-o baza de date globala

____ 34. In cazul SGBDD, pentru a satisface cererile in ordinea emiterii se utilizeaza marcile de timp astfel:

- fiecare cerere primeste automat la emitere o marca de timp (identificatorul nodului si timpul

ceasului local).

- toate articolele din BDD au o marca de timp, care ramane neschimbata la fiecare actualizare a

cererii.

- cererile se executa in ordinea emiterii marcilor

____ 35. Intr-o BDD, pentru a satisface cererile in ordinea emiterii se utilizeaza inelul virtual :

- nodurile retelei sunt inlantuite logic intr-un inel virtual pe care se deplaseaza un token.

- daca un nod detine token-ul el poate transmite.

- token-ul trece din nod in nod pana la nodul caruia ii este adresat.

cand token-ul ajunge la nodul din care a plecat, acesta devine liber, iar token-ul se deplaseaza spre nodul

urmator.

____ 36. Principalele concepte care stau la baza unui MDOO sunt: obiectul, clasa, fragmentarea,

incapsularea, persistenta, mostenirea, polimorfismul si colectia.

____ 37. Intr-un MDOO, orice entitate din lumea reala este un obiect si reciproc, orice obiect reprezinta o

abstractizare a unei entitati a lumii reale. Un obiect este un grup de date structurate, identificate

printr-o referinta unica.

T

F

F

T

F

T

TT

F

F

T

F

T

Page 372: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

4

____ 38. Componentele de baza ale unui SGBDOO sunt: utilitarele, limbajele si gestiunea obiectelor.

____ 39. Integritatea semantica a unui SGBDOO - se realizeaza prin autentificari si accesul controlat la date.

____ 40. Integritatea semantica a unui SGBDOO – se realizeaza prin diferite tipuri de constrangeri (de tiparire, ale

valorilor domeniului, de unicitate), care pot fi activate la executie, la compilare, la trimiterea unui mesaj,

etc.

Multiple Choice

Identify the letter of the choice that best completes the statement or answers the question.

____ 41. Se numeste ...................o unitate elementara de date ce poseda un nume.

a. Articol

b. Entitate

c. Inregistrare

d. SGBD

____ 42. ................................ planifica si realizeaza designul bazei.

a. Analistul pentru baze de date

b. Administratorul bazei de date

c. Programatorul de aplicatii

d. Utlizatorul

____ 43. …………………….. se ocupa cu modul de intrare a datelor in baza si cu buna functionare a bazei de

date; defineste schemele: conceptuala, interna si externa, raspunzand de toate modificarile ce se fac

asupra bazei; da drepturi de acces utilizatorilor ; defineste procedurile de restaurare si de salvare, etc.

a. Analistul pentru baze de date

b. Administratorul bazei de date

c. Programatorul de aplicatii

d. Utilizatorul

____ 44. .............................. intelege activitatea firmei sau a aplicatiei pe care urmeaza sa o implementeze;

dezvolta programe in timp (in diferite limbaje de programare: C, COBOL, PASCAL, etc.), gaseste noi

informatii, realizeaza noi rapoarte.

a. Analistul pentru baze de date

b. Administratorul bazei de date

c. Programatorul de aplicatii

d. Utilizatorul

____ 45. Bazele de date folosesc mai multe tipuri de limbaje. Limbajele .............. definesc:

� Tipurile de date;

� Relatiile dintre date;

� Atributele asociate relatiilor, structura lor, domeniul lor de definitie (ex: numele, forma de memorare,

lungimea atributelor unei entitati);

� Modul de accesare a datelor;

� Criteriile de validare automata a datelor.

a. LDD c. LCD

b. LMD d. Limbajele de programare C si C++

____ 46. Bazele de date folosesc mai multe tipuri de limbaje. Limbajele .............., actioneaza prin comenzi cu o

anumita structura, cu ajutorul lor utilizatorii autorizati au acces la operatiile de inserare, actualizare,

stergere a datelor; se mai numesc si limbaje de interogare.

a. LDD

b. LMD

c. LCDd. Limbajele de programare C si C++

T

T

F

O

O

O

O

O

O

Page 373: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

5

____ 47. Bazele de date folosesc mai multe tipuri de limbaje. Limbajele ............... raspund de: integritatea datelor,

confidentialitatea datelor, performantele bazei de date.

a. LDD c. LCD

b. LMD d. Limbajele de programare C si C++

____ 48. Se numeste .................o colectie de programe care permite crearea si intretinerea unei baze de date.

a. Dictionarul bazei de date

b. SGBD

c. LMD

d. Normalizare

____ 49. ....... - urile sunt o interfata intre utilizatori si sistemul de operare. Ele ajuta la construirea unor baze de

date, la introducerea informatiilor in bazele de date si dezvoltarea de aplicatii privind bazele de date; dau

acces utilizatorilor la date prin intermediul unui limbaj apropiat de modul obisnuit de exprimare, facand

abstractie de algoritmi, aplicatii si de modul de memorare a datelor.

a. LMD

b. LCD

c. SGBD

d. LDD

____ 50. Diagrama entitate-relatie a fost introdusa pentru prima data de ....................in 1976 si este un model

neformalizat de reprezentare a fenomenelor din lumea reala.

a. Chen

b. Codd

c. Gardarin

d. ANSI-X3/SPARK

____ 51. Modelul care aranjeaza articolele intr-o lista cu legaturi de tip graf orientat, un articol putand avea mai

multi parinti si in care intre un nod inferior si un nod superior exista legatura de tip 1:n este:

a. Modelul ierarhic

b. Modelul retea

c. Modelul liniar

d. Nu exista un asemenea model

____ 52. Modelul ....................... a fost introdus de E.F. Codd in 1970 si este descris cu ajutorul teoriei matematice

a relatiilor. Este un model orientat spre multimi, este simplu si riguros matematic.

a. Ierarhic

b. Retea

c. Orientat obiect

d. Relational

____ 53. Multimea tuturor schemelor relationale corespunzatoare unei aplicatii se numeste ............... bazei de date

relationale

a. dictionarul

b. schema

c. SGBD-ul

____ 54. Multimea tuturor schemelor relationale corespunzatoare unei aplicatii se numeste schema bazei de date

relationale, iar continutul curent al relatiilor la un moment dat se numeste baza de date

................................

a. Orientata obiect

b. Relationala

c. distribuita

O

O

O

O

O

O

O

O

Page 374: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

6

____ 55. Modelul relational, are la baza cele 13 reguli de fidelitate ale lui Codd in raport cu care un SGBD poate fi

analizat cat este de relational. Aceste reguli au fost completate in timp, numarul lor fiind in jur de 100.

Una din cele 13 reguli date de Codd este:

Un SGBD relational trebuie sa-si gestioneze singur baza de date (nici un SGBD nu contine numai

caracteristici relationale.). Se numeste ..........................

a. regula gestionarii datelor

b. regula reprezentarii informatiei

c. regula accesului garantat la date

d. regula reprezentarii informatiei necunoscute

e. regula dictionarelor de date

____ 56. Modelul relational, are la baza cele 13 reguli de fidelitate ale lui Codd in raport cu care un SGBD poate fi

analizat cat este de relational. Aceste reguli au fost completate in timp, numarul lor ajungand la 100. Una

din cele 13 reguli date de Codd este:

La nivel logic informatia trebuie sa fie reprezentata explicit prin valori in tabele numite relatii (regula ce

nu poate fi incalcata intr-o baza de date relationala.). Se numeste ..................................

a. regula gestionarii datelor

b. regula reprezentarii informatiei

c. regula accesului garantat la date

d. regula reprezentarii informatiei necunoscute

e. regula dictionarelor de date

____ 57. Modelul relational, are la baza cele 13 reguli de fidelitate ale lui Codd in raport cu care un SGBD poate fi

analizat cat este de relational. Aceste reguli au fost completate in timp, numarul lor ajungand la 100. Una

din cele 13 reguli date de Codd este:

Orice element de date (valoare atomica) din baza se poate accesa utilizand o combinatie intre numele

relatiei, cheia primara, si numele atributului(coloanei). Se numeste...................

a. regula gestionarii datelor

b. regula reprezentarii informatiei

c. regula accesului garantat la date

d. regula reprezentarii informatiei necunoscute

e. egula dictionarelor de date

____ 58. Modelul relational, are la baza cele 13 reguli de fidelitate ale lui Codd in raport cu care un SGBD poate fi

analizat cat este de relational. Aceste reguli au fost completate in timp, numarul lor ajungand la 100. Una

din cele 13 reguli date de Codd este:

Informatiile necunoscute trebuie sa se poata defini printr-un tip de date numit NULL, diferit de spatiul

necompletat sau de un sir de caractere blanc (valoarea zero, un sir vid de caractere sau o valoare

necunoscuta sunt notiuni complet diferite intr-un acelasi camp de date si trebuie ca SGBD-ul sa permita

diferentierea lor.). Valorile nule reprezinta varianta NU STIU. Se numeste.....................

a. regula gestionarii datelor

b. regula reprezentarii informatiei

c. regula accesului garantat la date

d. regula reprezentarii informatiei necunoscute

e. regula dictionarelor de date

____ 59. Modelul relational, are la baza cele 13 reguli de fidelitate ale lui Codd in raport cu care un SGBD poate fi

analizat cat este de relational. Aceste reguli au fost completate in timp, numarul lor ajungand la 100. Una

din cele 13 reguli date de Codd este:

Asupra descrierii bazei de date (tabelelor de descriere) trebuie sa se aplice aceleasi operatii ca si asupra

tabelelor de date. Se numeste ...........................

a. regula gestionarii datelor

b. regula reprezentarii informatiei

c. regula accesului garantat la date

d. regula reprezentarii informatiei necunoscute

e. regula dictionarelor de date

O

O

O

O

O

Page 375: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

7

____ 60. Modelul relational, are la baza cele 13 reguli de fidelitate ale lui Codd in raport cu care un SGBD poate fi

analizat cat este de relational. Aceste reguli au fost completate in timp, numarul lor ajungand la 100. Una

din cele 13 reguli date de Codd este:

Trebuie sa existe cel putin un limbaj de interogare pentru manipularea bazei de date (in general acesta

este SQL.). Limbajul tre-buie sa permita: definirea datelor, definirea vizualizarilor, manipularea datelor,

autorizari, restrictii de integritate. Se numeste....................

a. regula limbajului de interogare

b. regula de actualizare a vizualizarii.

c. regula limbajului de nivel inalt

d. regula independentei fizice a datelor

____ 61. Modelul relational, are la baza cele 13 reguli de fidelitate ale lui Codd in raport cu care un SGBD poate fi

analizat cat este de relational. Aceste reguli au fost completate in timp, numarul lor ajungand la 100. Una

din cele 13 reguli date de Codd este:

Un SGBD trebuie sa poata determina daca o vizualizare poate fi actualizata sau nu si sa stocheze

rezultatul interogarii intr-un dictionar de tipul unui catalog de sistem. Se numeste ...................

a. regula limbajului de interogare

b. regula de actualizare a vizualizarii

c. regula limbajului de nivel inalt.

d. regula independentei fizice a datelor

____ 62. Modelul relational, are la baza cele 13 reguli de fidelitate ale lui Codd in raport cu care un SGBD poate fi

analizat cat este de relational. Aceste reguli au fost completate in timp, numarul lor ajungand la 100. Una

din cele 13 reguli date de Codd este:

Regulile de manipulare asupra unei relatii luata ca intreg se aplica si operatiilor de regasire, inserare,

actualizare sau stergere a datelor (limbajele de nivel scazut actioneaza asupra unei singure inregistrari, iar

limbajele de nivel inalt actioneaza asupra mai multor inregistrari in acelasi timp. Codd spune ca

indiferent de nivel, limbajele trebuie sa respecte aceleasi reguli). Se numeste ............................

a. regula limbajului de interogare

b. regula de actualizare a vizualizarii

c. regula limbajului de nivel inalt

d. regula independentei fizice a datelor

____ 63. Modelul relational, are la baza cele 13 reguli de fidelitate ale lui Codd in raport cu care un SGBD poate fi

analizat cat este de relational. Aceste reguli au fost completate in timp, numarul lor ajungand la 100. Una

din cele 13 reguli date de Codd este:

Modul de depunere a datelor sau de acces la ele nu influenteaza programele de aplicatii sau activitatile

utilizatorilor (utilizatorul nu trebuie sa stie daca datele au fost stocate pe Unix sau pe Windows 2000

Server, el trebuie sa cunoasca numai numele serverului). Se numeste ..........................

a. regula limbajului de interogare

b. regula de actualizare a vizualizarii

c. regula limbajului de nivel inalt

d. regula independentei fizice a datelor

____ 64. Modelul relational, are la baza cele 13 reguli de fidelitate ale lui Codd in raport cu care un SGBD poate fi

analizat cat este de relational. Aceste reguli au fost completate in timp, numarul lor ajungand la 100. Una

din cele 13 reguli date de Codd este:

Programele de aplicatie nu trebuie sa afecteze manipularea datelor.Se numeste ........................

a. regula independentei logice a datelor

b. regula independentei datelor din punct de vedere al integritatii

c. regula versiunii procedurale a SGBD-ului

d. regula independentei datelor din punct de vedere al distribuirii

O

O

O

O

O

Page 376: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

8

____ 65. Se numeste ................ a doua relatii R1,R2 apartin Rn(A1,…, An), relatia R care are aceeasi schema

(structura) ca R1(implicit R2) si care are multimea tuplurilor formata din tuplurile celor doua relatii luate

o singura data.

a. Reuniunea

b. Diferenta

c. Produsul cartezian

d. Intersectia

____ 66. Se numeste ...................... a doua relatii R1,R2 apartin Rn(A1,…, An), relatia R care are aceeasi schema

(structura) ca R1 (implicit R2) si care are multimea tuplurilor formata din tuplurile relatiei R 1 ce nu se

gasesc printre tuplurile relatiei R2.

a. Reuniunea

b. Diferenta

c. Produsul cartezian

d. Intersectia

____ 67. Se numeste ....................... a doua relatii R1 apartine Rn(A1,…,An) de aritate n si R2 apartine

Rm(B1,…,Bm) de aritate m, cu A1,…,An, B1,…,Bm distincti, relatia R cu schema obtinuta prin

concatenarea schemei relatiei R1 cu schema relatiei R2 si care are multimea tuplurilor formata din toate

perechile de tupluri de aritate n+m astfel incat primele n componente formeaza un tuplu in R1 iar

urmatoarele m un tuplu in R2.

a. Reuniunea

b. Diferenta

c. Produsul cartezian

d. Intersectia

____ 68. Operatorul ............................. are notatiile: R1-R2, sau REMOVE(R1,R2), sau ............................

(R1,R2), sau MINUS(R1,R2),.

a. UNION

b. DIFFERENCE

c. PRODUCT

d. INTERSECT

____ 69. Operatorul .................... . are notatiile: R1xR2, .............(R1,R2), TIMES(R1,R2).

a. UNION

b. DIFFERENCE

c. PRODUCT

d. INTERSECT

____ 70. Operatorul ............................. are reprezentarea

a

R

R2 R1

∪∪∪∪

a. UNION

b. DIFFERENCE

c. PRODUCT

d. INTERSECT

O

O

O

O

O

O

Page 377: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

9

____ 71. Operatorul ............................. are reprezentarea R

R2 R1

_

a. UNION

b. DIFFERENCE

c. PRODUCT

d. INTERSECT

____ 72. Operatorul .................... . are reprezentarea

R

R2 R1

X

a. UNION

b. DIFFERENCE

c. PRODUCT

d. INTERSECT

____ 73. Se numeste ........................ a relatiei R1 apartine Rn(A1,…,An) printr-o conditie cond, relatia unara R cu

aceeasi schema ca R1 si cu multimea tuplurilor formata din tuplurile relatiei R ce satisfac conditia cond.

a. proiectia

b. selectia

c. intersectia

d. diviziunea

____ 74. Se numeste ....................... a doua relatii, relatia binara R cu aceeasi schema ca R1(implicit R2) si cu

multimea tuplurilor formata din tuplurile care apartin ambelor relatii in acelasi timp.

a. proiectia

b. selectia

c. intersectia

d. diviziunea

____ 75. Se numeste ................. (compunere) operatia algebrei relationale care construieste o noua relatie R prin

concatenarea (combinarea) unor tupluri din R1 apartine Rn(A1,…,An) cu tupluri din R2 apartine

Rm(B1,…,Bm), respectand anumite conditii puse tuplurilor.

Operatorul combina produsul cartezian, selectia si proiectia.

a. intersectie

b. jonctiune

c. diviziune

O

O

O

O

O

Page 378: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

10

____ 76. Se numeste ............................ a relatiilor R1 si R2 relatia R cu schema formata din reuniunea atributelor

relatiilor R1 si R2 (cele comune se iau o singura data) si cu multimea tuplurilor formata din tuplurile R1

concatenate cu tuplurile din R2 pentru care valorile atributelor comune au valori identice.

a. θ-jonctiune b. jonctiunea naturala

c. semi-jonctiune

____ 77. Se numeste .............................. a relatiei R1 cu relatia R2 prin conditia cond, relatia R cu aceeasi schema

ca si R1 si multimea tuplurilor formata numai din tuplurile relatiei R1 care concatenate cu tupluri din R2

verifica conditia cond.

a. θ-jonctiuneb. jonctiunea naturala

c. semi-jonctiune

____ 78. Se numeste ........................ procesul de organizare si determinare a coloanelor unui tabel, astfel incat

redundanta sa fie minima.

a. Normalizare

b. Selectie

c. Proiectie

____ 79. Spunem ca o relatie este .........................., daca si numai daca orice atribut al sau este atomic (indivizibil)

si un tuplu nu contine atribute sau grupuri de atribute repetitive.

a. 1-normalizata

b. 2-normalizata

c. 3-normalizata

____ 80. Spunem ca R este ........................ daca si numai daca relatia este 1FN si atributele noncheie nu depind

numai de o parte a cheii primare.

a. 1-normalizata

b. 2-normalizata

c. 3-normalizata

____ 81. Spunem ca R este ............................. daca si numai daca este 2FN si orice atribut noncheie nu depinde

tranzitiv de cheia primara a lui R

a. 1-normalizata

b. 2-normalizata

c. 3-normalizata

____ 82. Spunem ca R este ....-normalizata daca izoleaza relatiile independente multiple.

a. 1

b. 2

c. 3

d. 4

____ 83. ..... FN presupune divizarea tabelelor aduse la a patra forma normala in scopul reducerii numarului de

inregistrari (tuple) care trebuie introduse, modificate sau sterse la diferitele operatii de actualizare.

a. 2

b. 5

c. 4

d. 3

O

O

O

O

O

O

O

O

Page 379: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

11

____ 84. Algoritm pentru aducerea unei relatii in ..... FN:

1. Se inlocuiesc in relatie atributele compuse cu componentele lor.

2. Se creeaza cate o noua relatie pentru fiecare din grupurile repetitive.

3. Pentru fiecare din relatiile create la pasul 2 se introduce in schema cheia primara a relatiei din

care a fost extras atributul repetitiv.

4. Pentru fiecare din relatiile create la pasul 2 se stabileste cheia primara care va fi formata din

cheia introdusa la pasul 3, precum si din alte atribute ale acestei noi relatii.

5. Daca in noile relatii mai sunt inca atribute repetitive, se reia algoritmul. Daca nu, STOP.

a. 1

b. 2

c. 3

d. 4

e. 5

____ 85. Algoritm pentru aducerea unei relatii in .... FN prin eliminarea dependentelor functionale tranzitive

1. Pentru fiecare dependenta functionala tranzitiva (atribute ce nu depind direct de cheia primara a

relatiei R, A0, A1, … , Ap in care A0 este cheie primara a lui R si pentru orice i=1,…,p, Ai depinde

direct de Ai-1 ) se creeaza o noua relatie R’ care contine atributele A1,…,Ap si care are pe A1 drept

cheie primara.

2. Se elimina din R atributele A2, A3, … , Ap obtinand relatia R’’

3. In noile relatii se repeta pasii 1 si 2 cat timp contin dependente tranzitive.

a. 1

b. 2

c. 3

d. 4

e. 5

____ 86. Care din pachetele software enumerate nu este un sistem de prelucrare al bazelor de date?

a. Microsoft SQL Server

b. ACCESS

c. ORACLE

d. MICROSOFT POWERPOINT

e. INFORMIX

____ 87. Specificati care varianta este incorecta

Componentele software ale sistemului de baze de date distribuite sunt:

a. SGBDL (Sistemul de gestiune al bazei de date locale) - sistem standard de gestiune a

datelor care cuprinde propriul dictionar pentru datele locale

b. CC (Componenta de comunicatie) – responsabila cu legaturile in retea, cuprinde

descreierea completa a nodurilor si a legaturilor retelei

c. DDG (Dictionarul de date globale) – detine informatii despre localizarea,

disponibilitatea si modul de utilizare a datelor in BDD

d. SGBDD (Sistemul de gestiune al bazei de date distribuita) - interfata intre baza de date

distribuita si utilizatori .

e. ASDD administrator de soft al datelor distribuite

O

O

O

O

Page 380: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

12

____ 88. Bazele de date ........................ sunt multimi de baze de date autonome, slab corelate, manipulate de

utilizator printr-un limbaj specific, care:

- Permit slabirea legaturii dintre bazele de date locale

- Furnizeaza un limbaj prin care:

• se pot defini relatiile dintre diferite baze

• se pot manipula mai multe baze concurent.

a. federale

b. distribuite mogen

c. paralele

d. distribuite eterogen

____ 89. Pentru ca BDD sa fie usor prelucrabila, prin sistemul distribuit se pun la dispozitia acesteia o serie de

independente. Locul unde sunt stocate datelele unei BDD nu-i este cunoscut utilizatorului, aceste

informatii sunt pastrate in dictionarul datelor si sunt accesate de SGBDD pentru a stabili localizarea

relatiilor ce apar in cererile utilizatorilor. Aceasta poarta numele de:

a. Independenta fragmentarii c. Independenta SGBD

b. Independenta localizarii d. Autonomia statiilor

____ 90. Descrierea globala si unificata a tuturor datelor dintr-o BDD, independent de orice baza globala se

numeste

a. schema externa globala c. schema globala .

b. schema de alocare d. schema conceptuala globala

____ 91. Care varianta de raspuns nu este corecta?

Dictionarul datelor unei baze de date distribuite contine si informatii despre controlul semantic al datelor.

Controlului semantic al datelor are o serie de functii:

a. functia de gestiune a vizualizarilor c. functia de control a accesului autorizat

b. functia de definire a datelor d. functia de control a integritatii semantice

a datelor

____ 92. In sistemul distribuit, evaluarea cererilor se realizeaza in patru faze. Una din fazele urmatoare nu este

corecta. Specificati care:

a. faza de descompunere,

b. faza de localizare (transformarea unei cereri distribuite intr-o cerere echivalenta asupra

fragmentelor)

c. faza de inregistrare

d. faza de executie

____ 93. Care din variantele de mai jos nu face parte din gestiunea tranzactiilor distribuite?

a. Controlul concurentei c. Evaluarea cererilor

b. Gestiunea fiabilitatii d. Validarea tranzactiilor

____ 94. Controlul concurentei impiedica producerea tranzactiilor distribuite neserializabile. El poate fi abordat

din punct de vedere al stampilarii sau al blocarii. Care din afirmatiile de mai jos nu este corecta?

a. Ştampilarea - ordoneaza tranzactiile la lansarea lor in executie

b. Ştampilarea - are grija ca operatiile de acces la date sa se execute intr-o ordine

predefinita.

c. In cadrul stampilarii - fiecare tranzactie are asociat un numar de ordine unic numit

stampila sau inel virtual

d. Blocarea opreste tranzactiile care executa operatii conflicuale pe acelasi articol.

e. Accesul la articole prin protocolul blocarii se realizeaza cu primitivele: LOCK si

UNLOCK.

O

O

O

O

O

O

O

Page 381: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

13

____ 95. Una din regulile de integritate ale MDOO nu este adevarata. Specificati care:

a. toate obiectele respecta protocolul specificat de definirile lor de clasa

b. obiectele nu sunt incapsulate

c. identificatorul obiectului asigura integritatea referirii la un obiect

____ 96. Una din caracteristicile fundamentale obligatorii ale unui SGBDOO este gresita. Care anume?

a. trebuie sa fie un sistem orientat pe

obiecte

b. trebuie sa indeplineasca conditiile unui

SGBDD

____ 97. Care varianta este gresita?

Una din componentele de baza ale unui SGBDOO este gestiunea obiectelor. Aceasta se realizeaza cu

ajutorul:

a. administratorului de obiecte, c. utilitarelor

b. stocului rezident de obiecte d. serverului de obiecte

____ 98. Care din urmatoarele trei variante este corecta?

In cadrul gestiunii obiectelor dintr-un SGBDOO, administratorul de obiecte (AO) asigura interfata

dintre .

a. procesele interne si SGBDO c. procesele externe si procesele interne

b. procesele externe si SGBDO

____ 99. Care din urmatoarele trei variante este corecta?

Serverul de obiecte, asigura realizarea serviciilor de baza cum ar fi:

a. gestionarea tranzactiilor si gestionarea translatorului de cereri

b. gestionarea tranzactiilor si gestionarea stocului de obiecte

c. gestionarea stocului de obiecte si gestionarea translatorului de cereri

____ 100. Prin ......................... fragmentarii utilizatorul nu vede ca datele sunt fragmentate. Informatiile despre

fragmentare sunt stocate in dictionarul datelor si utilizate de SGBDD pentru a traduce automat cererile

referitoare la relatii in cereri referitoare la fragmente.

a. independenta c. marca

b. inelul d. arhitectura

____ 101. O baza de date distribuita .............. este o multime de baze de date locale situate pe site-uri diferite,

administrate de SGBD-uri identice.

a. eterogen b. omogen

____ 102. O baza de date distribuita .................... se obtine prin integrarea bazelor existente, administrate de

SGBD-uri diferite si cu modele diferite, intr-o singura baza de date.

a. omogen b. eterogen

____ 103. Diferentele dintre un ....................... si un SGBDD:

− Nu poate administra un dictionar global care contine informatii despre bazele de date distribuite;

− Suporta un limbaj pentru definirea dependentelor dintre diferite baze de date;

− Suporta un limbaj pentru definirea si manipularea bazelor de date din federatie

a. SGBDL c. BDOO

b. BDDE d. SGBD federal

____ 104. Arhitectura unui ............ cuprinde:

− Un sistem global de gestiune a datelor;

− O interfata cu baza locala, care asigura:

- Translatarea cererilor in limbajul de manipulare al datelor specific sistemului local;

- Executia cererilor;

a. SGBDL c. SGBDF

b. BDEE d. BDOO

O

O

O

O

O

O

O

O

O

O

Page 382: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

14

____ 105. Bazele de date ............ sunt BDDO in care statiile sunt nodurile unui calculator paralel.

Statiile comunica intre ele prin mesaje.

Programele sunt executate pe calculatorul gazda sau pe statii de lucru care comunica cu calculatorul

paralel printr-o interfata specifica.

a. omogene c. paralele

b. eterogene d. federale

____ 106. Independenta ................... - pentru a asigura fiabilitatea, disponibilitatea si accesul performant la date,

BDD-urile au copii ale informatiei, astfel daca o statie nu poate fi accesata (este neoperationala) la un

moment dat exista o copie a fragmentui cautat.

a. localizarii c. dublurii

b. fragmentarii d. statiilor

____ 107. Cele douasprezece reguli (sau obiective) ale lui Date (in 1990) pentru sistemele SGBDD au la baza ideea

ca un sistem SGBD distribuit trebuie sa apara utilizatorului ca un sistem SGBD nedistribuit. Aceste

reguli sunt inrudite cu cele douasprezece reguli ale lui Codd pentru sistemele relationale.

Principiul ........................ Pentru utilizator, un sistem distribuit trebuie sa arate exact ca unul nedistribuit.

a. fundamental c. independentei de locatie

b. autonomiei locale d. operarii continue

____ 108. Cele douasprezece reguli (sau obiective) ale lui Date (in 1990) pentru sistemele SGBDD au la baza ideea

ca un sistem SGBD distribuit trebuie sa apara utilizatorului ca un sistem SGBD nedistribuit. Aceste

reguli sunt inrudite cu cele douasprezece reguli ale lui Codd pentru sistemele relationale.

Regula .............................. Site-urile dintr-un sistem distribuit trebuie sa fie autonome. In acest context,

autonomia inseamna ca:

• Datele locale sunt detinute si gestionate local;

• Operatiile locale raman pur locale;

• Toate operatiile dintr-un anumit site sunt controlate de catre site-ul respectiv.

a. fundamentala c. operarii continue

b. autonomiei locale d. independentei de locatie

____ 109. Cele douasprezece reguli (sau obiective) ale lui Date (in 1990) pentru sistemele SGBDD au la baza ideea

ca un sistem SGBD distribuit trebuie sa apara utilizatorului ca un sistem SGBD nedistribuit. Aceste

reguli sunt inrudite cu cele douasprezece reguli ale lui Codd pentru sistemele relationale.

Regula ............................ Ideal este ca niciodata sa nu fie nevoie de o oprire planificata a sistemului

pentru operatii cum ar fi:

• Adaugarea sau eliminarea unui site din sistem;

• Crearea si stergerea dinamica a fragmentelor dintr-unul sau mai multe site-uri.

a. fundamentala c. operarii continue

b. autonomiei locale d. independentei de locatie

____ 110. Cele douasprezece reguli (sau obiective) ale lui Date (in 1990) pentru sistemele SGBDD au la baza ideea

ca un sistem SGBD distribuit trebuie sa apara utilizatorului ca un sistem SGBD nedistribuit. Aceste

reguli sunt inrudite cu cele douasprezece reguli ale lui Codd pentru sistemele relationale.

Regula ............................. Utilizatorul trebuie sa aiba posibilitatea de a accesa datele, indiferent de modul

in care sunt fragmentate.

a. fundamentala c. operarii continue

b. autonomiei locale d. independentei de fragmentare

O

O

O

O

O

O

Page 383: SOLUTII - Baze de Date - Adunate

Name: ________________________ ID: A

15

____ 111. Cele douasprezece reguli (sau obiective) ale lui Date (in 1990) pentru sistemele SGBDD au la baza ideea

ca un sistem SGBD distribuit trebuie sa apara utilizatorului ca un sistem SGBD nedistribuit si sunt

inrudite cu cele douasprezece reguli ale lui Codd pentru sistemele relationale.

Una din regulile ideale este ................................. Trebuie sa fie posibil ca sistemul SGBDD sa poata fi

rulat pe o diversitate de platforme hardware.

a. independentei de fragmentare c. independentei de retea

b. independentei de reproducere d. independentei de hardware

____ 112. Cele douasprezece reguli (sau obiective) ale lui Date (in 1990) pentru sistemele SGBDD au la baza ideea

ca un sistem SGBD distribuit trebuie sa apara utilizatorului ca un sistem SGBD nedistribuit si sunt

inrudite cu cele douasprezece reguli ale lui Codd pentru sistemele relationale.

Una din regulile ideale este regula ........................... care afirma ca trebuie sa fie posibil sa se ruleze

sistemul SGBDD pe o diversitate de sisteme de operare.

a. independentei de retea c. independentei de hardware

b. independentei de fragmentare d. independentei de sistemul de operare

____ 113. Cele douasprezece reguli (sau obiective) ale lui Date (in 1990) pentru sistemele SGBDD au la baza ideea

ca un sistem SGBD distribuit trebuie sa apara utilizatorului ca un sistem SGBD nedistribuit si sunt

inrudite cu cele douasprezece reguli ale lui Codd pentru sistemele relationale.

Una din regulile ideale este regula ........................ care spune ca trebuie sa fie posibil sa se ruleze

sistemul SGBDD pe o diversitate de retele de comunicatie separate.

a. independentei de hardware c. independentei de sistemul de operare

b. independentei de fragmentare d. independentei de retea

O

O

O

Page 384: SOLUTII - Baze de Date - Adunate

1 Pt. a introduce câmpuri calculate într-un raport se foloseste din bara toolbox: A. Label Box Aa B. Text Box ab C. Check D. Combo Box Raspuns..B 2 O interogare parametrizată este o interogare [b]A. În care una sau mai multe valori ale criteriilor de selectie sunt specificate în mod interactiv[/b] B. În care numai una dintre valorile criteriilor de selectie poate fi specificată C. Care atunci când se rulează afisează o fereastră creată de utilizator D.Care atunci când se rulează afisează o fereastră proprie în care afi?ează un rezultat Raspuns ..A 3 Un câmp calculat într-o interogare A. Se efectuează pe fiecare înregistrare folosind numai un câmp [b]B. Afisează rezultatul unei expresii si valoarea este recalculată de fiecare dată când o valoare din exprese se schimbă[/b] C. Se pot folosi numai la afisarea unor rezultate D. Se pot folosi numai la definirea unor criterii de selec?ie sau pt. a determina asupra căror înregistrări să se execute o actiune Raspuns B 4 Expresiile nu se utilizează în A Definirea unui criteriu de selectie B Crearea unui câmp calculat C Actualizarea unor înregistrări într-o interogare D Definirea proprietătii Validation Text a unei tabele Raspuns D 5 Integritatea referentială nu se poate seta atunci când A Câmpurile în relatie au acelasii tip de date [b] B Tabelele nu apartin aceleasi baze de date Access[/b] C. Tabelele apar in aceleasi baze de date Access D. Câmpul în relatie din tabela principală este cheie primară sau are un index unic Raspuns B 6 Dacă tabelele dintr-o interogare nu sunt legate una de alta fie direct (în interogare), fie indirect (prin legătură implicită, din fereastra Relationship), Acces afisează [b]A. Toate combinatiile de înregistrări (produs cartezian) dintre câmpurile tabelelor[/b] B. Numai înregistrările din prima tabelă C. Numai înregistrările din ultima tabelă D. Nu afisează nimic Raspuns A 7 Pentru realizarea unei interogări cu actualizare nu se efectuează pasul • Se creează o interogare, se adaugă tabelele si se selectează • Pt. a vizualiza înregistrările ce vor fi afectate de actualizare se apasă butonul View, iar pt. a crea noua tabelă se apasă Run [i]Au mai fost două răspunsuri, da nu le-am mai scris[/i] La acesta intrebare nici o varianta pe care a scris-o colegul pe forum nu este buna.. Din curs Pasii pentru realizarea unei interogări cu actualizare sunt următorii : "1. După ce se creează o interogare, se adaugă tabelele si se selectează câmpurile ce se doresc actualizate, se stabilesc criteriile de selecŃie pentru acestea; dacă există atunci se apasă butonul Update Query din meniul Query Type din

Page 385: SOLUTII - Baze de Date - Adunate

Toolbar." "2. In celula Update To (Actualizează cu) se introduce expresia ce va calcula noua valoare pentru câmpurile afectate de interogare." "3. Pentru a vizualiza înregistrările ce vor fi afectate de actualizare se apasă butonul View, iar pentru a crea noua tabelă se apasă butonul Run." 8 Numerele stocate în câmpuri nenumerice ale unei interogări (de ex. 1, 11, 111, 2, 22, 222) sunt sortate • Ca numere si dacă nu au aceeasi lungime numerele mai mici sunt completate cu zerouri în fată (ex. 001, 011, 002…) -gresit [i]mai erau 3 variante eu am răspuns cu asta[/i] Nu este varianta buna de raspuns Din curs: "Numerele stocate în câmpuri nenumerice sunt sortate ca sirurile de caractere, nu ca valori numerice. Totusi pentru a le sorta în ordine numerică toate sirurile de tip text trebuie să fie de aceeasi lungime, având numerele mai mici completate cu zerouri în fatăpentru ordonarea crescătoare a sirului “1”,”2”,”11”, “22” se va obtine următorul rezultat : “1”,”11”,”2”,”22”. Pentru a putea avea rezultatul conform unei sortări numerice sirul acesta trebuie transformat în următorul: “01”,”02”,”11”,”22”. Cea mai simplă cale pentru obtinerea unei sortări corecte din punct de vedere numeric în cazul câmpurilor care stochează DOAR valori numerice va fi definirea tipului acelui câmp într-un tip de date numeric (Number sau Currency)." 9 Modelul relational conceput si dezvoltat de E.F. Codd cuprinde un set de A. 25 reguli [b]B. 13 reguli[/b] C. 100 reguli D 15 reguli Raspuns B 10 A doua formă normală rezolvă anomaliile cauzate de A. Grupurile repetitive [b]B. Dependentele partiale de cheia primară[/b] C. Grupurile repetitive si atributele multivaloare D Dependentele tranzitive Raspuns B 11 Nu sunt clientii SQL oferiti de Oracle A. SQL Worksheet [b]B. My SQL[/b] C. SQL*Plus D. iSQL*Plus Raspuns B 12 Definitia unei coloane din instructiunea CREATE TABLE nu poate include [b]A. Numele tabelului [/b] B. O clauză DEFAULT C. O clauză NULL sau NOT NULL D Numele coloanei Raspuns A Se identifica cu ex. 9 de la ,,Limbajul de definire a datelor - DDL,,

Page 386: SOLUTII - Baze de Date - Adunate

9. Definitia unei coloane din instructiunea CREATE TABLE poate include a. Numele tabelului b. Numele coloanei c. restrictie la nivel de tabel d. clauză DEFAULT e. O clauză NULL sau NOT NULL Raspuns B, D, E 13 Limbajul DML nu include următoarea instructiune SQL A. INSERT B. UPDATE [b]C. SELECT[/b] D. DELETE Raspuns C Se identifica cu ex.16 de la ..,,Partea a_III_a SQL,, 16. Limbajul de manipulare a datelor (DML - Data Manipulation Language) include următoarele instructiuni: a. SELECT b. INSERT c. CREATE d. UPDATE e. DELETE Raspuns B, D, E 14 Problemele de dependenta partiala [b]nu[/b]: si ai 4 var de rasp Se identifica cu ex. 14 de la ,,PARTEA I. Concepte despre Bazele de date relationale. Normalizare 14. Problemele de dependentă partială a. Sunt rezolvate de FN2 b. Sunt rezolvate de FN3 c. Pot apărea în relatiile cu chei primare concatenate d. Apar cand un atribut non-cheie depinde doar de o parte a cheii primare e. Apar cand un atribut non-cheie depinde de un alt atribut non-cheie Raspuns A, C, D 15 O cheie primara si ai 4 var de raspuns,eu am pus -reprezinta un mod unic de identific a unei....................,nu stiu de am pus bine Din curs: "O cheie primară (Primary Key) reprezintă un mod unic de identificare a unei înregistrari într-o tabelă. O Cheie Primară este un index pentru care proprietatea Primary este setată pe Yes." 16 A treia forma normala rezolva anomaliile cauzate de : si 4 var de raspuns Se identifica cu ex. 12 de la ,,Partea I Concepte despre bazele de date relationale. Normalizare,, a. Dependentele partiale de cheia primară b. Grupurile repetitive [b]c. Dependentele tranzitive[/b] d. Atributele multivaloare e. Relatiile de tip unu-la-mai-multi Raspuns C 17 Functia Avg(expr) 3 var de raspuns Din curs: "Functia Avg() calculează media aritmetică a unui set de valori continute într-un câmp specificat într-o interogare. "

Page 387: SOLUTII - Baze de Date - Adunate

18 Interogarile cu adaugare de inregistrari pot adauga inregistrari 4 var de raspuns Din curs: "Prin intermediul interogărilor cu adăugare (Append Query) se realizează adăugarea unui grup de înregistrări din una sau mai multe tabele la sfârsitul uneia sau mai multor tabele. Interogările cu adăugare mai pot realiza si următoarele actiuni : - Adăugarea de câmpuri bazându-se pe un criteriu. - Adăugarea de înregistrări atunci când anumite câmpuri dintr-o tabelă nu există în altă tabelă. O interogare cu adăugare va adăuga informatiile din câmpurile care coincid ingnorându-le pe celelalte." 19 O uniune(Join) [b]NU[/b] 4 var de raspuns Se identifica cu ex 5 de la ,,Combinarea datelor din mai multe tabele,, "5. O uniune (Join) a. Combină coloanele din două sau mai multe tabele în rezultatele unei singure interogări b. Combină rânduri din interogari multiple într-un singur set de rezultate c. Este realizată ori de câte ori în clauza FROM sunt specificate mai multe tabele d. Necesită folosirea unei clauze JOIN e. Necesită o listă de tabele separate prin virgule în clauza FROM" Raspuns A, C, D sau A,C, E - trebuie clarificat 20 Numele unei coloane dintr-un tabel 4 var de rasp,aici rasp toate incepeau cu [b]NU[/b] Se identifica cu ex 10 de la ,,Limbajul de definire a datelor - DDL,, "10. Numele unei coloane dintr-un tabel a. Trebuie să fie specificat în instructiunea CREATE TABLE b. Trebuie să fie unic în cadrul bazei de date c. Trebuie să fie unic în cadrul tabelului d. Poate fi folosit într-un singur index e. Trebuie să fie specificat în instructiunea ALTER TABLE" Raspuns B, D, E 21 O uniune incrucisata(cross join) este acelasi lucru cu 4 var de rasp Se identifica cu ex. 8 de la ,,Combinarea datelor din mai multe tabele,, "8, O uniune încrusisată este: a. O uniune Naturală b. N produs cartezian c. O uniune externă d. O uniune Internă" Raspuns A, C, D 22 Definitia unei coloane din instructiuni CREATE TABLE NU poate include 4 var de rasp Se identifica cu ex. 9 de la ,,Limbajul de definire a datelor - DDL,, "9. Definitia unei coloane din instructiunea CREATE TABLE poate include a. Numele tabelului b. Numele coloanei c. restrictie la nivel de tabel d. clauză DEFAULT e. O clauză NULL sau NOT NULL" Raspuns B,D,E

Page 388: SOLUTII - Baze de Date - Adunate

23 O uniune (Join) fara o clauza WHERE sau o clauza JOIN nu si ai 4 var de rasp Se identifica cu ex. 2 din ,,Combinarea datelor din mai multe tabele,, "2. O uniune (join) fără o clauză WHERE sau o clauză JOIN a. Are ca rezultat un mesaj de eroare b. Nu returnează nici un rând din setul de rezultate c. Reprezintă o uniune externă (outer join) d. Reprezintă o uniune internă (inner join) e. Are ca rezultat un produs cartezian" Raspuns…E 24 A doua forma normala nu rez anomaliile cauzate de 4 var de rasp. Se identifica cu ,,Partea I Concepte despre bazele de date relationale. Normalizare,, "11. A doua formă normală rezolvă anomaliile cauzate de a. Dependentele partiale de cheia primară b. Grupurile repetitive c. Dependentele tranzitive d. Atributele multi valoare e. Relatiile de tip unu-la-mai-multi" Raspuns A --------------------------------------------------------------------------------------------------------------------------- 1. O forma (sau formular) reprezinta modalitatea de a a. modifica date numai dintr-o singura tabela b. modifica, adauga, sterge date din mai multe tabele c. modifica date dintr-o singura interogare d. modifica date dintr-o interogare si un tabel Raspuns D (ciudata intrebare) 2. Care nu este un concept utilizat pentru a descrie formal-uzual-fizic elementele de baza ale organizarii datelor a. relatie-tablou-fisier b. tuplu-linie-inregistrare c. atribut-coloana-camp d. domeniu-functie-functie Raspuns D (raspuns corect, vezi tabelul din pag. 10) 3. Textul de validare se foloseste Raspuns: impreuna cu Regula de Validare si reprezinta mesajul afisat la incalcarea regulei de validate (mai erau 3 variante de raspuns, dar nu mai avea rost sa le scriu) 4. Pentru a fi in a treia forma normala o relatie nu trebuie sa fie in prima sau a doua forma normala? Adevarat sau Fals Raspuns: Fals 5. O baza de date este a. O colectie de date interrelationate gestionate ca o singura unitate b. Un produs software furnizat de un producator de baze de date c. O structura de date cum ar fi un tabel, o vizualizare sau un index d. Definita in acelasi mod de toti producatorii software Raspuns A 6. Numerele stocate in campuri nenumerice ale unei interogari sunt stocate Raspuns: ca siruri de caractere (celelalte variante erau ca siruri numerice, se pune in fata 0 pt numerele mici si nu se accepta sortarea)

Page 389: SOLUTII - Baze de Date - Adunate

7. Un camp calculat intr-o interogare Raspuns: afiseaza rezultatul unei expresii si valoarea este recalculata de fiecare data cand o valoare din expresie se schimba) 8. Pentru aducerea in prima forma normala a unei relatii ne-normalizate ce operatie nu se efectueaza Raspuns: nu mai tin minte cum era formulat ceva despre atribute dependent tranzitive, oricum era singurul care nu avea legatura cu FN1 9. O forma nu poate fi creata a. pe baza unei interogari de actiune b. pe baza unui tabel c. pe baza unei interogari d. pe baza mai multor tabele Raspuns A 10. Modelul relational conceput de E.F. Codd cuprinde un set de Raspuns 13 reguli 11. Tabelul PROF cu coloanele cod_fac, cod_prof, nume, ore, salariu se intreba care este secventa corecta pentru a afisa suma salariilor tuturor profesorilor (de la toate facultatile) Raspuns: SELECT SUM(salariu) AS TotalSalarii FROM PROF GROUP BY cod_fac; Probabil aici am gresit. Trebuia aleasa varianta fara GROUP BY la sfarsit. 12. O insctructiune SELECT fara o clauza WHERE Raspuns: selecteaza toate randurile din tabel sau vizualizare (mai era varianta ca selecteaza toate coloanele, da mesaj de eroare si nu mai tin minte ultima) 13. Se dadea tabelul FAC cu campurile cod_fac, denumire si adresa si se intreba care este varianta corecta pentru introducerea unei noi inregistrari Raspuns: INSERT INTO FAC (cod_fac, denumire, adresa) SELECT VALUES (MAX(cod_fac)+1, 'o demunire', 'o adresa'); Mai erau doua variante de raspuns care aveau la sfarsit FROM FAC, deci nu erau corecte. 14. Utilizarile valide ale instructiunii ALTER TABLE nu include Raspuns: Redenumirea unui tabel 15. Operatorul LIKE Raspuns: Foloseste caracterul procent drept caracter de inlocuire nepozitional

Page 390: SOLUTII - Baze de Date - Adunate

baze_de_date

Probleme pentru examenul de licenta

____ 1. O baza de date relationala este

a. O colectie de date interrelationate gestionate ca o singura unitate b. Un produs software furnizat de un producator de baze de date c. O structura de date, cum ar fi un tabel, o vizualizare sau un index d. Definita in acelasi mod de toti producatorii de software

____ 2. Un Obiect al unei baze de date este a. O colectie de inregistrari inrudite, stocate ca o singura unitate b. Un produs software furnizat de un producator de baze de date c. O structura, cum ar fi un tabel, o vizualizare sau un index d. O colectie de date interrelationate gestionate ca o singuraunitate

____ 3. Care din urmtoarele baze de date nu este un RDBMS (sistem de gestionare a bazelor de date relatioanale) a. Oracle Database b. MySQL c. Excel Database d. Microsoft SQL Server

____ 4. Un sistem RDBMS(sistem de gestionare a bazelor de date relatioanale) nu include urmatorul serviciu a. Acceptarea unui limbaj de interogare b. Mecanisme de securitate, pentru a impiedica accesul si modificarea neautorizata a

datelor c. Mutarea datelor in si din fisiere de date, dupa cum este necesar d. Generarea diagramelor ERD (Entity Relationship Diagram)

____ 5. Componentele unei baze de date relationale nu includ a. Tabele b. Diagrame ERD c. Restrictii d. Relatii

____ 6. Printre tipurile de restrictii care pot fi folosite in bazele de date relationale, nu se numara a. NOT NULL b. Relatii c. CHECK d. Cheie primara e. Unicitate

____ 7. Normalizarea nu rezolva a. Anomalia de stergere b. Anomalia de actualizare c. Anomalia de inserare d. Anomalia de creare

____ 8. Un identificator unic (cheie primara) a. Poate fi compus numai dintr-un singur atribut

A

C

C

D

B

B

D

B

Page 391: SOLUTII - Baze de Date - Adunate

b. Poate fi compus din atribute concatenate c. Poate fi compus din atribute cu valoarea NULL d. Poate fi compus din zero, unul sau mai multe atribute

____ 9. 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

____ 10. A doua forma normala rezolva anomaliile cauzate de a. Grupurile repetitive b. Dependentele partiale de cheia primara c. Grupurile repetitive si atributele multi valoare d. Dependentele tranzitive

____ 11. A treia forma normala rezolva anomaliile cauzate de a. Dependentele partiale de cheia primara b. Grupurile repetitive c. Dependentele tranzitive d. Atributele multivaloare

____ 12. Problemele de dependenŃă tranzitivă a. Sunt rezolvate de a doua formă normală b. Sunt rezolvate de prima formă normală c. Apar atunci când un atribut non-cheie depinde doar de o parte a cheii primare d. Sunt rezolvate de a treia formă normală

____ 13. SQL este a. Un limbaj procedural b. Un limbaj neprocedural c. Un limbaj orientat spre obiecte d. Un limbaj grafic, folosit pentru definirea diagramelor ER si a diagramelor

conceptuale

____ 14. Un model de date reprezinta o colectie integrata de concepte care nu descriu a. date b. relatii dintre date c. date despre echipa realizatoare a modelului d. constrângeri existente asupra datelor sistemului real analizat.

____ 15. Nu este caracteristica a modelului relational: a. prezenta tuplurilor identice b. articolele unui domeniu sunt omogene c. toate valorile unui domeniu corespunzatoare tuturor cazurilor nu mai pot fi

descompuse in alte valori (sunt atomice) d. fiecare coloana defineste un domeniu distinct si nu se poate repeta in cadrul

aceleiasi relatii

____ 16. Modelul relational nu are ca regula de integritate structurala a. Unicitatea cheii. Cheia primara trebuie sa fie unica si minimala. b. Integritatea entitatii. Atributele cheii primare trebuie sa fie diferite de valoarea

null.

A

B

C

D

B

C

A

C

Page 392: SOLUTII - Baze de Date - Adunate

c. Integritatea referirii. O cheie externa trebuie sa corespunda unei valori a cheii primare asociate.

d. Integritatea referirii. O cheie externa trebuie sa fie ori null in intregime, ori sa corespunda unei valori a cheii primare asociate.

____ 17. 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

____ 18. Care nu este un concept utilizat pentru a descrie formal - uzual - fizic elementele de baza ale organizarii datelor a. relatie - tablou- fisier b. tuplu - linie- inregistrare c. atribut - coloana - camp d. domeniu - zona- functie

____ 19. Instructiunile SQL nu fac parte din categoria a. Limbajul de interogare a datelor (DQL) b. Limbajul de definire a datelor (DDL - Data Definition Language) c. Limbajul de selectare a datelor (DSL - Data Selection Language) d. Limbajul de manipulare a datelor (DML - Data Manipulation Language)

____ 20. Limbajul de definire a datelor (DDL - Data Definition Language) nu include urmatoarea instructiune a. DELETE b. CREATE c. ALTER d. DROP

____ 21. Limbajul de manipulare a datelor (DML – Data Manipulation Language) nu include instructiuniea a. INSERT b. UPDATE c. DELETE d. ALTER

____ 22. Tipurile de date temporale standard nu includ a. DATE b. DATETIME c. TIME d. TIMESTAMP

____ 23. Valorile NULL a. Sunt egale cu alte valori NULL b. Este acelasi lucru ca si spatiile libere c. Sunt intotdeauna permise in mod prestabilit d. Pot fi folosite pentru reprezentarea datelor care lipsesc sau nu sunt cunoscute

____ 24. Definitia unei coloane din instructiunea CREATE TABLE nu poate include a. Numele tabelului b. O clauza DEFAULT c. O clauza NULL sau NOT NULL

B

D

C

A

D

B

D

A

Page 393: SOLUTII - Baze de Date - Adunate

d. Numele coloanei

____ 25. Sintaxa corecta pentru o restrictie NOT NULL este a. nume_coloana REFERENCES NOT NULL b. nume_coloana tip_de_DATA IS NOT NULL c. nume_coloana tip_de_DATA NOT NULL d. DEFAULT [NULL | NOT NULL]

____ 26. Sintaxa corecta pentru o restrictie UNIQUE este a. [CONSTRAINT nume_restrictie] UNIQUE {nume_coloana[,nume coloana...]) b. [CONSTRAINT nume_restrictie] UNIQUE (nume_tabel) c. nume_coloana REFERENCES UNIQUE nume_tabel d. DEFAULT UNIQUE (nume_coloana)

____ 27. Sintaxa corecta pentru o restrictie referentiala asupra unei coloane este a. CONSTRAINT nume_restrictie] REFERENCES nume_tabel b. nume_coloana REFERENCES nume_tabel c. FOREIGN KEY nume_coloana REFERENCES nume_tabel (nume_coloana) d. REFERENCES nume_tabel (nume_coloana)

____ 28. Utilizarile valide ale instructiunii ALTER TABLE nu include a. Adaugarea coloanelor b. Eliminarea unei chei primare c. Redenumirea unui tabel d. Adaugarea unei restrictii

____ 29. Nu este functie SQL standard pentru siruri de caractere a. UPPER b. LENGTH sau LEN c. LOWER d. LIKE

____ 30. 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

____ 31. O instructiune SQL care contine o functie de agregare a. Nu poate include, in acelasi timp, o clauza GROUP BY si o clauza ORDER BY b. Trebuie sa includa o clauza GROUP BY c. Trebuie sa includa o clauza ORDER BY d. Poate contine si coloane obisnuite si coloane calculate

____ 32. Care este varianta corecta pentru a crea tabelul Salariat, cu caracteristicile de mai jos?

COD _ANG NUME PRENUME DATA_ANG VARST

A EMAIL SALARIU

not null numeric de 5

sir caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0 numar de 10 cu 2 zecimale

C

A

D

C

D

B

D

A

Page 394: SOLUTII - Baze de Date - Adunate

a. CREATE TABLE SALARIAT ( cod_ang NUMBER(5) NOT NULL, nume VARCHAR2(20), prenume VARCHAR2(20), data_angajarii DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2) DEFAULT 0);

b. CREATE TABLE SALARIAT ( cod_ang NUMBER(5) nume VARCHAR2(20), prenume VARCHAR2(20), data_angajarii DATE , varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2) DEFAULT 0);

c. CREATE TABLE SALARIAT ( cod_ang NUMBER(5) , NOT NULL, nume VARCHAR2(20), prenume VARCHAR2(20), data_angajarii DATE , DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(50), salariu NUMBER(10,2) , DEFAULT 0);

____ 33. Pentru a insera in tabelul SALARIAT inregistrari,

COD _ANG NUME PRENUME DATA_AN

G VARSTA EMAIL SALARIU

not null numeric de 5

sir caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0

numar de 10 cu 2 zecimale

care varianta este incorecta? a. INSERT INTO SALARIAT(COD _ANG, NUME, PRENUME, DATA_ANG, VARSTA, EMAIL,

SALARIU) VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘[email protected]’, 2500.50) b. INSERT INTO SALARIAT(COD _ANG, NUME, PRENUME, VARSTA, EMAIL)

VALUES(5, ‘Ene’, ‘Ana’, 20, ‘[email protected]’) c. INSERT INTO SALARIAT(COD _ANG, NUME,PRENUME,VARSTA,EMAIL, SALARIU)

VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘[email protected]’) d. INSERT INTO SALARIAT

VALUES(5, ‘Ene’, ‘Ana’, ‘1/06/2009’, 20, ‘[email protected]’, 2500.50)

____ 34. Care este varianta corecta pentru a crea tabelul CARTE, cu caracteristicile de mai jos, indicand cheile la nivel de coloana? (Tabelele DOMENIU_CARTE si CARTE sunt in relatia 1:M) CARTE(codc CHAR(5), titlu VARCHAR2(30), autor VARCHAR2(30), pret NUMBER(8,2), nrex NUMBER(3), coddom CHAR(5)) a. CREATE TABLE CARTE

C

B

Page 395: SOLUTII - Baze de Date - Adunate

(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));

____ 35. 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) CARTE(codc CHAR(5) , titlu VARCHAR2(30), autor VARCHAR2(30), pret NUMBER(8,2), nrex NUMBER(3), coddom CHAR(5)) 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),

C

Page 396: SOLUTII - Baze de Date - Adunate

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));

____ 36. Sa se creeze tabelul asociativ imprumuta, a carui structura este data mai jos(codc, codcit si dataim sunt chei primare). Sa se precizeze legatura cu tabelele carte si cititor, aflate in relatia M:M (mai multi la mai multi) a. IMPRUMUTA (

codc CHAR(5), codcit CHAR(5), dataim DATE DEFAULT SYSDATE, datares DATE, dataef DATE, PRIMARY KEY (codel, codec, 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, datares DATE, dataef DATE, PRIMARY KEY (codel, codec, dataim));

____ 37. Sa se creeze tabelul CARTE_INFO(codc, titlu, autor) prin copiere din tabelul

A

C

Page 397: SOLUTII - Baze de Date - Adunate

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’;

____ 38. Pentru a introduce in tabelul SALARIAT COD

_ANG NUME PRENUME

DATA_ANG

VARSTA SALARIU

not null numeric de 5

sircaractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

valoare implicita 0

numar de 10 cu 2 zecimale

doua coloane: Cod_Funct si Email ce varianta folosim? a. ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER COLUMN ADD

Email char(25); b. ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ADD Email CHAR(25); c. ALTER TABLE SALARIAT ADD (Cod_Funct NUMBER(2) , Email CHAR(25)); d. ALTER TABLE SALARIAT ADD Cod_Funct NUMBER(2), ALTER ADD Email

char(25);

____ 39. Ce comanda creeaza tabelul SALARIAT_1 care să aiba aceeiasi structura cu tabelul SALARIAT

COD _ANG NUME PRENUME DATA_AN

G VARST

A EMAIL SALARIU

not null numeric de 5

sir de caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0

numar de

C

B

Page 398: SOLUTII - Baze de Date - Adunate

10 cu 2 zecimale

si sa contina salariatii care au salariu >100? a. CREATE TABLE SALARIAT_1

SELECT * FROM SALARIAT WHERE SALARIU>100; b. CREATE TABLE SALARIAT_1

AS SELECT * FROM SALARIAT WHERE SALARIU>100; c. CREATE TABLE SALARIAT_1

AS SELECT FROM SALARIAT WHERE SALARIU>100; d. CREATE TABLE SALARIAT_1

AS SELECT COD_ANG, SALARIU FROM SALARIAT WHERE SALARIU>100;

____ 40. Ce comanda sterge din tabelul SALARIAT COD

_ANG NUME PRENUME

DATA_ANG

VARSTA EMAIL SALARIU

not null numeric de 5

sir de caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

sir de caractere de dimensiune fixa, de 30

valoare implicita 0

numar de 10 cu 2 zecimale

coloana nume si coloana salariu? a. ALTER TABLE SALARIAT

DROP nume, salariu; b. ALTER TABLE SALARIAT

DROP COLUMN (nume, salariu); c. ALTER TABLE SALARIAT

DROP (nume, salariu); d. ALTER TABLE SALARIAT

DROP COLUMN nume, COLUMN salariu;

____ 41. Ce comanda creeaza corect tabelul SALARIAT, specificand constrangerile? COD

_ANG NUME PRENUME DATA_AN

G VARSTA EMAIL SALARIU

cheie primara numeric de 5

not null sir de caractere de maxim 20

sir caractere de maxim 20

date, valoare implicita data curentă

numeric de 2

unic sir de caractere de dimensiune fixa, de 30

> 0 numar de 10 cu 2 zecimale

a. CREATE TABLE salariat(

cod_ang NUMBER(5) PRIMARY KEY, nume VARCHAR2(20) NOT NULL, prenume VARCHAR2(20), data_ang DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(30) UNIQUE, salariu NUMBER(10,2) CHECK (salariu > 0));

C

A

Page 399: SOLUTII - Baze de Date - Adunate

b. CREATE TABLE salariat( cod_ang NUMBER(5) PRIMARY KEY, nume VARCHAR2(20) NOT NULL, prenume VARCHAR2(20), data_ang DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(30) UNIQUE, salariu NUMBER(10,2) > 0));

c. CREATE TABLE salariat( cod_ang NUMBER(5) PRIMARY KEY, nume VARCHAR2(20) NOT NULL, prenume VARCHAR2(20), data_ang DATE DEFAULT SYSDATE, varsta NUMBER(2), email CHAR(30), salariu NUMBER(10,2) CHECK (salariu > 0));

____ 42. 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 PRIMARY KEY (cod_cititor, cod_carte, data_imprumut);

____ 43. Pentru tabelul Salariat cod_depart cod_ang# nume pren salariu cod_funct

care este comanda corecta, pentru a modifica salariu la 3000, pentru angajatii care lucreaza in departamentul 10 si au salariul<3000? a. UPDATE salariat SET salariu=3000

WHERE cod_depart=10 AND salariu<3000; b. MODIFY salariat SET salariu=3000

WHERE cod_depart=10 , salariu<3000; c. UPDATE salariat SET cod_depart=10 AND salariu<3000

WHERE salariu=3000; d. MODIFY salariat SET salariu=3000

WHERE cod_depart=10 AND salariu<3000;

____ 44. Să se insereze în tabelul CARTE toate cărŃile din tabelul CARTE_INFO, presupunând că 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

C

A

D

Page 400: SOLUTII - Baze de Date - Adunate

AS SELECT * FROM CARTE_INFO;

d. INSERT INTO CARTE SELECT * FROM CARTE_INFO;

____ 45. Pentru profesorii titulari, sa se maresca cumulul cu 10% si sa se rotunjeasca la 2 zecimale. UPDATE PROF SET CUMUL = ROUND([CUMUL]*1.1,2) WHERE TITULAR="Y"; 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);

____ 46. Sã 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);

____ 47. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu cod_fuct TOTALURI

C

A

C

Page 401: SOLUTII - Baze de Date - Adunate

cod_fac# nr_prof total_sal

care este secventa corecta pentru o instructiune INSERT cu o instructiune SELECT interna, pentru a insera in tabelul TOTALURI, un rand pentru fiecare facultate din tabelul PROF, care sa contina numarul de profesori din facultate si suma salariilor lor?

a. INSERT TO TOTALURI SELECT COD_FAC, COUNT(*) , SUM(SALARIU) FROM PROF ORDER BY COD_FAC;

b. INSERT INTO TOTALURI SELECT COD_FAC, COUNT(*) AS NR_PROF, SUM(SALARIU) AS TOTAL_SAL FROM PROF ;

c. INSERT INTO TOTALURI SELECT COD_FAC, COUNT(*) AS NR_PROF, SUM(SALARIU) AS TOTAL_SAL FROM PROF GROUP BY COD_FAC;

____ 48. Pentru tabelul PROF cod_prof# cod_fac pren salariu care este secventa corecta pentru a modifica salariile cu 10% , care nu contin valori NULL?

a. UPDATE PROF SET SALARIU = SALARIU*1.1 WHERE SALARIU NOT NULL;

b. UPDATE PROF SET SALARIU = SALARIU*1.1 WHERE SALARIU IS NOT NULL;

c. UPDATE PROF SElLECT SALARIU = SALARIU*1.1 WHERE SALARIU <>0;

____ 49. Pentru tabelul PROF cod_prof# cod_fac nume pren salariu cod_funct care este secventa corecta pentru a sterge toate cadrele didactice care sunt profesori consultanti? a. DELETE FROM PROF WHERE COD_FUNCT=’C’; b. DELETE PROF WHERE COD_FUNCT<>’C’; c. DROP FROM PROF WHERE COD_FUNCT=’C’; d. DROP PROF WHERE COD_FUNCT=’C’;

____ 50. Pentru tabelul: FAC cod_fac# denumire adresa care este secventa corecta pentru o inserare, folosind instructiunea SELECT a. INSERT INTO FAC

(COD_FAC, DENUMIRE, ADRESA) SELECT VALUES(MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA');

b. INSERT INTO FAC SELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA' FROM FAC;

c. INSERT INTO FAC (COD_FAC, DENUMIRE, ADRESA) SELECT MAX(COD_FAC)+1, 'LIMBI', 'ION GHICA' FROM FAC;

____ 51. Pentru tabelul PROF

B

A

C

C

Page 402: SOLUTII - Baze de Date - Adunate

cod_prof# cod_fac nume pren salariu

care este secventa corecta pentru a afisa toti profesorii impreuna cu media _ salariu pentru fiecare facultate , rotunjita la doua pozitii zecimale

a. SELECT COD_FAC, ROUND (AVG (SALARIU), 2) AS medie_salariu FROM PROF ORDER BY COD_FAC;

b. SELECT COD_FAC, ROUND (AVG (SALARIU, 2) AS medie_salariu FROM PROF GROUP BY COD_FAC;

c. SELECT COD_FAC, ROUND (AVG (SALARIU), 2) AS medie_salariu FROM PROF GROUP BY COD_FAC;

d. SELECT FROM PROF COD_FAC, ROUND AVG (SALARIU), 2 AS medie_salariu GROUP BY COD_FAC;

____ 52. Pentru tabelul PROF cod_prof# cod_fac nume pren salariu care este secventa corecta pentru a afisa suma salariilor tuturor profesorilor din universitate.

a. SELECT SUM (Salariu) AS Total_Salariu FROM PROF;

b. SELECT SUM (Salariu) AS Total_Salariu FROM PROF GROUP BY COD_FAC;

c. SELECT SALARIU, SUM (Salariu) AS Total_Salariu FROM PROF;

d. SELECT COD_FAC, SUM (Salariu) AS Total_Salariu FROM PROF;

____ 53. Pentru tabelul PROF cod_prof# cod_fac nume pren salariu care este secventa corecta pentru a afisa toti profesorii pentru care COD_FAC =1 si salariu>=1200, sau toti profesorii pentru care COD_FAC =3 si salariu < 2000. a. SELECT COD_FAC, COD_PROF, NUME, SALARIU

FROM PROF WHERE (COD_FAC=1 OR SALARIU >1200) AND (COD_FAC =3 OR SALARIU<2000);

b. SELECT COD_FAC, COD_PROF, NUME,SALARIU FROM PROF WHERE (COD_FAC=1 AND SALARIU >1200) AND (COD_FAC =3 AND SALARIU<2000);

A

C

Page 403: SOLUTII - Baze de Date - Adunate

c. SELECT COD_FAC, COD_PROF, NUME, SALARIU FROM PROF WHERE (COD_FAC=1 AND SALARIU >1200) OR (COD_FAC =3 AND SALARIU<2000);

d. SELECT COD_FAC, COD_PROF, NUME,SALARIU FROM PROF WHERE COD_FAC=1 OR SALARIU >1200 OR (COD_FAC =3 OR SALARIU<2000);

____ 54. Pentru tabelul PROF cod_prof# cod_fac nume pren salariu care secventa este corecta pentru a afisa citi profesori nu au o valoare introdusa pe coloana salariu? a. SELECT COUNT(salariu)

FROM PROF WHERE SALARIU =0;

b. SELECT COUNT(*) FROM PROF WHERE SALARIU =NULL;

c. SELECT COUNT(*) FROM PROF WHERE SALARIU IS NOT NULL;

d. SELECT COUNT(*) FROM PROF WHERE SALARIU IS NULL;

____ 55. O uniune (join) fara o clauzä 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)

____ 56. 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

____ 57. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu FAC cod_fac# denumire adresa care este secventa corecta pentru o interogare de uniune interna(inner join) care sa afiseze toti profesorii si denumirile facultatilor la care predau, in ordinea crescatoare a denumirilor

a. SELECT NUME, PREN, DENUMIRE FROM FAC, PROF WHERE A.COD_FAC =B.COD_FAC ORDER BY FAC.DENUMIRE;

D

C

A

B

Page 404: SOLUTII - Baze de Date - Adunate

b. SELECT NUME, PREN, DENUMIRE FROM FAC, PROF WHERE FAC.COD_FAC=PROF.COD_FAC ORDER BY FAC.DENUMIRE;

c. SELECT NUME, PREN, DENUMIRE FROM FAC, PROF WHERE FAC.COD_FAC=PROF.COD_FAC;

____ 58. Să se obtinapentru fiecare carte, codul sau şi 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;

____ 59. Care este secventa corecta care să afişeze numărul cărŃilor împrumutate cel puŃin de două ori (pentru fiecare carte împrumutată mai mult decât o dată să se obŃină numărul de câte ori a fost împrumutată).

a. SELECT COUNT(COUNT(codel))

FROM imprumuta GROUP BY codcarte HAVING COUNT(*)>1;

b. SELECT COUNT(codel) FROM imprumuta GROUP BY codcarte HAVING COUNT(*)>1;

c. SELECT COUNT(COUNT(codel)) FROM imprumuta WHERE COUNT(*)>1;

d. SELECT COUNT(codel) FROM imprumuta ORDERBY BY codcarte HAVING COUNT(*)>1;

____ 60. Care este secventa corecta care afiseaza pentru fiecare domeniu de carte, numărul cărŃilor din domeniu, media preŃurilor şi numărul total de exemplare a. SELECT codcarte, COUNT(*), AVG(pret)

FROM CARTE

C

A

C

Page 405: SOLUTII - Baze de Date - Adunate

GROUP BY codcarte; b. SELECT coded, AVG(pret), SUM(nrex)

FROM CARTE GROUP BY codcarte;

c. SELECT codcarte, COUNT(*), AVG(pret), SUM(nrex) FROM CARTE GROUP BY codcarte;

d. SELECT COUNT(*), AVG(pret), SUM(nrex) FROM CARTE ORDER BY codcarte;

____ 61. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu FAC cod_fac# denumire adresa care este secventa corecta pentru o interogare de uniune externa catre stanga, care sa afiseze toti profesorii si denumirile facultatilor la care predau a. SELECT NUME, PREN, DENUMIRE

FROM FAC PROF LEFT OUTER JOIN ON A.COD_FAC = B.COD_FAC; b. SELECT NUME, PREN, DENUMIRE

FROM FAC LEFT OUTER JOIN PROF ON A.COD_FAC = B.COD_FAC;

c. SELECT NUME, PREN, DENUMIRE FROM FAC A LEFT OUTER JOIN PROF B ON A.COD_FAC = B.COD_FAC;

____ 62. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu cod_funct FUNCTII cod_funct# nume_funct care este secventa corecta pentru o subinterogare necorelata, care sa afiseze toate functiile pentru care nu exista profesorii incadrati

a. SELECT cod_funct, nume_funct FROM functii WHERE cod_funct NOT IN (SELECT DISTINCT cod_funct FROM prof);

b. SELECT cod_funct, nume_funct FROM functii WHERE cod_funct NOT IN SELECT DISTINCT cod_funct FROM prof;

c. SELECT cod_funct, nume_funct FROM functii WHERE cod_funct IN (SELECT cod_funct FROM prof);

____ 63. Care este comanda corecta care pentru fiecare facultate, se 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

C

A

C

Page 406: SOLUTII - Baze de Date - Adunate

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;

____ 64. Să se obŃină titlurile şi preŃurile cărŃilor mai scumpe decât cartea având titlul “Baze de date”, al cărui 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’;

____ 65. Pentru tabelele PROFESORI(codp, nume, pren, salariu) COPII (codp, nume_c, virsta) care este secventa corecta pentru a afisa profesorii cu 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 codp IN (SELECT codp FROM COPII);

B

A

Page 407: SOLUTII - Baze de Date - Adunate

c. SELECT a.nume, a.pren FROM PROFESORI A WHERE a.codp IN COPII;

d. SELECT a.nume, a.pren FROM PROFESORI A WHERE a.codp IN DISTINCT codp FROM COPII;

____ 66. Pentru tabelele PROFESORI(codp, nume, pren, salariu) COPII (codp, nume_c, virsta) care este secventa corecta pentru a afisa profesorii fara copii a. SELECT a.nume, a.pren

FROM PROFESORI A WHERE codp NOT IN (SELECT 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;

d. SELECT a.nume, a.pren FROM PROFESORI A WHERE a.codp IS NOT (SELECT DISTINCT codpFROM COPII);

____ 67. 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), valoar 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.codact=b.codact AND b.nume=‘&x’;

b. SELECT a.seriain, a.seriasf, b.nume FROM actiuni , actionari WHERE a.codact=b.codact AND nume=‘&x’;

c. SELECT a.seriain, a.seriasf, b.nume FROM actiuni a, actionari b WHERE a.codact=b.codact ;

d. SELECT a.seriain, a.seriasf, b.nume FROM actiuni a, actionari b WHERE a.codact=b.codact OR b.nume=‘&x’;

____ 68. Se considera pentru actionarii unei firme, tabelul ACTIUNI (cod_act number(5), seriain number(8), seriasf number(8), valoar number(8)) (unde seriain si seriasf reprezinta seria de inceput, respectiv de sfarsit al intervalului de actiuni pe care il are un actionar).

B

A

D

Page 408: SOLUTII - Baze de Date - Adunate

A

Care este secventa corecta care afiseaza suma necesara firmei pentru plata tuturor devidentelor (numrul 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;

____ 69. 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’;

____ 70. Pentru tabelele: PROF cod_prof# cod_fac nume pren salariu cod_funct FAC cod_fac# denumire adresa care este secventa corecta pentru o subinterogare corelata, care sa afiseze toate facultatile pentru care suma salariile profesorilor este mai mare 10000 a. SELECT DISTINCT DENUMIRE

FROM FAC WHERE 10000< (SELECT sum(salariu) FROM PROF WHERE A.COD_FAC=B.COD_FAC);

b. SELECT DISTINCT DENUMIRE FROM FAC A WHERE 10000< ( SELECT sum(salariu) FROM PROF B WHERE A.COD_FAC=B.COD_FAC);

c. SELECT DISTINCT DENUMIRE FROM FAC A WHERE 10000< SELECT sum(salariu) FROM PROF B WHERE A.COD_FAC=B.COD_FAC;

____ 71. Care este comanda corecta pentru a afisa toti salariatii , in ordine crescatoare dupa nume, care sunt manageri ? a. SELECT DISTINCT sef.nume, angajat.cod_manager

FROM salariati sef, salariati angajat

C

B

Page 409: SOLUTII - Baze de Date - Adunate

WHERE sef.cod_salariat= angajat.cod_manager ORDER BY sef.nume;

b. SELECT DISTINCT sef.nume, angajat.cod_manager FROM salariati sef, salariati angajat WHERE cod_salariat= cod_manager ORDER BY sef.nume;

c. SELECT DISTINCT nume, cod_manager FROM salariati sef, salariati angajat WHERE sef.cod_salariat= angajat.cod_manager;

d. ELECT DISTINCT nume, cod_manager FROM salariati sef, salariati angajat WHERE cod_salariat= cod_manager ORDER BY sef.nume;

____ 72. Care este comanda corecta care sa afiseze 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’);

____ 73. 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;

C

D

Page 410: SOLUTII - Baze de Date - Adunate

____ 74. Care este comanda corecta care determina micsorarea salariilor cu 10%, cu rotunjire la 2 zecimale , a angajatilor care nu sunt titulari? a. UPDATE salariat

SET salariu=ROUND(salariu*0.9, 2); b. UPDATE salariat

SET salariu=ROUND(salariu*1.1) WHERE titular =’N’;

c. UPDATE salariat SET salariu = ROUND(salariu*0.9, 2) WHERE TITULAR=’N’;

d. UPDATE salariat SET salariu=ROUND(salariu+salariu*0.1) WHERE titular =’Y’;

____ 75. Care este comanda corecta care afiseaza numele si salariul angajatilor condusi direct de ‘ENE DAN’? a. SELECT nume, salariu

FROM salariati WHERE cod_ang = (SELECT cod_manager FROM salariati WHERE UPPER(nume) ='ENE' , UPPER(pren) ='DAN' );

b. SELECT nume, salariu FROM salariati WHERE cod_manager IN (SELECT cod_ang FROM salariati WHERE nume ='ENE' , pren ='DAN' );

c. SELECT nume, salariu FROM salariati (SELECT cod_ang FROM salariati WHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN' );

d. SELECT nume, salariu FROM salariati WHERE cod_manager = (SELECT cod_ang FROM salariati WHERE UPPER(nume) ='ENE' AND UPPER(pren) ='DAN' );

____ 76. Care este comanda corecta care afiseaza numele cititorilor care au carti nerestituite? a. SELECT nume_cititor

FROM imprumuta WHERE data_restituirii = NULL;

b. SELECT nume_cititor FROM imprumuta WHERE data_restituirii IS NOT NULL;

c. SELECT nume_cititor FROM imprumuta WHERE data_restituirii IS NULL;

d. SELECT nume_cititor FROM imprumuta WHERE data_restituirii > SYSDATE;

____ 77. Care este comanda corecta care sterge valoarea coloanei salariu pentru angajatii care sunt angajati cu contract de colaborare?

a. DELETE salariu

FROM salariati WHERE contract=’colaborare’;

b. UPDATE salariati

C

D

C

D

Page 411: SOLUTII - Baze de Date - Adunate

SET salariu IS null WHERE contract=’colaborare’;

c. DROP salariu FROM salariati WHERE contract=’colaborare’;

d. UPDATE salariati SET salariu=null WHERE contract=’colaborare’;

____ 78. Care este comanda corecta care afiseaza codul departamentelor, numele departamentelor si suma salariilor pentru fiecare departament? a. SELECT cod_departament, nume_departament, SUM(salariu)

FROM salariati s, departamente d GROUP BY cod_departament, nume_departament;

b. SELECT cod_departament, nume_departament, SUM(salariu) FROM salariati s, departamente d WHERE s.cod_departament=d.cod_departament GROUP BY cod_departament;

c. SELECT cod_departament, nume_departament, SUM(salariu) FROM salariati s, departamente d WHERE s.cod_departament=d.cod_departament GROUP BY cod_departament, nume_departament;

d. SELECT cod_departament, nume_departament, SUM(salariu) FROM salariati, departamente WHERE s.cod_departament=d.cod_departament GROUP BY cod_departament, nume_departament;

____ 79. 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;

____ 80. 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

C

B

D

Page 412: SOLUTII - Baze de Date - Adunate

(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);

Page 413: SOLUTII - Baze de Date - Adunate

1

SISTEME DE GESTIUNE A BAZELOR DE DATE

2007-2008 1) O bază de date este: a) o colecŃie de date aflate în relaŃie unele cu altele şi structurată astfel încât să

poată servi unui anumit scop b) un set de date corelate şi organizate în scopul prelucrării lor rapide şi

concomitente de către mai multe persoane. c) şi (a) şi (b) d) nici (a) nici (b) 2) O bază de date este: a) un tabel organizat pe coloane b) o listă organizată pe linii c) un model al microuniversului la care se referă 3) Datele sunt: a) informatii contextualizate b) cunostinte care au suferit prea putine prelucrari c) informatii primare 4) InformaŃiile sunt: a) date contextualizate b) date validate, organizate şi relaŃionate c) cunoştinŃe care au suferit doar putine prelucrari 5) CunoştinŃele sunt: a) informaŃii contextualizate b) date contextualizate c) informaŃii validate, organizate şi relaŃionate 6) Un model de date este: a) o colecŃie de concepte care descriu tipurile de date din baza de date şi un set de

operaŃii de bază care descriu modul de interogare şi actualizare a acestora b) o colecŃie de concepte care descriu structura bazei de date şi un set de operaŃii

de bază care descriu modul de lucru cu baza de date c) o colecŃie de concepte care descriu datele, informaŃiile şi cunoştinŃele

înmagazinate în baza de date şi un set de operaŃii de bază care descriu modul actualizare a acestora

7) Sistemele de gestiune a bazelor de date prerelaŃionale sunt: a) sistemele grafice b) sistemele de fişiere c) sistemele ierahice si sistemele de tip reŃea 8) Sistemele de gestiune a bazelor de date relaŃionale comerciale sunt sistemele de

gestiune care respectă: a) cele 12 reguli ale lui Chuck Kelly b) cele 12 reguli ale lui E.F. Codd c) cele 12 reguli restricŃii ale lui D.L. Childs 9) Modelul relaŃional se bazează pe:

user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
Page 414: SOLUTII - Baze de Date - Adunate

2

a) noŃiunea matematică de relaŃie binară între mulŃimi b) noŃiunea matematică de submulŃime a unui produs cartezian de mulŃimi c) noŃiunea matematică de relaŃie ternară între mulŃimi 10) Tabelul este reprezentarea convenŃională şi comodă a: a) entităŃilor b) entităŃilor şi a relaŃiilor n-m dintre entităŃi c) entităŃilor şi relaŃiilor 1-m dintre entităŃi d) entităŃilor şi relaŃiilor dintre entităŃi 11) Sistemele de gestiune post-relaŃionale ale bazelor de date sunt a) sistemele orientate obiect şi sistemele hibride; b) sistemele obiect-relaŃioanle; c) sistemele orientate obiect; 12) Un sistem de gestiune a bazei de date este o componentă: a) software b) hardware c) şi (a) şi (b) 13) Un sistem de gestiune a bazei de date este: a) o interfaŃă între baza de date şi utilizatorii ei b) o interfaŃă între baza de date şi administratorul ei c) şi (a) şi (b) 14) Intr-o bază de date este necesară : a) numai independenŃa fizică a datelor b) numai independenŃa logică a datelor c) şi independenŃa fizică şi independenŃa logică a datelor 15) IndependenŃa faŃă de strategiile de acces la datele dintr-o bază de date este: a) necesară b) interzisă c) opŃională 16) Arhitectura ANSI-SPARC pe 3 nivele pentru bazele de constă din: a) nivelul extern, nivelul hibrid şi nivelul intern b) nivelul fizic, nivelul conceptual şi nivelul hibrid c) nivelul extern, nivelul conceptual şi nivelul intern; 17) Reprezentarea fizică a datelor din baza de date este descrisă la nivelul: a) hibrid; b) intern; c) conceptual; 18) Nivelul extern: a) reprezintă modurile diferite în care diferiŃi utilizatori ai bazei de date percep datele

stocate în aceasta b) reprezintă modul unic în care datele din baza de date sunt percepute de către

proprietarul, administratorul şi proiectantul bazei de date c) permite sistemului de operare să interogheze baza de date 19) Nivelul conceptual a) descrie datele şi relaŃiile dintre ele, precum şi modul de implementare a acestora la nivelul fizic

user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
Page 415: SOLUTII - Baze de Date - Adunate

3

b) descrie datele şi relaŃiile dintre ele, fără detalii de implementare c) constă exclusiv din schema conceptuală a bazei de date 20) Proiectarea bazei de date la nivel logic constă din realizarea: a) schemei interne şi a schemei conceptuale a bazei de date; b) schemei externe şi a schemei conceptuale a bazei de date; c) schemei externe şi a schemei interne a bazei de date; 21) Integritatea referenŃială a bazei de date se referă la: a) relaŃiile din baza de date b) entităŃile din baza de date c) şi la relaŃiile şi la entităŃile din baza de date 22) Forma normală Boyce-Codd este o variantă mai tare a: a) FN1 b) FN3 c) FN5 23) O relaŃie este în FN2 dacă este în FN1 şi dacă : a) oricare dintre atributele sale care nu fac parte din cheia primară este complet dependent funcŃional de cheia primară b) oricare dintre atributele sale care nu fac parte din cheia primară ia câte o singură valoare pentru fiecare instanŃă a sa c) oricare dintre atributele sale care nu fac parte din cheia primară ia valoarea NULL 24) O relaŃie este în FN3 dacă a) este în FN1 şi în FN2 simultan b) este în FN1 şi nici unul dintre atributele sale care nu fac parte din cheia primară nu este, prin tranzitivitate, dependent funcŃional de cheia primară c) este în FN2 nici unul dintre atributele sale care nu fac parte din cheia primară nu este, prin tranzitivitate, dependent funcŃional de cheia primară 25) Interogările de acŃiune sunt interogări de: a) creare de tabel, actualizare şi adăugare b) actualizare, adăugare şi ştergere c) actualizare, adăugare, ştergere şi creare de tabel 26) Un index se poate şterge cu clauza: a) DELETE INDEX b) DROP INDEX c) REMOVE INDEX 27) În algebra relaŃională există: a) numai operaŃii unare b) numai operaŃii binare c) operaŃii unare şi binare 28) Cardinalul relaŃiei rezultate din produsul cartezian de relaŃii este: a) mai mare decât cardinalul relaŃiei rezultate din θ-joncŃiunea aceloraşi relaŃii b) egal cu cardinalul relaŃiei rezultate din θ-joncŃiunea aceloraşi relaŃii c) mai mic decât cardinalul relaŃiei rezultate din θ-joncŃiunea aceloraşi relaŃii 29) Pentru optimizarea interogărilor pe baze de date relaŃioanle se recomandă: a) utilizarea clauzei WHERE în detrimentul clauzei HAVING pentru a filtra înregistrările returnate de clauza SELECT

user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
Page 416: SOLUTII - Baze de Date - Adunate

4

b) utilizarea cuvântului-cheie DISTINCT în detrimentul clauzei GROUP BY pentru a găsi o listă de înregistrări distincte c) toate cele de mai sus 30) Pentru optimizarea interogărilor pe baze de date relaŃioanle se recomandă: a) evitarea clauzei LEFT JOIN şi a valorii NULL pentru atribute b) utilizarea cererilor imbricate c) toate cele de mai sus 31) Autorul conceptului de "data warehouse" (depozit de date) este: a) E.F. Codd b) William Inmon c) Earl Hadden 32) Un depozit de date este: a) o colecŃie tematică şi integrată de date b) o colecŃie de date nevolatilă dar dinamică în timp c) şi (a )şi (b) 33) Depozitele de date constituie baza informaŃională a: a) sistemelor de management a informaŃiilor (MIS) b) sistemelor de suport pentru decizii (DSS) c) sistemelor de suport pentru management (MSS) 34) RedundanŃa datelor: a) este creată în mod intenŃionat în depozitele de date b) este minimizată în bazele de date relaŃionale c) este maximizată în bazele de date obiect-relaŃionale d) este minimizată în depozitele de date

35) Intr-un depozit de date este necesar să existe: a) un sistem coerent de codificare şi reprezentare a informaŃiilor b) un sistem consistent de unităŃi de măsură c) un sistem stabil de reprezentare fizică a datelor d) toate cele de mai sus 36) O cheie de acces: a) pentru bazele de date relaŃionale este nemodificabilă pe întreaga perioadă de

existenŃă a bazei de date; b) pentru bazele de date orientate obiect este o instanŃă a obiectului access key c) pentru depozitele de date cuprinde şi o variabilă temporală; 37) OperaŃiile de actualizare a depozitelor de date sunt: a) de tip ştergere b) de tip adăugare c) şi (a) şi (b) 38) OLTP înseamnă: a) on line timing and processing b) object linking and trigger parsing c) on line transactional processing 39) Datele dintr-un sistem OLTP: a) sunt date dinamice, detaliate, incosistente, fragmentate, redundante b) constituie o sursă de date pentru depozitele de date,

user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
Page 417: SOLUTII - Baze de Date - Adunate

5

c) şi (a) şi (b) d) nici (a) nici (b) 40) Printre regulile cu care W. Inmon a definit depozitele de date se numără: a) depozitul de date şi mediul operaŃional trebuie să fie separate, b) depozitul de date conŃine date istorice referitoare la o lungă perioadă de timp c) şi (a) şi (b) 41) Printre regulile cu care W. Inmon a definit depozitele de date se numără: a) datele din depozitul de date trebuie să fie de tip relaŃional b) datele din depozitul de date trebuie să fie integrate, c) şi (a) şi (b) 42) Printre regulile cu care W. Inmon a definit depozitele de date se numără: a) sunt permise actualizari online b) datele din depozitul de date sunt orientate spre obiect c) şi (a) şi (b)

43) Depozitele de date: a) diferă faŃă de sistemele informatice clasice din punctul de vedere al ciclului de dezvoltare şi de viaŃă b) diferă fată de sistemele OLTP din punctul de vedere al frecvenŃei şi tipului de tranzacŃii permise c) şi (a) şi (b) 44) Mecanismul charge-back pentru utilizarea resurselor este o caracteristică a: a) sistemelor OLTP b) sistemelor de fişiere c) depozitelor de date 45) Printre componentele unui depozit de date se numără: a) datele operaŃionale; b) metadatele; c) şi (a) şi (b) 46) Printre componentele unui depozit de date se numără: a) managerul depozitului de date; b) sistemul de intrari şi iesiri; c) managerul read/write online 47) Printre componentele unui depozit de date se numără: a) componenta front-end; b) managerul depozitului de date; c) şi (a) şi (b) 48) Printre componentele unui depozit de date se numără: a) componenta front-end b) componenta back-end c) şi (a) şi (b) 49) Printre componentele unui depozit de date se numără: a) componenta front-line b) componenta back-end c) şi (a) şi (b)

user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
Page 418: SOLUTII - Baze de Date - Adunate

6

50) Printre componentele unui depozit de date se numără: a) uneltele de data mining şi OLAP b) uneltele de raportare şi interogare c) şi (a) şi (b) 51) Printre componentele unui depozit de date se numără: a) uneltele de data mining şi OLTP b) unelte de dezvoltare a aplicaŃiilor c) şi (a) şi (b) 52) Printre componentele unui depozit de date se numără: a) uneltele de OLAP şi OLTP b) unelte pentru sisteme de informaŃii executive c) şi (a) şi (b) 53) Printre componentele unui depozit de date se numără: a) datele sintetizate b) metadatele c) şi (a) şi (b) 54) Printre componentele unui depozit de date se numără: a) datele detaliate b) metadatele c) şi (a) şi (b) 55) Printre componentele unui depozit de date se numără: a) macrodatele b) metadatele c) şi (a) şi (b) 56) Metadatele care intră în componenŃa unui depozit de date pot fi: a) metadate administrative b) metadate de actualizare c) metadate calendaristice 57) Metadatele care intră în componenŃa unui depozit de date pot fi: a) metadate pentru optimizare b) metadate pentru minimizarea timpului de scriere în depozit c) metadate fragmentate 58) Valorificarea informaŃiei din depozitele de date se poate face prin: a) analiza multirelaŃională b) mecanismul OLAP c) mecanismul OLTP 59) Valorificarea informaŃiei din depozitele de date se poate face prin: a) analiza multidimensională b) analiza multirelatională c) mecanismul OLTP 60) Valorificarea informaŃiei din depozitele de date se poate face prin: a) mecanismul OLAP b) analiza multidimensională c) şi (a) şi (b)

user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
Page 419: SOLUTII - Baze de Date - Adunate

7

61) Arhitectura unui instrument OLAP este o arhitectura pe: a) 3 niveluri b) 2 niveluri c) 4 niveluri 62) Arhitectura unui instrument OLAP include: a) una sau mai multe baze de date b) o componenta OLTP c) metadate pentru optimizare 63) Arhitectura unui instrument OLAP include: a) un manager pentru datele sintetizate b) un motor analitic pe post de server pentru aplicaŃiile desktop c) metadate pentru optimizare 64) Arhitectura unui instrument OLAP include: a) uneltele utilizatorului final pentru operaŃii de raportare etc. b) un motor analitic pe post de server pentru aplicaŃiile desktop c) şi (a) şi (b) 65) Fluxul de intrare a datelor în depozitul de date constă din operaŃii de: a) ştergere b) actualizare în loturi c) suprascriere 66) Procesul de sintetizare, împachetare şi distribuire a datelor intrate într un data warehouse poartă numele de: a) up-flow b) in-flow c) down-flow 67) Procesul de ierarhizare şi relocare a datelor intrate într un data warehouse poartă numele de: a) up-flow b) in-flow c) down-flow 68) Principalele activităŃi care compun aşa-numitul out-flow din depozitele de date

sunt: a) integrarea şi interogarea datelor b) accesarea şi livrarea datelor c) sintetizarea şi abstractizarea datelor 69) Transformările şi circuitul datelor în depozitele de date sunt descrise prin următoarele tipuri de fluxuri:: a) in-flow, up-flow, out-flow, meta-flow, alfa-flow, beta-flow; b) out-flow, up-flow, beta-flow, down-flow, in-flow; c) in-flow, meta-flow, out-flow, down-flow, up-flow 70) Schema clasică a unui depozit de date este: a) de tip reŃea b) de tip stea c) de tip ierarhic

user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
Page 420: SOLUTII - Baze de Date - Adunate

8

71) Cel mai simplu mod de vizualizare a datelor dintr-un depozit de date este reprezentat de:

a) un cub n-dimensional; b) o stea; c) şi (a) şi (b)

72) O bază de date multimedia este o bază de date care inglobează informaŃie de

tip: a) text, sunet, grafic; b) sunet, imagini fixe şi video c) text, grafic, sonor, animat, video; 73) MIDI inseamnă:: a) Microsoft Interchange Digital Interface b) Musical Instrument Digital Interface c) Musical Interface for Digital Interchange 74) RezoluŃia monitorului VGA este de : a) 640x480 pixeli; b) 800×600 pixeli; c) 1024×768 pixeli;

75) CGI înseamnă: a) Common Graphical Interface b) Common Gateway Interface; c) Common Graphical Interchange;

Sanda Monica TǍTǍRÂM [email protected]

user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
user
Rectangle
Page 421: SOLUTII - Baze de Date - Adunate

AlegeŃi răspunsurile corecte pentru fiecare din următoarele întrebări cu răspunsuri multiple. Întrebările pot avea mai multe răspunsuri corecte.

1. SQL este

a. Un limbaj realizat de Dr. E. F. Codd

b. Un limbaj folosit pentru comunicarea cu bazele de date relaŃionale

c. Un limbaj folosit pentru definirea diagramelor ERD

d. Folosit pentru definirea şi modificarea obiectelor unei baze de date

e. Folosit pentru definirea paginilor web

index e. O structură denumită de date, cum ar fi un tabel, o vizualizare sau un

d. Deseori abreviat sub forma DBMS

c. Un produs software furnizat de un producător de baze de date

b. O colecŃie de date interrelaŃionate gestionate ca o singură unitate

a. O structură, cum ar fi un tabel, o vizualizare sau un index

3. Un sistem de gestionare a bazelor de date este

e. Implementată diferit de diferiŃi producători

d. Definită în acelaşi mod de toŃi producătorii de software

c. O colecŃie de date interrelaŃionate gestionate ca o singură unitate

b. Un produs software furnizat de un producător de baze de date

index a. O structură denumită de date, cum ar fi un tabel, o vizualizare sau un

2. O bază de date este

e. Microsoft SQL Server

d. Oracle Database

c. PostgreSQL

b. MySQL

a. EXCEL

4. Exemple de sisteme RDBMS sunt

Intrebări

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 422: SOLUTII - Baze de Date - Adunate

5. Componentele unei baze de date relaŃionale includ

a. RelaŃii

b. Tabele

c. Vizualizări de utilizator

d. Diagrame ERD

e. RestricŃii

d. Este aplicat sistematic fiecărei vizualizări de utilizator

c. A fost dezvoltat de Oracle

b. A fost dezvoltat de Dr. E. F. Codd

utilizator a. Începe de la tabele, pentru a ajuta proiectanŃii să descopere vizualizările de

8. Procesul de normalizare

e. Anomalia de actualizare

d. Anomalia de ştergere

c. Anomalia de creare

b. Performante reduse

a. Anomalia de inserare

7. Scopul normalizării este de a rezolva următoarele probleme

e. Unicitate

d. CHECK

c. Cheie primară

b. RelaŃie

a. NOTNULL

6. Printre tipurile de restricŃii care pot fi folosite în bazele de date se numără

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 423: SOLUTII - Baze de Date - Adunate

9. Un identificator unic(cheie)

a. Trebuie determinat înaitea procesului de normalizare

b. Poate fi compus dintr-un singur atribut

c. Poate fi compus din zero sau mai multe atribute

d. Poate fi compus din mai multe atribute concatenate

10. Prima formă normală rezolvă anomaliile cauzate de

a. DependenŃele parŃiale de cheia primară

e. RelaŃiile de tip unu-la-mai-mulŃi

d. Atributele multivaloare

c. DependenŃele tranzitive

b. Grupurile repetitive

e. RelaŃiile de tip unu-la-mai-mulŃi d. Atributele multivaloare

c. DependenŃele tranzitive

b. Grupurile repetitive

a. DependenŃele parŃiale de cheia primară

12. A treia formă normală rezolvă anomaliile cauzate de

e. RelaŃiile de tip unu-la-mai-mulŃi d. Atributele mulŃi valoare

c. DependenŃele tranzitive

b. Grupurile repetitive

a. DependenŃele parŃiale de cheia primară

11. A doua formă normală rezolvă anomaliile cauzate de

e. Identificatorul unic al relaŃiei originale este copiat în noua relaŃie

d. Grupurile repetitive sunt mutate într-o nouă relaŃie

c. Atributele care sunt dependente tranzitiv sunt eliminate

b. Atributele multivaloare sunt mutate într-o nouă relaŃie

a. Atributele care depind doar de o parte a cheii sunt eliminate

13. Pentru aducerea în prima formă normală a unei relaŃii ne-normalizate

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 424: SOLUTII - Baze de Date - Adunate

14. Problemele de dependenŃă parŃială

a. Sunt rezolvate de FN2

b. Sunt rezolvate de FN3

e. Apar cand un atribut non-cheie depinde de un alt atribut non-cheie

d. Apar cand un atribut non-cheie depinde doar de o parte a cheii primare

c. Pot apărea în relaŃiile cu chei primare concatenate

user
Oval
user
Oval
Page 425: SOLUTII - Baze de Date - Adunate

Partea a_III_a SQL

Întrebări şi Probleme

AlegeŃi răspunsurile corecte pentru fiecare din următoarele întrebări cu răspunsuri

multiple. Întrebările pot avea mai multe răspunsuri corecte.

1. SQL este a. Un limbaj orientat spre obiecte b. Un limbaj procedural c. Un limbaj nonprocedural d. Un limbaj declarativ e. Un limbaj standard

2. Într-un aranjament client/server a. Componentele software DBMS ruleaza pe server b. Componentele software DBMS ruleaza pe client c. Componentele software ale clientului SQL ruleaza pe client d. Componentele software ale clientului SQL ruleaza pe server

3. Un client SQL in linia de comanda a. Necesita un sistem bazat pe ferestre b. Ruleaza pe o mare varietate de platforme client. c. Necesita un browser web pe client. d. Afişează datele şi opŃiunile de comandă folosind caracteristici grafice e. Afişează răspunsurile la comenzi sub formă de mesaje de tip text

e. SQLWorksheet d. SQL*Plus c. iSQL*Plus b. Query Analyzer

a. iSQL 6. ClienŃii SQL oferiŃi de Oracle sunt

e. Afişează răspunsurile la comenzi sub formă de mesaje de tip text d. Afişează datele şi opŃiunile de comandă folosind caracteristici grafice c. Necesita un browser web pe client. b. Ruleaza pe o mare varietate de platforme client. a. Necesita un sistem bazat pe ferestre 5. Un client SQL bazat pe web

e. Afişează răspunsurile la comenzi sub formă de mesaje de tip text d. Afişează datele şi opŃiunile de comandă folosind caracteristici grafice c. Necesita un browser web pe client. b. Ruleaza pe o mare varietate de platforme client. a. Necesita un sistem bazat pe ferestre 4. Un client SQL cu interfata grafica (GUI)

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 426: SOLUTII - Baze de Date - Adunate

7. ClienŃii SQL oferiŃi de Microsoft sunt a. iSQL b. Query Analyzer c. iSQL*Plus d. SQL*Plus e. SQLWorksheet

8. Extensiile SQL create de furnizori a. Cresc portabilitatea codului SQL b. Scad portabilitatea codului SQL c. Contribuie la diferenŃierea produselor oferire de diferiŃi producători d. Au fost bazate pe cererile pieŃei e. Sunt compatibile între implementările diferiŃilor producători

9. InstrucŃiunile SQL a. încep cu un cuvânt cheie reprezentând o comandă b. Se termină cu un cuvânt cheie reprezentând o comandă c. încep cu un delimitator, cum ar fi caracterul punct şi virgulă d. Se termină un delimitator, cum ar fi caracterul punct şi virgulă e. încep cu o paranteză deschisă

10. Elementele limbajului SQL includ a. Cuvinte cheie b. Nume ale obiectelor din baza de date c. Operatori

e. Constante d. RestricŃii

e. Limbajul dc manipulare a datelor (DML - Data Manipulation Language) d. Limbajul pentru controlul datelor (DCL - Data Control Language) c. Limbajul dc replicare a datelor (DRL - Dala Replication Language) b. Limbajul dc selectare a datelor (DSL - Dala Selection Language) a. Limbajul dc definire a datelor (DDI, - Data Definition Language) 13. InstrucŃiunile SQL pot li împărŃite în următoarele categorii

e. Virgule d. Litere c. Numere b. LiniuŃe de subliniere a. Paranteze 12. Numele obiectelor bazei de date pot include

e. LiniuŃe de subliniere d. Linie nouă c. Unul sau mai multe spaŃii b. Exact un spaŃiu a. Virgule 11. Elementele limbajului SQL sunt separate prin

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 427: SOLUTII - Baze de Date - Adunate

14. Limbajul de definire a datelor (DDL - Data Definition Language) include următoarele instrucŃiuni:

a. SELECT b. INSERT c. CREATE d. ALTER e. DELETE 15. Limbajul de interogare a datelor (DQL - Data Query Language) include

următoarele instrucŃiuni: a. SELECT b. INSERT c. CREATE d. ALTER e. DELETE 16. Limbajul de manipulare a datelor (DML - Data Manipulation Language) include

următoarele instrucŃiuni: a. SELECT b. INSERT c. CREATE d. UPDATE e. DELETE

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 428: SOLUTII - Baze de Date - Adunate

Limbajul de definire a datelor - DDL AlegeŃi răspunsurile corecte pentru fiecare din următoarele întrebări cu răspunsuri

multiple. ReŃineŃi că întrebările pot avea mai multe răspunsuri corecte.

1. Tipurile de date oferă următoarele avantaje

a. Respectă standardele publicate b. Oferă un set de comportamente utile pentru utilizatorii bazei c. Asigură independenŃa faŃă de date d. RestricŃionează datele din coloane la caractere care au sens în context e. Ajută sistemul DBMS să stocheze mai eficient datele din coloane

2. Tipurile de date pentru caractere

a. Sunt mai flexibile decât tipurile de date numerice b. Acceptă atât date cu lungime fixă, cât şi date cu lungime variabilă. c. Necesită întotdeauna specificarea preciziei şi a scalei d. Determină completarea coloanelor până la lungimea maximă maximă e. Pot stoca şiruri de caractere în format specific unei limbi naŃionale

3. Tipurile de date numerice

a. Sunt mai flexibile decât tipurile de date pentru caractere b. RestricŃionează valorile din coloane la numere şi simboluri înrudite, cum ar fi

virgulele şi simbolul dolar c. Necesită întotdeauna specificarea preciziei şi a scalei d. Stochează valori exacte sau aproximative e. Sunt potrivite pentru a fi folosite în calcule

4. Tipurile numerice standard includ

a. INTEGER b. NUMBER c. FLOAT d. BOOLEAN e. INTERVAL

5. Tipurile de date temporale standard includ

a. DATETIME b. DATE c. TIMESTAMP d. TIMEZONE e. TIME

6. Valorile NULL

a. Pot fi folosite pentru reprezentarea datelor care lipsesc sau nu sunt cunoscute b. Înseamă acelaşi lucru ca şi spaŃiile libere c. Sunt egale cu alte valori NULL d. Nu sunt egale cu alte valori NULL e. Sunt întotdeauna permise în mod prestabilit

7. InstrucŃiunile DDL includ a. CREATE

e. UPDATE d. INSERT c. DELETE b. ALTER

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 429: SOLUTII - Baze de Date - Adunate

8. InstrucŃiunea CREATE DATABASE a. FuncŃionează exact la fel în toate sistemele DBMS relaŃionale b. Specifieă întotdeauna numele bazei de date c. Specifieă întotdeauna numele proprietarului bazei de date d. Poate include parametri specifici producătorului e. FuncŃionează la fel cu instrucŃiunea CREATE SCHEMA

9. DefiniŃia unei coloane din instrucŃiunea CREATE TABLE poate include a. Numele tabelului b. Numele coloanei c. restricŃie la nivel de tabel d. clauză DEFAULT e. O clauză NULL sau NOT NULL

10. Numele unei coloane dintr-un tabel a. Trebuie să fie specificat în instrucŃiunea CREATE TABLE b. Trebuie să fie unic în cadrul bazei de date c. Trebuie să fie unic în cadrul tabelului d. Poate fi folosit într-un singur index e. Trebuie să fie specificat în instrucŃiunea ALTER TABLE

11. O restricŃie la nivel de coloană a. Poate referi una sau mai multe coloane b. Poate fi inclusă într-o instrucŃiune CREATE TABLE sau ALTER TABLE c. Foloseşte o sintaxă identică sau aproape identică cu cea a unei restricŃii de

acelaşi tip la nivel de tabel d. Poate fi folosită oriunde ar putea fi folosită o restricŃie la nivel de tabel e. Are o sintaxă care diferă de la un tip de restricŃie la altul

12. Sintaxa corectă pentru clauza DEFAULT este a. DEFAULT (precizie, scală) b. DEFAULT [NULL | NOT NULL] c. DEFAULT (expresie) d. DEFAULT (nume–coloană) REFERENCES name–tabel (nume_coloană.) e. DEFAULT [UNIQUE | PRIMARY KEY]

13. Sintaxa corectă pentru o restricŃie NOT NULL este a. nume_coloană tip--de–date IS NOT NULL b. nume_coloană tip–de–date NOT NULL c. DEFAULT [NULL | NOT NULL] d. CREATE NOT NULL INDEX ON nume_coloană e. nume–coloană REFERENCES NOT NULL

14. Sintaxa corectă pentru o restricŃie UNIQUE este a. [CONSTRAINT nume—restricŃie] UNIQUE (nume_coloană) b. [CONSTRAINT nume—restricŃie] UNIQUE (nume_tabel) c. DEFAULT UNIQUE (nume_coloană) d. nume_coloană REFERENCES UNIQUE nume_tabel e. DEFAULT [UNIQUE | PRIMARY KEY]

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 430: SOLUTII - Baze de Date - Adunate

15. Sintaxa corectă pentru o restricŃie referenŃială este a. [CONSTRAINT nume—restricŃie] REFERENCES nume_index b. [CONSTRAINT nume—restricŃie] REFERENCES nume_tabel c. FOREIGN KEY nume_coloană REFERENCES nume_tabel (nume_coloană) d. REFERENCES nume—tabel (nume_coloană) e. nume_coloană REFERENCES UNIQUE nume_tabel

16. InstrucŃiunea CREATE INDEX a. Poate fi folosită pentru crearea restricŃiilor de unicitate şi cheie primară b. Poate include cuvântul cheie UNIQUE c. Trebuie să refere două sau mai multe nume de coloane d. Poate include cuvintele cheie ASC sau DESC pentru orice coloană e. Poate specifica ordinea ascendentă sau descendentă pentru una sau mai multe

coloane

17. Instructiunea CREATE VIEW a. Stochează o interogare în baza de date b. Poate include cuvântul cheie opŃional CASCADE c. Poate include cuvântul cheie opŃional OR REPLACE d. Trebuie să conŃină o comandă DMI, validă e. Trebuie să conŃină o instrucŃiune SELECT validă

18. Utilizările valide ale instrucŃiunii ALTER TABLE includ a. Adăugarea coloanelor b. Modificarea lungimii sau a preciziei coloanelor c. Redenumirea unui tabel d. Eliminarea unei chei primare e. Adăugarea unei chei primare

19. O instrucŃiune ALTER TABLE nu poate fi folosită pentru a. Schimbarea tipului de date al unei coloane la un tip numeric dacă în coloana

respectivă există date de alt tip b. Redenumirea unei coloane c. Schimbarea unei restricŃii din NULL în NOT NULL pentru o coloană care

conŃine valori nule d. Eliminarea unei chei exteme care referă o cheie primară e. Eliminarea unei chei primare dacă există chei exteme care referă cheia

primară

20. InstrucŃiunea DROP poate fi folosită pentru a şterge a. restricŃie referenŃială b. Un index c. Un tabel d. O coloană dintr-un tabel e. O vizualizare

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 431: SOLUTII - Baze de Date - Adunate

Limbajul de interogare a datelor(DQL)

Întrebări şi probleme 1. O instrucŃiune SELECT fără o clauză WHERE a. Selectează toate coloanele din tabel sau vizualizare b. Returnează un mesaj de eroare c. Selectează toate rândurile din tabel sau vizualizare d. Afişează numai definiŃia tabelului sau a vizualizării e. Scrie întotdeauna rezultatele într-un fişier jurnal 2. În SQL, ordinea rândurilor din rezultatele interogării a. Este specificată de clauza SORTED BY b. Poate fi ascendentă sau descendentă pentru orice coloană c. În mod prestabilit este descendentă, dacă nu se specifică o altă ordine d. Este imprevizibilă dacă nu este specificată in interogare e. Poate fi specificată numai pentru coloanele din setul de rezultate al interogării 3. Operatorul BETWEEN a. Specifică un domeniu de valori care include şi capetele b. Poate fi rescris folosind operatorii <= şi NOT <= c. Poate fi rescris folosind operatorii <= şi >= d. Selectează rândurile adăugate în tabel într-un anumit interval de timp e. Nu este inclus în standardul ISO/ANSI 4. Operatorul LIKE standard a. Foloseşte semne de întrebare drept caractere de înlocuire poziŃionale b. Foloseşte liniuŃe de subliniere drept caractere de înlocuire poziŃionale c. Foloseşte liniuŃe de subliniere drept caractere de înlocuire nepoziŃionale d. Foloseşte simboluri procent drept caractere de înlocuire poziŃionale e. Foloseşte simboluri procent drept caractere de înlocuire nepoziŃionale 5. O instrucŃiune SQL care confine o funcŃie de agregare a. Poate conŃine şi coloane calculate b. Poate conŃine şi coloane obisnuite c. Trebuie să includă o clauză ORDER BY d. Trebuie să includă o clauză GROUP BY e. Nu poate include, în acelaşi timp, o clauză GROUP BY şi o clauză

ORDERBY 6. Când operatorii AND şi OR sunt combinaŃi în aceeaşi clauză WHERE

a. Sistemul SGBD returnează un mesaj de eroare b. Operatorul AND are prioritate mai mare decât operatorul OR c. Operatorul AND are prioritate mai mică decât operatorul OR d. Parantezele, sunt obligatorii e. Parantezele sunt opŃionale

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 432: SOLUTII - Baze de Date - Adunate

7. Sintaxa corectă pentru eliminarea valorilor nule din rezultatele interogării este

a. = NULL b. NOT = NULL c. <>NULL d. IS NULL e. IS NOT NULL

8. FuncŃiile SQL standard pentru şiruri de caractere includ

a. UPPER b. MIDDLE c. LOWER d. SUBSTR e. EXISTS

9. FuncŃiile, SQL matematice standard includ

a. LENGTH b. ROUND c. CAST d. MIN e. ABS

10. Operatorul UNION

a. Elimină rândurile duplicate din setul de rezultate b. Include rândurile duplicate în setul de rezultate c. Combină două interogări într-o singură interogare de tip join d. Combină seturile de rezultate a două interogări într-un singur set de

rezultate e. Este numit JOIN în unele implementări SQL

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 433: SOLUTII - Baze de Date - Adunate

Combinarea datelor din mai multe tabele

Întrebări şi probleme

l. O subinterogare a. Poate fi folosită pentru a selecta valorile care vor fi aplicate condiŃiilor din

clauza WHERE b. Poate fi corelată sau necorelată c. Reprezintă o cale puternică de calculare a coloanelor d. Trebuie să nu fie încadrate în paranteze e. Permite selectarea flexibilă a rândurilor

2. O uniune (join) fără o clauză WHERE sau o clauză JOIN a. Are ca rezultat un mesaj de eroare b. Nu returnează nici un rând din setul de rezultate c. Reprezintă o uniune externă (outer join) d. Reprezintă o uniune internă (inner join) e. Are ca rezultat un produs cartezian

3. O uniune externă (outer join) a. Poate fi scrisă în Oracle SQL folosind un simbol (+) în clauza FROM b. Poate fi scrisă în Microsoft SQL Server folosind operatorul = sau =* în clauza

WHERE c. Returnează toate rândurile doar din unul dintre tabele d. Returnează toate rândurile din unul sau din ambele tabele

e. Poate fi catre stânga, către dreapta sau completă

e. Necesită o listă de tabele separate prin virgule în clauza FROM d. Necesită folosirea unei clauze JOIN c. Este realizată ori de câte ori în clauza FROM sunt specificate mai multe tabele b. Combină rânduri din interogari multiple într-un singur set de rezultate

interogări a. Combină coloanele din două sau mai multe tabele în rezultatele unei singure 5. O uniune (Join)

e. Implică două tabele diferite d. Poate folosi o subinterogare pentru a limita şi mai mult rândurile selectate c. Rezolvă relaŃiile recursive b. Poate fi o uniune internă sau o uniune externă a. Nu poate avea niciodată ca rezultat un produs cartezian 4. O auto-uniune (self join)

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 434: SOLUTII - Baze de Date - Adunate

6. O uniune de egalitate (equijoin) a. Este cunoscută şi sub numele de uniune externă (outerjoin) b. Este cunoscută şi sub numele de uniune internă (innerjoiti) c. Este cunoscută şi sub numele de auto-uniune (selfjoin) d. Realizează întotdeauna legarea rândurilor folosind o condiŃie de egalitate (=) e. Realizează întotdeauna legarea rândurilor folosind o condiŃie de inegalitate

(<>)

7. Calificatorii numelor de coloane: a. Pot fi nume de tabele b. Pot fi numere care indică poziŃia relativă a tabelelor dîn lista FORM c. Pot fi pseudonime pentru numele de coloane , definite în clauza FORM d. Pot fi pseudonime pentru numele de tabele, definite în clauza FORM

8, O uniune încruşişată este: a. O uniune Naturală b. N produs cartezian c. O uniune externă d. O uniune Internă

9. O clauză JOIN folosind cuvântul cheie USING a. Nu poate fi folosită atunci când coloanele prin care se face legarea tabelelor

au nume diferite b. Nu poate fi folosită atunci când coloanele prin care se face legarea tabelelor

au aceleaşi nume c. Defineşte o uniune internă d. Defineşte o uniune externă e. Defineşte o auto-uniune

interogarea externă e. Are o interogare internă care nu face nici o referire la coloanele din d. Are o interogare externă care refera coloane din interogarea internă c. Are o interogare internă care refera coloane din interogarea externă b. Rulează mai puin eficient decât o subinterogare necorelată a. Rulează mai eficient decât o subinterogare necorelată 10. O subinterogare corelată

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 435: SOLUTII - Baze de Date - Adunate

interogărilor avansate

Întrebări şi Probleme 1. FuncŃiile SQL

a. Returnează un set de valori b. Returnează o singură valoare c. Pot fi folosite în clauza WHERE a unei instrucŃiuni SQL d. Pot fi folosite ca pseudonime pentru numele tabelelor intr-o instr.

SQL

e. Pot fi folosite în lista de coloane a unei instrucŃiuni SQL

2. FuncŃia REPLACE a. Înlocuieşte un nume de tabel cu un nume de vizualizare b. Înlocuieşte numele unei coloane cu pseudonimul coloanei

un alt tabel e. Înlocuieşte toate rândurile dintr-o vizualizare cu rânduri conŃinând date dintr-d. Înlocuieşte toate valorile dintr-o coloană cu un alt set de valori c. Înlocuieşte un şir de caractere dintr-o coloană cu un alt şir de caractere

e. Este numită CEIL în unele implementări SQL d. Returnează un număr întreg sau o valoare nulă c. Returnează întotdeauna un număr întreg b. Rotunjeşte un număr prin scădere până la primul număr întreg a. Rotunjeşte un număr prin adăugire până la primul număr întreg

6. FuncŃia CEILING

e. Returnează o valoare nulă dacă parametrul furnizat nu este un număr d. Returnează 0 dacă parametrul furnizat are valoarea NULL c. Returnează +1 dacă parametrul furnizat are o valoare pozitivă b. Returnează 0 dacă parametrul furnizat are valoarea zero a. Returnează -l daca parametrul furnizat are valoare negativa

5. FuncŃia SIGN

e. Transformă o valoare numerică într-un şir de caractere d. Returnează caracterul corespunzător unei valori c. Returnează valoarea corespunzătoare unui caracter din setul de caractere ASCII b. Este identică cu funcŃia ASCII în unele implementări SQL a. Este numită CHR în unele implementări SQL

4. FuncŃia CHAR

e. Elimină spaŃiile de la începutul şi de la sfârşitul şirurilor de caractere d. înlocuieşte valorile nule cu alte valori în şirurile de caractere c. Poate fi imbricată cu alte funcŃii b. Elimină spaŃiile de la începutul şirurilor de caractere a. Elimină spaŃiile de la sfârşitul şirurilor de caractere

3. FuncŃia LTRIM

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 436: SOLUTII - Baze de Date - Adunate

3. FuncŃia LTRIM a. Elimină spaŃiile de la sfârşitul şirurilor de caractere b. Elimină spaŃiile de la începutul şirurilor de caractere c. Poate fi imbricată cu alte funcŃii d. înlocuieşte valorile nule cu alte valori în şirurile de caractere e. Elimină spaŃiile de la începutul şi de la sfârşitul şirurilor de caractere

4. FuncŃia CHAR a. Este numită CHR în unele implementări SQL b. Este identică cu funcŃia ASCII în unele implementări SQL c. Returnează valoarea corespunzătoare unui caracter din setul de caractere ASCII d. Returnează caracterul corespunzător unei valori e. Transformă o valoare numerică într-un şir de caractere

5. FuncŃia SIGN a. Returnează -l daca parametrul furnizat are valoare negativa b. Returnează 0 dacă parametrul furnizat are valoarea zero c. Returnează +1 dacă parametrul furnizat are o valoare pozitivă d. Returnează 0 dacă parametrul furnizat are valoarea NULL e. Returnează o valoare nulă dacă parametrul furnizat nu este un număr

6. FuncŃia CEILING a. Rotunjeşte un număr prin adăugire până la primul număr întreg b. Rotunjeşte un număr prin scădere până la primul număr întreg c. Returnează întotdeauna un număr întreg d. Returnează un număr întreg sau o valoare nulă e. Este numită CEIL în unele implementări SQL

7. FuncŃia FLOOR a. Rotunjeşte un număr prin adăugire până la primul număr întreg b. Rotunjeşte un număr prin scădere până la primul număr întreg c. Returnează întotdeauna un număr întreg d. Returnează un număr întreg sau o valoare nulă e. Este numită FLR în unele implementări SQL

8. Expresiile CASE

a. Permit executarea condiŃională a clauzelor dintr-o instrucŃiune SQL b. Există sub două forme, respectiv statice şi dinamice c. Exista sub două forme, respectiv cu căutare şi fara cautare d. Există sub două forme, respectiv simple şi cu cautare e. Există sub două forme, respectiv standard şi cu cautare

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 437: SOLUTII - Baze de Date - Adunate

Limbajul de manipulare a datelor – DML

Întrebări şi probleme 1. Limbajul DML include următoarele comenzi SQL: a. INSERT b. REMOVE c. UPDATE d. SELECT e. DROP

e. Inserarea mai multor rânduri într-un tabel cu o singură instrucŃiune d. Eliminarea rândurilor duplicate dintr-un tabel c. Popularea unui tabel de test cu date dintr-un alt tabel b. Mutarea rândurilor dintr-un tabel în altul a. Găsirea următoarei valori pentru o cheie primară atribuită secvenŃial 5. O instrucŃiune INSERT cu o comandă SELECT imbricată este utilă pentru

e. Poate include o clauză WHERE d. Poate folosi cuvântul cheie NULL pentru a atribui valori nule coloanelor c. Poate insera rânduri multiple la o singură rulare b. Trebuie să aibă o listă de valori a. Trebuie să aibă o listă de coloane 4. O instrucŃiune INSERT cu o clauză VALUES e. RestricŃii cheie primară d. RestricŃii de unicitate c. RestricŃii NOT NULL b. RestricŃii de securitate a. RestricŃii referenŃiale

restricŃii 3. La formarea unei instrucŃiuni DML, trebuie să tineti seama de următoarele

e. Coloane ale unei vizualizări bazate pe mai multe tabele d. Coloane ale unei vizualizări bazate pe un singur tabel c. O vizualizare care conŃine coloane dintr-un singur tabel b. Coloane dintr-un singur tabel a. Coloane din mai multe tabele 2. O instrucŃiune DML poate referi

în care sunt inserate datele corespunde cu lista de coloane din clauza INSERT sau cu coloanele din tabelul

e. Trebuie să aibă în instrucŃiunea SELECT internă o listă de coloane care d. Poate include o clauză WHERE c. Poate folosi cuvântul cheie NULL pentru a atribui valori nule coloanelor

de date b. Trebuie să aibă o instrucŃiune SELECT internă care retumează un singur rând a. Trebuie să aibă două liste de coloane, una în clauza INSERT şi una în 6. O instrucŃiune INSERT cu o comandă SELECT imbricată

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 438: SOLUTII - Baze de Date - Adunate

7. O instrucŃiune UPDATE fără o clauză WHERE a. Actualizează toate rândurile din tabel cu valori nule b. încearcă să actualizeze toate rândurile din tabel c. Eşuează şi returnează o eroare d. Şterge toate rândurile din tabel e. Are ca rezultat un produs cartezian

e. O clauză UNION d. O uniune a mai multor tabele c. Una sau mai multe funcŃii de agregare b. O clauză GROUP BY a. O clauză WHERE 12. InstrucŃiunea SELECT internă a unei instrucŃiuni INSERT poate include

e. Cuvântul cheie NULL d. Orice expresie din care rezultă o singură valoare c. O listă de valori b. Numele unei alte coloane a. O constantă

care este 11. Clauza SET dintr-o instrucŃiune UPDATE poate atribui unei coloane o valoare

e. Poate avea o instrucŃiune SELECT internă, ca parte a clauzei WHERE d. Nu poate încălca restricŃiile referenŃiale ale tabelului c. Poate folosi cuvântul cheie FORCE pentru a forŃa ştergerea rândurilor b. Poate include o clauză WHERE opŃională a. Poate include o listă opŃională de coloane 10. O instrucŃiune DELETE

e. Poate atribui unei coloane o listă de valori derivate dintr-o expresie d. Poate atribui unei coloane valoarea unei alte coloane c. Trebuie să includă o clauză WHERE b. Trebuie să furnizeze o nouă valoare pentru cel puŃin o coloană a. Trebuie să includă o clauză SET 9. O instrucŃiune UPDATE

e. Trebuie să includă o listă de coloane d. Are ca rezultat un produs cartezian c. încearcă să şteargă toate rândurile din tabel b. Eşuează si returnează o eroare a. Actualizează toate rândurile din tabel cu valori nule 8. O instrucŃiune DELETE fără o clauză WHERE

user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
user
Oval
Page 439: SOLUTII - Baze de Date - Adunate

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

cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 440: SOLUTII - Baze de Date - Adunate

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),

cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 441: SOLUTII - Baze de Date - Adunate

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

cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 442: SOLUTII - Baze de Date - Adunate

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)

cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 443: SOLUTII - Baze de Date - Adunate

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

cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 444: SOLUTII - Baze de Date - Adunate

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

cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 445: SOLUTII - Baze de Date - Adunate

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

cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 446: SOLUTII - Baze de Date - Adunate

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

cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 447: SOLUTII - Baze de Date - Adunate

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

cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 448: SOLUTII - Baze de Date - Adunate

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

cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 449: SOLUTII - Baze de Date - Adunate

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;

cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 450: SOLUTII - Baze de Date - Adunate

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;

cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 451: SOLUTII - Baze de Date - Adunate

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

cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 452: SOLUTII - Baze de Date - Adunate

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;

cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 453: SOLUTII - Baze de Date - Adunate

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

cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 454: SOLUTII - Baze de Date - Adunate

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.

cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 455: SOLUTII - Baze de Date - Adunate

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

cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 456: SOLUTII - Baze de Date - Adunate

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

cristian
Highlight
cristian
Highlight
cristian
Highlight
cristian
Highlight
Page 457: SOLUTII - Baze de Date - Adunate

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);

cristian
Highlight
cristian
Highlight
cristian
Highlight