sgdb - sisteme de gestiune a bazelor de date

Upload: deepspace77

Post on 30-May-2018

257 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    1/57

    Arhitectura ANSI-SPARC pe 3 nivele pentru bazele de const din: nivelul extern, nivelulconceptual si nivelul intern

    Arhitectura unui instrument OLAP este o arhitectura pe: 3 niveluriArhitectura unui instrument OLAP include: un motor analitic pe post de server pentruaplicatiile desktopArhitectura unui instrument OLAP include: una sau mai multe baze de dateArhitectura unui instrument OLAP include:uneltele utilizatorului final pentru operatii de raportare

    etc. si un motor analitic pe post de server pentru aplicatiile desktopAutorul conceptului de "data warehouse" (depozit de date) este: William InmonCardinalul relatiei rezultate din produsul cartezian de relatii este: mai mare dect cardinalulrelatiei rezultate

    Cel mai simplu mod de vizualizare a datelor dintr-un depozit de date este reprezentat de: un cubn-dimensionalCGI nseamn:Common Gateway InterfaceCunostintele sunt:informatii contextualizateDatele dintr-un sistem OLTP: ) sunt date dinamice, detaliate, incosistente, fragmentate, redundante

    constituie o surs de date pentru depozitele de dateDatele 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 dedezvoltare si de viat si difer fat de sistemele OLTP din punctul de vedere al frecventei si tipului detranzactii permise

    Fluxul de intrare a datelor n depozitul de date const din operatii de: actualizare n loturiForma normal Boyce-Codd este o variant mai tare a:FN3n algebra relational exist:operatii unare si binareIndependenta fat de strategiile de acces la datele dintr-o baz de date este:NecesarInformatiile sunt: date validate, organizate si relationateIntegritatea referential a bazei de date se refer la:relatiile din baza de dateInterogrile de actiune sunt interogri de:actualizare, adugare, stergere si creare de tableIntr-o baz de date este necesar :si independenta fizic si independentalogic a datelorIntr-un depozit de date este necesar s existe:un sistem coerent de codificare si reprezentare a

    informatiilor un sistem consistent de unitti de msur un sistem stabil de reprezentare fizic a datelorMecanismulcharge-back pentru utilizarea resurselor este o caracteristic a: ) depozitelor dedateMetadatele care intr n componenta unui depozit de date pot fi:metadate administrativeMetadatele care intr n componenta unui depozit de date pot fi:metadate pentru optimizareMIDI inseamn::Musical Instrument Digital InterfaceModelul relational se bazeaz pe: ) noiunea matematic de submultimeNivelul conceptual;descrie datele si relatiile dintre ele, fr detalii de implementareNivelul extern: reprezint modurile diferite n care diferiti utilizatori ai bazei de date percepdatele stocate n aceastaO baz de date este:c)un model al microuniversului la care se referO 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

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    2/57

    O cheie de acces: pentru depozitele de date cuprinde si o variabil temporalO relatie este n FN2 dac este n FN1 si dac : ) oricare dintre atributele sale care nu fac partedin cheia primar este complet dependent functional de cheia primarO relatie este n FN3 daceste n FN2 nici unul dintre atributele sale care nu fac parte din cheiaprimar nu este, prin tranzitivitate, dependent funcional de cheia primarOLTP nseamn:on line transactional processingOperatiile de actualizare a depozitelor de date sunt: de tip adugarePentru optimizarea interogrilor pe baze de date relatioanle se recomand:toate cele de mai susPrincipalele activitti care compun asa-numitul out-flow din depozitele de date sunt: accesareasi livrarea datelorPrintre componentele unui depozit de date se numr: componenta back-endPrintre componentele unui depozit de date se numr:componenta front-end si manageruldepozitului de date

    Printre componentele unui depozit de date se numr:componenta front-end si componenta back-end

    Printre componentele unui depozit de date se numr:datele detaliate si metadatelePrintre componentele unui depozit de date se numr:datele operationale si metadatele;

    Printre componentele unui depozit de date se numr:datele sintetizate si metadatelePrintre componentele unui depozit de date se numr:managerul depozitului de datePrintre componentele unui depozit de date se numr:metadatelePrintre componentele unui depozit de date se numr: unelte de dezvoltare a aplicatiilorPrintre componentele unui depozit de date se numr:unelte pentru sisteme de informatiiexecutivePrintre componentele unui depozit de date se numr: uneltele de data mining si OLAP si uneltelede raportare si interogare

    Printre regulile cu care W. Inmon a definit depozitele de date se numr:depozitul de date simediul operational trebuie s fie separate,depozitul de date conine date istorice referitoare la o lungperioad de timpPrintre regulile cu care W. Inmon a definit depozitele de date se numr:datele din depozitul de

    date trebuie s fie integratePrintre regulile cu care W. Inmon a definit depozitele de date se numr:datele din depozitul dedate sunt orientate spre obiectProcesul de ierarhizare si relocare a datelor intrate ntr un data warehouse down-flowProcesulde sintetizare, mpachetare si distribuire a datelor intrate ntr un data warehousepoart numele de up-flowProiectarea bazei de date la nivel logic const din realizarea:schemei externe si a schemeiconceptuale a bazei de date

    Redundanta datelor: este creat n mod intentionat n depozitele de dateReprezentarea fizic a datelor din baza de date este descris la nivelul:internRezolutia monitorului VGA este de 640x480 pixeliSchema clasic a unui depozit de date este:de tip steaSistemele de gestiune a bazelor de date prerelationale sunt: sistemele ierahice si sistemele de tipreteaSistemele de gestiune a bazelor de date relationale comerciale sunt sistemele de gestiune carerespect:b) cele 12 reguli ale lui E.F. CoddSistemele de gestiune post-relationale ale bazelor de date sunt ) sistemele orientate obiect sisistemele hibride;Transformrile si circuitul datelor n depozitele de date sunt descrise prin urmtoarele tipuri defluxuri:: in-flow, meta-flow, out-flow, down-flow, up-flowUn depozit de date este:o colectie tematic si integrat de date si o colectie de date nevolatil dardinamic n timpUn index se poate sterge cu clauza: DROP INDEXUn 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 dateUn sistem de gestiune a bazei de date este o component:software

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    3/57

    Un sistem de gestiune a bazei de date este: si (a) si (b)

    Valorificarea informatiei de date se din depozitele poate face prin analiza multidimensionalValorificarea informatiei din depozitele de date se poate face prin: mecanismul OLAPValorificarea informatiei din depozitele de date se poate face prin: mecanismul OLAP si analizamultidimensional

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    4/57

    Cap. 8 - Aplicarea controalelor de securitate folosind DCL

    1. Legislatia referitoare la securitateA. Impune utilizarea rolurilor in administrarea securitatii bazei de dateB. Restrictioneaza utilizarea datelor personaleC. Impune administratorilor de baze de date sa protejeze reteaua de calculatoareD. Impune plasarea identitatilor furate in internetE. Impune avertizarea fiecarei personae individuale care ar putea avea date compromise.

    Raspuns B, E

    2. Securitatea este necesara pentru ca:

    A. Persoanele oneste fac greseliB. Controalele de securitae ale aplicatiilor nu sunt adecvateC. 80% dintre fraude sunt comise de hackeri din exteriorD. Bazele de date conectate la internet sunt vulnerabileE. Controalele de securitate mentin onestitatea persoanelor

    Raspuns A, B, D, E

    3. Intre intrusii care incearca sa penetreze sistemele conectate la internet se numaraA. Auditori bancariB. Spioni ai concurenteiC. Autori de jurnale webD. HackeriE. Angajati nemultumiti

    Raspuns B, D, E

    4. Componentele care trebuie protejate sunt:

    A. Statiile de lucru clientB. ServereleC. Bazele de dateD. Sistemele de operareE. 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 dateB. Primeste automat privilegii de acces la baza de dateC. Poate folosi autentificarea WindowsD. Poate fi autentificat de Microsoft SQL ServerE. Detine o schema a bazei de date

    Raspuns A, C, D

    6. In SQL Server , o baza de dateA. Este detinuta de un cont de accesB.

    Poate avea alocati unu sau mai multi utilizatoriC. Poate obtine date de system (de exemplu, master) si date de utilizator (aplicatie).

    D. Poate avea attribute privilegiiE. Exista o colectie logica de obiecte de baze de date

    Raspuns B, C, E

    7. In Oracle, un cont de utilizatorA. Se poate conecta la oricate baze de dateB. Primeste automat privilegii la baze de dateC. Poate folosi autentificarea sistemului de operareD. Poate fi autentificat de sistemul DBSM OracleE. Detine o schema a bazei de date

    Raspuns B, C, D, E

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    5/57

    8. In Oracle, o baza de dateA. Este detinuta de un utilizatorB. Poate avea definite unul sau mai multe conturi de utilizatorC. Poate contine date system (de exemplu, schema sistemului) si date de utilizator (aplicatie)D. Este acelasi lucru cu o schemaE. 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 ServerB. Sunt specifice unui obiect al bazei de dateC. Permit beneficiarului sa efectueze o serie de functii administrative pe server, cum ar fi

    oprirea serveruluiD. Sunt anulate cu ajutorul instructiunii SQL REMOVEE. 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 ServerB. Sunt specifice unui obiect al bazei de dateC. Permit beneficiarului sa efectueze o serie de functii administrative pe server, cum ar fi oprirea

    serveruluiD. Sunt anulate cu ajutorul instructiunii SQL REMOVEE. 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 utilizatoriB. Acorda privilegiile DBA ale beneficiarului intregii baze de dateC. Poate conduce la probleme de securitateD. Va fi revocata in cascada daca privilegiul este ulterior revocatE. Este o procedura recomandata pe scara larga pentru ca este comoda in utilizare

    Raspuns A, C, D

    12. RolurileA. Pot fi atribuite unui singur utilizatorB. Pot fi partajate de mai multi utilizatoriC. Pot exista inainte de existenta utilizatorilorD. Pot contine oricate privilegii de obiecteE. Pot contine un singur privilegiu de obiecte

    Raspuns B, C, D

    13. Posibilele dezavantaje ale utilizarii rolurilor pentru securitate suntA. Sunt mai dificil de administrat decat privilegiile individualeB.

    Sunt eliminate atunci cand este sters utilizatorulC. Sunt eliminate atunci cand sunt sterse privilegiile

    D. Pot fi atribuite fara a lua in considerare toate privilegiile continuteE. Este necesara o perioada suplimentara de instruire pentru administratorii care trebuie sa l

    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 utilizatorB. Restrictionarea bazelor de date la care are acces un utilizatorC. Restrictionarea randurilor dintr-un table la care acces un utilizatorD. Stocarea rezultatelor auditarii bazei de dateE. Monitorizarea intrusilor la baza de date

    Raspuns A, C

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    6/57

    15. Rolurile sunt create in Microsoft SQL Server si Sybase Adaptive Server utilizandA. Procedura memorata sp_create_roleB. Procedura memorata sp_add_roleC. Procedura memorata sp_addroleD. Instructiunea CREATE TABLEE. Instructiunea GRANT

    Raspuns C

    16. Rolurile sunt create in Oracle folosindA. Procedura memorata sp_create_roleB. Procedura memorata sp_add_roleC. Procedura memorata sp_addroleD. Instructiunea CREATE ROLEE. Instructiunea GRANT

    Raspuns D

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

    Adaptive Server folosindA. Procedura memorata sp_create_role_memberB. Procedura memorata sp_add_role_memberC. Procedura memorata sp_addrolememberD. Instructiunea CREATE ROLE MEMBERE. Instructiunea GRANT

    Raspuns C

    18. Privilegiile de roluri sunt atribuite utilizatorilor de baze de date in Oracle folosindA. Procedura memorata sp_create_role_memberB. Procedura memorataq sp_add-role_memberC. Procedura memorata sp_addrolememberD. Instructiunea CREATE ROLE MEMBERE. 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_210000;21. S se afiseze numele, codul functiei, salariul si o coloana care s arate salariul dup mrire. Se stie cpentru IT_PROG are loc o mrire de 10%,pentru ST_CLERK 15%, iar pentru SA_REP o mrire de20%. Pentru ceilalti angajati nu se acord mrire. S se denumeasc coloana "Salariu revizuit".

    IT_PROG >> 44ST_CLERK >> 55SA_REP >> 99SELECT last_name, job_id, salary,DECODE(job_id, IT_PROG, salary*1.1, ST_CLERK, salary*1.15, SA_REP, salary*1.2, salary ) salariurevizuitFROM 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 revizuitFROM 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 revizuitFROM employees;22. S se afiseze numele salariatului si codul departamentului n care acesta lucreaz. Dac exist salariaticare nu au un cod de departament asociat, atunci pe coloana id_depratment s se afiseze: textul faradepartament; 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. 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 sapar textul nu are sef.SELECT last_name,CASE WHEN manager_id IS NULL THEN 'Nu are sef'ELSE TO_CHAR(manager_id)

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    43/57

    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.FunctieNVL2 (expr1, expr2, expr3)ExplicatieDac expr1 este nenul atunci returneazexpr2, altfel Returneaz expr3ExempluNVL2 (1, 2, 3) = 2NVL2 (NULL, 2, 3) = 324. 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 mrit cu 20%;- dac lucreaz de mai mult de 150 de luni, dar mai putin de 200 de luni, atunci salariul va fi mrit cu 15%;- dac lucreaz de mai mult de 100 de luni, dar mai puin de 150 de luni, atunci salariul va fi mrit cu10%;- altfel, salariul va fi mrit 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 WHENROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) > 100 THEN salary*1.1ELSE salary*1.05END "SALARIU REVIZUIT"FROM employees;

    CERERI MULTITABEL, SUBCERERI

    Tipuri dejoin:- equijoin (se mai numeste inner join sau simple join) - compunerea a dou tabele diferite dup o conditie cecontine 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.

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    44/57

    20

    - 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 completnd una dintre relatii cu valori NULL acolo undenu exist n aceasta nici un tuplu ce ndeplineste conditia de corelare. Relatia completat cu valori NULL este cean dreptul creia apare (+). Operatorul (+) poate fi plasat n orice parte a conditiei de join, dar nu n ambeleprti. 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 cstig comision.

    SELECT last_name, department_nameFROM employees e, departments dWHERE e.department_id = d.department_idAND 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 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_idAND d.location_id = s.location_idAND city = Seattle;

    Sau

    SELECT last_name, e.job_id, department_nameFROM employees e, departments d

    WHERE e.department_id = d.department_idAND location_id = (SELECT location_id FROM locations WHERE city = 'Seattle');5. S se afiseze numele, salariul, data angajrii si numele departamentului pentru toti programatorii carelucreaz n America.region_name = Americasjob_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

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    45/57

    21

    AND s.country_id = c.country_idAND c.region_id = r.region_idAND e.job_id = j.job_idAND region_name = AmericasAND job_title = Programmer;

    6. S se afiseze numele salariatilor si numele departamentelor n care lucreaz. Se vor afisa si salariatiicare 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.

    SELECT last_name, job_id, salary, department_name, grade_levelFROM employees e, departments d, job_gradesWHERE 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 su direct. Se voreticheta 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_nameManagerFROM 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 m

    WHERE e.manager_id = m.employee_id(+);11. S se afiseze numele salariatului si data angajrii mpreun cu numele si data angajrii sefului directpentru 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 (SELECT hire_dateFROM employeesWHERE last_name = Fay);

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    46/57

    22

    Sau

    SELECT 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. Seva exclude Fay.

    SELECT last_name, salaryFROM employees

    WHERE last_name FayAND department_id = (SELECT department_idFROM employeesWHERE last_name = Fay);

    Sau

    SELECT last_name, salaryFROM employeesWHERE department_id = (SELECT department_idFROM 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 crui 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 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_idFROM employeesWHERE department_id = (SELECT department_idFROM departmentsWHERE department_name ='Sales');18. S se afiseze numele angajatilor, numrul departamentului si job-ul tuturor salariatilor al crordepartament este localizat n Seattle.SELECT last_name, job_id, department_idFROM employees

    WHERE department_id IN (SELECT department_idFROM departmentsWHERE location_id = (SELECT location_idFROM locationsWHERE city = Seattle));Rezolvati aceast problem utilizndjoin-uri.19. S se afle dac exist angajati care nu lucreaz n departamentul Sales si al cror salariu si comisioncoincid cu salariul si comisionul unui angajat din departamentul Sales.SELECT last_name, salary, commission_pct, department_idFROM employees

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    47/57

    23

    WHERE (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 cstigcomision, dar al cror manager coincide cu managerul unui angajat care cstig 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 employeesWHERE commission_pct IS NOT NULL)AND commission_pct IS NULL;

    21. Scrieti o cerere pentru a afisa angajatii care cstig mai mult dect oricare functionar. Sortatrezultatele dup salariu, n ordine descresctoare.

    SELECT last_name, salary, job_idFROM employees

    WHERE 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 cstig mai mult dect salariul mediu.

    SELECT employee_id, last_name, salaryFROM employeesWHERE salary > (SELECT AVG(salary)FROM employees);23. S se afiseze pentru fiecare salariat angajat n lunamartie numele su, data angajrii 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 crui cstig total lunar estemai mare dect 12000, numele su,cstigul 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 su si numele joburilor sale anterioare, precum si intervalulde 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 66101 AC_ACCOUNT 21-09-1989 27-10-1993 49101 AC_MGR 28-10-1993 15-03-1997 41201 MK_REP 17-02-1996 19-12-1999 46114 ST_CLERK 24-03-1998 31-12-1999 21122 ST_CLERK 01-01-1999 31-12-1999 12

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    48/57

    24

    176 SA_REP 24-03-1998 31-12-1998 9176 SA_MAN 01-01-1999 31-12-1999 12200 AC_ACCOUNT 01-07-1994 31-12-1998 54200 AD_ASST 17-09-1987 17-06-1993 69

    26. S se modifice cererea de la punctul 25 astfel nct s se afiseze si numele angajatului, respectiv coduljobului su 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 nct s se afiseze si numele jobului su 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 avnd 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.

    Functiimultiple-row (grup). Gruparea datelor.

    Aceste tipuri de functii pot fi utilizate pentru a returna informatia corespunztoare fiecruia dintregrupurile obtinute n urma divizrii liniilor tabelului cu ajutorul clauzei GROUP BY.

    Pot aprea n clauzele SELECT,ORDER BY si HAVING.Server-ul Oracle aplic aceste functii fiecrui 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 numrul de linii pentru care expresia dat nu are valoarea null. Funcia COUNT returneaz unnumr mai mare sau egal cu zero si nu ntoarce niciodat valoarea null.

    Cnd este utilizat clauza GROUP BY, server-ul sorteaz implicit multimea rezultat nordinea cresctoare a valorilor coloanelor dup care se realizeaz gruparea.

    Absenta clauzei GROUP BY conduce la aplicarea funciei grup pe mulimea tuturor liniilortabelului.

    n clauza GROUP BY se trec obligatoriu toate coloanele prezente n clauza SELECT, care nu suntargument 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. Utiliznd functia grup COUNT s se determine:a. numrul total de angajati;SELECT COUNT(*) "Total - angajati" FROM employees;b. numrul de angajati care au manager;SELECT COUNT(*) "angajari cu manager" FROM employees WHERE manager_id IS NOT NULL;c. numrul 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;

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    49/57

    25

    4. S se listeze numrul de angajati din departamentul avnd codul 50.SELECT COUNT(*) "ANGAJATI - DEP_50" FROM employees WHERE department_id = 50;5. Cati angajati din departamentul 80 cstig comision?SELECT COUNT(*) "ANGAJATI CU COMISION" FROM employees WHERE commission_pct ISNOTNULL;6. S se selecteze valoarea medie si suma salariilor pentru toti angajatii care sunt reprezentanti de vnzri(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 angajrii primei persoane care a fost angajat de companie.SELECT MIN(hire_date) FROM employees;8. S se afiseze numrul de angajati pentru fiecare job.SELECT job_id, COUNT(employee_id) nr_angajatiFROM employeesGROUP 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 depseste 5000$.SELECT department_id, MIN(salary)FROM employeesGROUP BY department_idHAVING MIN(salary)>5000;11.b. S se modifice cererea anterioar astfel nct s se afiseze si orasul n care functioneaz acestedepartamente.SELECT department_id, MIN(salary), cityFROM employees, locationsGROUP BY department_id, cityHAVING MIN(salary) > 5000;12. S se obtin codul departamentelor si numrul de angajati al acestora pentru departamentele care aucel 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 ordinedescresctoare dup sum. Se consider angajatii care au comision si departamentele care au mai mult de5 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

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    50/57

    26

    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) suma

    FROM employeesGROUP BY department_id) aWHERE d.department_id =a.department_id;b. Dati o altmetod 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, numrul de angajati si salariul mediu pentruangajatii 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 mediuFROM 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 numrul total de angajati si, din acest total, numrul celorcare au fost angajati n 1997, 1998, 1999 si 2000. Datele vor fi afisate n forma urmtoare: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

    OperatoriiROLLUP si CUBEClauza GROUP BYpermite gruparea liniilor selectate dup valorile expresiilor precizate n aceasta.

    Pentru fiecare grup, va fi returnat o singur linie de informatie. Clauza GROUP BYpoate produce gruprisuperagregat utiliznd extensiile CUBEsauROLLUP.

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    51/57

    27

    ROLLUP- grupeaz liniile selectate pe baza valorilor primelorn, n - 1, , 0 expresii din specificatia

    GROUP BYsi returneaz o singur linie pentru fiecare grup.- creeaz grupriprin deplasarea ntr-o singurdirecie, de la dreapta la stnga, de-a

    lungul listei de coloanespecificate n clauza GROUP BYApoi, se aplic functia agregat acestor grupri. Dac sunt specificate n expresii n operatorul ROLLUP,

    numrul de grupri generate va fi n + 1. Liniile care se bazeaz pe valoarea primelor n expresii se numesc liniiobisnuite, iar celelalte se numesc linii superagregat.

    GROUP BY ROLLUP (expr_1, expr_2, , expr_n) genereaz n+1 tipuri de linii, corespunztoareurmtoarelor grupri: 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 () corespunztor absentei clauzei GROUP BY si deci, calculului funciilorgrup din cerere pentru ntreg tabelul.

    CUBE grupeaz liniile selectate pe baza valorilor tuturor combinatiilor posibile ale expresiilor specificate sireturneaz cte o linie totalizatoare pentru fiecare grup. Acest operator este folosit pentru a produce multimi derezultate care sunt utilizate n rapoarte. n vreme ceROLLUP produce subtotalurile doar pentru o parte dintrecombinatiile posibile, operatorul CUBEproduce subtotaluri pentru toate combinatiile posibile de gruprispecificate n clauza GROUP BY, precum si un total general.

    Dac exist n coloane sau expresii n clauza GROUP BY, vor exista 2n combinatii posibile superagregat19. S se afiseze codurile departamentelor n care lucreaz cel putin un angajat, iar pentru fiecare dintreacestea si pentru fiecare manager care lucreaz n departamentul respectiv s se afiseze numrul desalariati. De asemenea, s se afiseze numrul de salariati pentru fiecare departament indiferent demanager si numrul 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 dintreacestea si pentru fiecare manager care lucreaz n departamentul respectiv s se afiseze numrul desalariati. De asemenea, s se afiseze numrul de salariati pentru fiecare departament indiferent demanager, numrul de angajati subordonati unui manager indiferent de departament si numrul total deangajati din companie.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 angajrii s se afiseze numrul de salariati. Deasemenea se va afisa numrul de angajati:- pentru fiecare departament si job, indiferent de anul angajrii;- pentru fiecare departament, indiferent de job si de anul angajrii;- la nivel de companie.Exemplu:S se afisezevaloarea total a operelor de art ale unui autor, expuse n cadrul fiecrei galerii avnd codul maimic dect 50. De asemenea, s se afiseze valoarea total a operelor din fiecare galerie avnd codul mai mic dect50, valoarea total a operelor fiecrui autor indiferent de galerie si valoarea total a operelor din galeriile avndcodul mai mic dect 50.SELECT cod_galerie, cod_artist, SUM(valoare)FROM operaWHERE cod_galerie < 50GROUP BY CUBE(cod_galerie, cod_artist);

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    52/57

    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 nivelde departament, valoarea total necesar pentru plata salariilor la nivel de job, indiferent de departamentsi 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 su pentru fiecare job;- fiecare departament (indiferent de job);- ntreg tabelul.De asemenea, s se afiseze si o coloan care indic intervenia coloanelordepartment_name sijob_titlenobtinerea rezultatului.SET LINESIZE 100COLUMN job FORMAT 99COLUMN dept FORMAT 99SELECT department_name, job_title, AVG(salary) medie,GROUPING(department_name) dept, GROUPING(job_title) jobFROM employees e, departments d, jobs jWHERE e.department_id = d.department_idAND e.job_id = j.job_idGROUP BY ROLLUP(department_name, job_title);25. Modificati cererea anterioar astfel nct s se afiseze numele departamentelor, titlurile job-urilor sivaloarea medie a salariilor, pentru:- fiecare departament si, n cadrul su 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 nagregare 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_idAND 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 nct s se identifice dac o valoarenulldin rezultat este stocat peuna dintre coloanelemanager_idsaudepartment_idsau 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 nregistrri selectate.*/

    /* se afiseaza departamentele care nu au angajati si angajatii care nu fac parte din nici un departament

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    53/57

    29

    27. Clauza GROUPING SETS. Permite obtinerea numai a anumitor grupri superagregat. Acestea pot fiprecizate 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 sisuma salariilor pentru:- fiecare departament si, n cadrul su, fiecare job;- fiecare job si, n cadrul su, 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) SumaFROM employees e, departments d, jobs jWHERE e.department_id = d.department_idAND 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 COMMITpermanentizeaz modificrile care au fost realizate de tranzactia curent (o tranzactie esteun set de comenzi LMD); comanda suprim toate punctele intermediare definite n tranzactie si elibereazblocrile 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 esteposibilmprtirea tranzactiei n subtranzactii.Comanda SAVEPOINTare sintaxa:SAVEPOINT nume_pct_intermediar; Comanda ROLLBACK permite renuntarea la modificrile efectuate; aceasta determin ncheierea tranzactiei,anularea modificrilor asupra datelor si restaurarea strii lor precedente.Comanda ROLLBACK are sintaxa:ROLLBACK [TO SAVEPOINT nume_punct_salvare];Observatii:- sistemul realizeaz ROLLBACK implicitdac se nchide anormal (defectiune hardware sau software,pan decurent etc.);- nici o comanda LDD (CREATE, ALTER; DROP) nu poate fi anulat.1. Ce efect are urmtoarea 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);

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    54/57

    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 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_*** sidept_***, avnd aceeasi structur si date ca si tabelele employees,respectivdepartments.CREATE TABLE emp AS SELECT * FROM employees;CREATE TABLE dept AS SELECT * FROM departments;2. S se selecteze toate nregistrrile din cele dou tabele create anterior.SELECT * FROM emp;SELECT * from dept;3.Stergeti toate nregistrrile din cele 2 tabele create anterior. Salvati modificrile.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 comenziiINSERT- 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 cteva dintre erorile care pot s apar la inserare si s se observe mesajul returnat desistem.- lipsa de valori pentru coloane NOT NULL (coloanadepartment_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);*/EROARE la linia 2: ORA-00947: valori prea putine*/

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    55/57

    31

    - nepotrivirea tipului de dateINSERT INTO dept (department_id, location_id)VALUES (D23, 2000);*/EROARE la linia 2: ORA-01722: numr eronat*/

    - valoare prea mare pentru coloanINSERT INTO dept_*** (department_id, location_id)VALUES (15000, 2000);7. Inserati n tabelul emp_*** salariatii (din tabelul employees) al cror comision depseste 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, utiliznd o singur comand INSERT, informatii din tabelul employees:- n tabelul emp1_*** salariatii care au salariul mai mic dect 6000;- n tabelul emp2_*** salariatii care au salariul cuprins ntre 6000 si 10000;- n tabelul emp3_*** salariatii care au salariul mai mare dect 10000.Verificati rezultatele, apoi stergeti toate nregistrrile din aceste tabele.Obs. Clauza ALL a comenzii INSERT determin evaluarea tuturor conditiilor din clauzele WHEN. Pentrucele a cror valoare este TRUE, se insereaz nregistrarea specificat n optiunea INTO corespunztoare.CREATE TABLE emp1_1AS SELECT * FROM employees WHERE 1=0;CREATE TABLE emp2_1AS SELECT * FROM employees WHERE 1=0;CREATE TABLE emp3_1AS SELECT * FROM employees WHERE 1=0;INSERT ALLWHEN salary < =6000 THENINTO emp1_1WHEN salary > = 6000 AND salary

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    56/57

    32

    INTO emp1_1WHEN salary > = 6000 AND salary

  • 8/14/2019 SGDB - Sisteme de gestiune a bazelor de date

    57/57

    UPDATE empSET job_id = 99WHERE department_id=80 AND commission IS NOT NULL;ROLLBACK;18. S se modifice jobul si departamentul angajatului avnd codul 114, astfel nct s fie la fel cu cele aleangajatului avnd codul 205.UPDATE empSET (job_id, department_id) = (SELECT job_id, department_idFROM emp

    WHERE employee_id = 205)WHERE employee_id = 114;ROLLBACK;19. Schimbati salariul si comisionul celui mai prost pltit salariat din firm, astfel nct s fie egale cusalariul 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 mreasc salariul celor care au fost angajai primii astfel nct sdevin media salariilor din companie.UPDATE emp eSET salary = (SELECT AVG(salary)FROM emp)WHERE hire_date = (SELECT MIN(hire_date)FROM empWHERE department_id=e.department_id);ROLLBACK;21. S se modifice valoarea emailului pentru angajatii care cstig cel mai mult n departamentul n carelucreaz astfel nct acesta s devin initiala numelui concatenat cu prenumele. Dac nu are prenumeatunci n loc de acesta apare caracterul .. Anulati modificrile.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;