You are on page 1of 5

BAZE DE DATE SEMINAR 7

___________________________________________________________________________
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?

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)

BAZE DE DATE SEMINAR 7

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

BAZE DE DATE SEMINAR 7

___________________________________________________________________________
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

BAZE DE DATE SEMINAR 7

___________________________________________________________________________

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

BAZE DE DATE SEMINAR 7

___________________________________________________________________________
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

You might also like