Sunteți pe pagina 1din 5

LABORATOR 1

Exercitiul 1.
SELECT employee_id, last_name, salary * 12 salariu_anual
FROM employees;

Exercitiul 2. Să se listeze structura tabelelor din schema HR (EMPLOYEES, DEPARTMENTS, JOB_HISTORY,


JOBS, LOCATIONS, COUNTRIES, REGIONS), observând tipurile de date ale coloanelor

DESCRIBE nume_tabel

Exercitiul 3. Să se listeze conţinutul tabelelor din schema considerată, afişând valorile tuturor câmpurilor

SELECT * FROM nume_tabel;

Exercitiul 4. Să se obţină încă o dată rezultatul cererii precedente, fără a rescrie cererea.

DESC employees
RUN

Exercitiul 5. Listaţi structura tabelului EMPLOYEES şi apoi daţi comanda RUN (sau “/”). Ce observaţi?
Comenzile SQL*Plus sunt păstrate în buffer?

SELECT employee_id, last_name, job_id, hire_date


FROM employees;
SAVE e:\p1_14.sql

Exercitiul 6. 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.

START e:\ p1_14.sql

Exercitiul 7. Reexecutaţi cererea folosind fişierul p1_14.sql


EDIT e:\ p1_14.sql

Exercitiul 8. Editaţi fişierul p1_14.sql, adăugând coloanelor câte un alias (cod, nume, cod job, data
angajarii).

SELECT employee_id cod, last_name nume, job_id " cod job ", hire_date " data angajarii "
FROM employees;

Exercitiul 9. 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;
Exercitiul 10. Să se afişeze numele concatenat cu prenumele, separate prin spaţiu. Etichetaţi coloana
“Nume si prenume”.

SELECT last_name|| ' ' || first_name " Nume si prenume "


FROM employees;

Exercitiul 11. Să se listeze numele şi salariul angajaţilor care câştigă mai mult de 10000 $.

SELECT last_name, salary


FROM employees
WHERE salary > 10000;

Exercitiul 12. 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$.

SELECT last_name, salary


FROM employees
WHERE salary BETWEEN 5000 AND 10000;

Exercitiul 13. Să se creeze o cerere pentru a afişa numele angajatului şi numărul departamentului pentru
angajatul 104

SELECT last_name, department_id


FROM employees
WHERE employee_id =104;

Exercitiul 14. Să se afişeze numele şi salariul pentru toţi angajaţii din departamentele 10 sau 30, în ordine
alfabetică a numelor.

SELECT last_name, salary


FROM employees
WHERE department_id IN (10, 30)
ORDER BY last_name;

Exercitiul 15. 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.

SELECT last_name"Angajat" , salary "Salariu lunar"


FROM employees
WHERE department_id IN (10, 30) and salary > 10000

Exercitiul 16. Care este data curentă?

SELECT SYSDATE
FROM dual;

Exercitiul 17. 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

SELECT first_name, last_name, hire_date


FROM employees
WHERE hire_date LIKE ('%87');

v2
SELECT first_name, last_name, hire_date
FROM employees
WHERE TO_CHAR(hire_date, 'YYYY')='1987'
Afiseaza acelasi rezultat

Exercitiul 18. 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;

Exercitiul 19. 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;

Exercitiul 20. numele tuturor angajaţilor care au a treia litera din nume 'a

SELECT DISTINCT last_name


FROM employees
WHERE last_name LIKE '__a%';

Exercitiul 21. 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;

SELECT to_char(SYSDATE, 'D')


FROM DUAL;

Exercitiul 22. Să se listeze numele departamentelor care funcţionează în locaţia având codul 1700 şi al
căror manager este cunoscut.

SELECT department_name, location_id, manager_id


FROM departments
WHERE location_id=1700 AND manager_id IS NOT NULL

Exercitiul 23. Să se afişeze codurile departamentelor în care lucrează salariaţi


SELECT department_id, employee_id
FROM employees
WHERE department_id IS NOT NULL

Exercitiul 24. Să se afişeze numele şi prenumele salariaţilor angajaţi în luna mai 1987.

SELECT first_name, last_name, hire_date


FROM employees
WHERE TO_CHAR(hire_date, 'MON-YY')='MAY-87'

Exercitiul 25. 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.

SELECT *
FROM job_history
ORDER BY job_id

Exercitiul 26. 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

SELECT first_name, hire_date


FROM employees
WHERE TO_CHAR(hire_date, 'MON-YY')='MAY-87' AND departament_id=80;

Exercitiul 27. Să se afişeze numele joburilor care permit un salariu cuprins între 8300$ şi 14000$.

SELECT job_id
FROM employees
WHERE salary BETWEEN 8300 AND 14000;

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

select GRADE_LEVEL
from JOB_GRADES
where lowest_sal =10001;

Exercitiul 29. numele tuturor angajaţilor care au 2 litere 'L' în nume şi lucrează în departamentul 50
sau managerul lor este 123.

SELECT DISTINCT last_name, department_id, manager_id


FROM employees
WHERE manager_id=123 OR (last_name LIKE '%ll%' AND department_id =50);

Exercitiul 30. 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 $.

SELECT DISTINCT last_name, salary, job_id


FROM employees
WHERE ( job_id LIKE '%CLERK%' OR job_id LIKE '%REP%' ) AND salary NOT IN (1000, 2000,3000);

Exercitiul 31. numele, salariul şi comisionul pentru toţi angajaţii al căror salariu este mai mare decât
de 5 ori valoarea comisionului

SELECT last_name, salary, commission


from employees
where
salary*commission_pct*5