Professional Documents
Culture Documents
___________________________________________________________________________
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)
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?
DEPARTMENT_ID
DEPARTMENT_NAME
Type
NUMBER(4)
NOT NULL
VARCHAR2(30)
MANAGER_ID
NUMBER(6)
LOCATION_ID
NUMBER(4)
MY_JOBS:
Name
Null?
Type
JOB_ID
JOB_TITLE
VARCHAR2(10)
NOT NULL
VARCHAR2(35)
MIN_SALARY
NUMBER(6)
MAX_SALARY
Exercitii:
NUMBER(6)
___________________________________________________________________________
1. Sa se selecteze din tabela my_emp numai angajatii care au salariul cuprins intre 8000
si 10000
SELECT *
FROM my_emp
WHERE SALARY BETWEEN 8000 AND 10000.
2. Sa se selecteze din tabela my_emp numai angajatii care au functia (job_id) SA_REP.
SELECT *
FROM my_emp
WHERE job_id = SA_REP
3. Modificati conditia de sus astfel incat sa fie selectati si cei care au in denumirea
functiei atributul ACCOUNT.
SELECT *
FROM my_emp e, my_jobs j
WHERE e.job_id = j.job_id AND job_id = SA_REP
AND j.job_title LIKE %ACCOUNT%
4. Sa se selecteze toti angajatii pentru care a doua litera din e-mail este A, B sau C.
SELECT *
FROM my_emp
WHERE SUBSTR(email, 2, 1) IN (A, B, 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 my_emp
WHERE SUBSTR(phone_number, 5, 3) = 124
6. Sa se selecteze toti angajatii angajati inainte de 1ianuarie 2000 (hire_date).
SELECT *
FROM my_emp
WHERE hire_date < TO_DATE(01.01.2000, DD.MM.YYYY)
___________________________________________________________________________
sau
SELECT *
FROM my_emp
WHERE EXTRACT(YEAR FROM hire_date) < 2000
7. Modificati conditia de mai sus astfel incat sa afisati numai angajatii nascuti
(ANGAJATI) in ianuarie 2000.
SELECT *
FROM my_emp
WHERE EXTRACT(YEAR FROM hire_date) = 2000 AND EXTRACT(MONTH
FROM hire_date) = 1
8. Sa se selecteze numele, salariul si functia angajatiilor din departamentul IT
(department_name din tabela my_dept).
SELECT e.first_name, e.salary, j.job_title
FROM my_emp e, my_dept d, my_jobs j
WHERE e.job_id = j.job_id AND d.department_id = e.department_id
AND department_name = 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.
SELECT e.first_name, e.salary, j.job_title
FROM my_emp e, my_dept d, my_jobs j
WHERE e.job_id = j.job_id AND d.department_id = e.department_id
AND department_name LIKE %IT%
10. Sa se selecteze numele, salariul si departamentul angajatiilor care au functia de
Programmer (JOB_TITLE din tabela my_jobs).
SELECT e.first_name, e.salary, d.department_name
FROM my_emp e, my_dept d, my_jobs j
WHERE e.department_id = d.department_id AND e.job_id = j.job_id
AND j.job_title = 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 e.first_name, e.salary, d.department_name
FROM my_emp e, my_dept d, my_jobs j
WHERE e.department_id = d.department_id AND e.job_id = j.job_id
AND j.job_title 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 first_name, salary
FROM my_emp e, my_dept d, my_jobs j
WHERE e.department_id = d.department_id AND e.job_id = j.job_id
AND job_title LIKE %Programmer% OR job_title LIKE %Manager%
13. Afisati numele si in ordine crescatoare salariile si in ordine descrescatoare data
angajarii penru salariatii din departamentul Sales.
SELECT first_name, salary, hire_date
FROM my_emp e, my_dept d
WHERE e.department_id = d.department_id
AND d.department_name = Sales
SORT BY salary ASC, hire_date DESC
14. Sa se selecteze numele, functia, comisionul si departamentul angajatilor care nu au
comisionul NULL.
SELECT first_name, job_title, comission_pct, department_name
FROM my_emp e, my_dept d, my_jobs j
WHERE e.department_id = d.department_id AND e.job_id = j.job_id
AND comission IS NOT NULL
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 first_name, comission_pct * 20000/100, job_title
___________________________________________________________________________
FROM my_emp e, my_dept d, my_jobs j
WHERE e.department_id = d.department_id AND e.job_id = j.job_id
AND d.department_name = 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 first_name, comission_pct * 20000/100, job_title
FROM my_emp e, my_dept d, my_jobs j
WHERE e.department_id = d.department_id AND e.job_id = j.job_id
AND d.department_name = Sales
AND comission_pct * 20000/100 > 3000
SORT BY comission_pct * 20000/100 DESC