Vous êtes sur la page 1sur 4

Exercitii recapitulative II – Interogari, functii, operatori, jonctiuni

In aceste exercitii utilizati tabelele My_emp, My_dept si My_jobs create pe baza tabelelor
Employees, Departmens si Jobs din schema (user-ul) HR astfel:

DROP TABLE MY_EMP;


DROP TABLE MY_DEPT;
DROP TABLE MY_JOBS;
CREATE TABLE MY_EMP AS SELECT * FROM HR.EMPLOYEES;
CREATE TABLE MY_DEPT AS SELECT * FROM HR.DEPARTMENTS;
CREATE TABLE MY_JOBS AS SELECT * FROM HR.JOBS;

Strucura acestor tabele este prezentata in tabelele urmatoare:


MY_EMP:
Name Null? Type
EMPLOYEE_ID   NUMBER(6)
FIRST_NAME   VARCHAR2(20)
LAST_NAME NOT NULL VARCHAR2(25)
EMAIL NOT NULL VARCHAR2(25)
PHONE_NUMBER   VARCHAR2(20)
HIRE_DATE NOT NULL DATE
JOB_ID NOT NULL VARCHAR2(10)
SALARY   NUMBER(8,2)
COMMISSION_PCT   NUMBER(2,2)
MANAGER_ID   NUMBER(6)
DEPARTMENT_ID   NUMBER(4)

MY_DEPT:
Name Null? Type
DEPARTMENT_ID   NUMBER(4)
DEPARTMENT_NAME NOT NULL VARCHAR2(30)
MANAGER_ID   NUMBER(6)
LOCATION_ID   NUMBER(4)

MY_JOBS:
Name Null? Type
JOB_ID   VARCHAR2(10)
JOB_TITLE NOT NULL VARCHAR2(35)
MIN_SALARY   NUMBER(6)
MAX_SALARY   NUMBER(6)
Exercitii:
1. Sa se selecteze din tabela my_emp numai angajatii care au salariul cuprins intre 8000
si 10000.
select * from angajati
where salariul between 8000 and 10000;
2. Sa se selecteze din tabela my_emp numai angajatii care au functia (job_id) SA_REP.
select * from angajati
where id_functie='SA_REP';
3. Modificati conditia de sus astfel incat sa fie selectati si cei care au in denumirea
functiei atributul ACCOUNT.
select * from angajati
where id_functie like '%ACCOUNT%';

4. Sa se selecteze toti angajatii pentru care a doua litera din e-mail este A, B sau C
SELECT * FROM angajati
WHERE (upper(email) like '_A%')
OR (upper(email) like '_B%')
OR (upper(email) like '_C%');

5. Sa se selecteze toti angajatii care au numarul de telefon format din al doilea grup de
cifre din 124 (de exemplu: 515.124.4569)
SELECT * FROM angajati
WHERE telefon LIKE '___.124.____';

6. Sa se selecteze toti angajatii angajati inainte de 1ianuarie 2000 (hire_date).


SELECT * FROM angajati
WHERE data_angajare < TO_DATE('01 january,2000', 'dd month,yyyy');

7. Modificati conditia de mai sus astfel incat sa afisati numai angajatii nascuti in ianuarie
2000.
SELECT * FROM angajati
WHERE data_angajare like('___JAN-2000');

8. Sa se selecteze numele, salariul si functia angajatiilor din departamentul IT


(department_name din tabela my_dept).

SELECT a.nume, a.prenume,a.salariul, f.denumire_functie


FROM angajati a, functii f, departamente d
WHERE (f.id_functie=a.id_functie)
AND d.id_departament = a.id_departament
AND (d.denumire_departament='IT');
9. Modificati conditia de mai sus astfel incat sa fie selectati toti angajatii din
departamentele care au in denumire specificatia IT, indifferent daca acestea au sau nu
angajati.(+ pt tabela cu care facem outer)

SELECT a.nume, a.prenume,a.salariul, f.denumire_functie


FROM angajati a, functii f, departamente d
WHERE (f.id_functie=a.id_functie)
AND d.id_departament = a.id_departament(+)
AND (d.denumire_departament='IT');
10. Sa se selecteze numele, salariul si departamentul angajatiilor care au functia de
Programmer (JOB_TITLE din tabela my_jobs).
SELECT a.nume, a.prenume, a.salariul, d.denumire_departament,f.denumire_functie
FROM angajati a, departamente d, functii f
WHERE (d.id_departament = a.id_departament)
AND (f.id_functie=a.id_functie)
AND (f.denumire_functie ='Programmer');

11. Modificati conditia de mai sus astfel incat sa afisati toti angajatii cu functii de
Manager (de exemplu Finance Manager sau Purchasing Manager etc).
SELECT a.nume, a.prenume, a.salariul, d.denumire_departament,f.denumire_functie
FROM angajati a, departamente d, functii f
WHERE (d.id_departament = a.id_departament)
AND (f.id_functie=a.id_functie)
AND (f.denumire_functie LIKE '%Manager%');

12. Sa se selecteze numele si salariul angajatiilor din departamentele cu specific IT (care


contin in denumire IT) si care au functia de Programmer sau Manager.
SELECT a.nume, a.prenume, a.salariul,f.denumire_functie
FROM angajati a, departamente d, functii f
WHERE (d.id_departament = a.id_departament)
AND (f.id_functie=a.id_functie)
AND(d.denumire_departament LIKE '%IT%')
AND ((f.denumire_functie='Programmer')
OR (f.denumire_functie='Manager'));

13. Afisati numele si in ordine crescatoare salariile si in ordine descrescatoare data


angajarii penru salariatii din departamentul Sales.
SELECT a.nume, a.prenume, a.salariul, a.data_angajare
FROM angajati a, departamente d
WHERE (d.denumire_departament='Sales')
ORDER BY salariul ASC, data_angajare DESC;

14. Sa se selecteze numele, functia, comisionul si departamentul angajatilor care nu au


comisionul NULL.
SELECT a.nume,a.prenume, f.denumire_functie, a.comision
FROM angajati a, functii f, departamente d
WHERE (f.id_functie = a.id_functie)
AND (d.id_departament = a.id_departament)
AND (a. comision is not null)
AND (d.denumire_departament='Sales');

15. Afisati numele, comisionul si functia angajatilor din departamentul Sales si calculati
suma primita prin aplicarea comisionului la volumul vanzarilor de 20000 de euro.
SELECT a.nume,a.prenume, f.denumire_functie, a.comision, a.comision*20000 AS
Suma_primita
FROM angajati a, functii f, departamente d
WHERE (f.id_functie = a.id_functie)
AND (d.id_departament = a.id_departament)
AND (a. comision is not null)
AND (d.denumire_departament='Sales');

16. Introduceti o conditie in interogarea de mai sus pentru afisarea angajatilor cu un


valoare a acestei sume mai mare de 3000 euro. Ordonati descrescator aceste valori.

SELECT a.nume,a.prenume, f.denumire_functie, a.comision, a.comision*20000 AS


Suma_primita
from angajati a, functii f, departamente d
WHERE (f.id_functie = a.id_functie)
AND (d.id_departament = a.id_departament)
AND (a. comision is not null)
AND (d.denumire_departament='Sales')
AND (a.comision*20000>3000)
ORDER BY Suma_primita DESC;

Vous aimerez peut-être aussi