You are on page 1of 8

Subinterogari

--interogai in alte interogari

--1. gasire sal. minim


select min(salary) from employees;

--2. gasire ang. care cistiga acest sal.minim


select * from employees where salary = (select min(salary) from employees) ;

------------
select * from employees where salary in (select salary from employees where
last_name='Cambrault');

------
select * from employees where (salary, department_id) in (
select min(salary), department_id from employees group by department_id
);

select * from employees where salary = (


select min(salary) from employees group by department_id
);

---
select department_id, avg(salary) from employees
group by department_id
having avg(salary) >= (select avg(salary) from employees where
department_id=30);

select * from employees e1


where salary > (select avg(salary) from employees e2 where e1.department_id =
e2.department_id);

select * from employees e where exists (select 1 from employees ang where
ang.manager_id = e.employee_id);

--departm. care nu au angajati


select * from departments d where not exists (Select 1 from employees e where
e.department_id = d.department_id);

select * from employees where salary in (select salary from employees);

---ang.care cistiga cel mai mare sal pentru fievare tip de functie
select * from employees
where salary in (select max(salary) from employees group by job_id);

---cei mai recet angajati din fiecare departament


select * from employees e
where hire_date in (select max(hire_date) from employees e2 where e.department_id
= e2.department_id group by department_id)
order by employee_id;

--ang care cistiga mai mult decit media dep. din care fac parte
select * from employees e where salary > (select avg(salary) from employees e2 where
e.department_id = e2.department_id group by department_id);

--depart cu cel mai mare sal.total anual

select department_id, sum(salary) from employees group by department_id having


sum(salary) = (
select max(sal_total) from (
select sum(salary) sal_total, department_id from employees group by
department_id order by 1 desc
)
);

select department_id, sum(salary) from employees group by department_id having


sum(salary) = (
select max(sum(salary)) from employees group by department_id
);

--dep.al caror salariu maxim este mai mare de 10000


select * from departments where department_id in
(select department_id from employees group by department_id having
max(salary)>10000);

--pers.care nu au mai fost abgajate anterior in organizatie


select * from employees e where employee_id not in (select employee_id from
job_history);

select * from employees e where not exists (select employee_id from job_history jh
where jh.employee_id = e.employee_id);

--job + salariul mediu pt pers. care au mai fost anterior angajate


select job_id, avg(salary) from employees
where employee_id in (select employee_id from job_history)
group by job_id;

--sa afisam detlii despre job-uri pentru pers. care anteriro au fost angajate pe
poztie de IT_PROG
select * from jobs where job_id in (
select job_id from employees where employee_id in (
select employee_id from job_history where job_id='IT_PROG'
)
);

--toate inf.depsre angajatii care cistiga intre cel mai mic salariu din depart.lor
si 3000
select * from employees e where salary > (
select min(salary) from employees e2 where e.department_id = e2.department_id group
by department_id
) and salary < 3000;

--toti ang.din Toronto


select * from employees where department_id in (
select department_id from departments where location_id in (
select location_id from locations where city='Toronto'
));

--pers.al caror salariu este mai mic decit ale oricaror pers.cu job_id=FI_MGR
select * from employees e
where salary < (select salary from employees where job_id='FI_MGR');

--pt fiecare angajar o comparatie cu sal.mediu din depart lui si sal.mediu din org,
inclusiv diferentele si starea (mai mare/mai mic, egal)
select employee_id, salary, salary-sal_med_org, salary-sal_med_depart, sal_med_org,
sal_med_depart
,case when salary > sal_med_org then '+ med.sal.org' else '- med.sal.org' end as
Stare_med_sal_org
,case when salary > sal_med_depart then '+ med.sal.depart' else '- decit
med.sal.depart' end as Stare_med_sal_depart
from (
select employee_id, salary,
(select round(avg(salary)) from employees) sal_med_org,
(select round(avg(salary)) from employees e2 where e2.department_id =
e.department_id) sal_med_depart
from employees e
);

with x as (
select employee_id, salary,
(select round(avg(salary)) from employees) sal_med_org,
(select round(avg(salary)) from employees e2 where e2.department_id =
e.department_id) sal_med_depart
from employees e
)
select employee_id, salary, salary-sal_med_org, salary-sal_med_depart, sal_med_org,
sal_med_depart
,case when salary > sal_med_org then '+ med.sal.org' else '- med.sal.org' end as
Stare_med_sal_org
,case when salary > sal_med_depart then '+ med.sal.depart' else '- decit
med.sal.depart' end as Stare_med_sal_depart
from x;

--pers.care cistiga la fel cu angajatii din departmanetul de MK=arketing


select * from employees where salary in (
select salary from employees where department_id in (select department_id from
departments where department_name='Marketing')
);
Subinterogari
--interogai in alte interogari

--1. gasire sal. minim


select min(salary) from employees;

--2. gasire ang. care cistiga acest sal.minim


select * from employees where salary = (select min(salary) from employees) ;

------------
select * from employees where salary in (select salary from employees where
last_name='Cambrault');

------
select * from employees where (salary, department_id) in (
select min(salary), department_id from employees group by department_id
);

select * from employees where salary = (


select min(salary) from employees group by department_id
);

---
select department_id, avg(salary) from employees
group by department_id
having avg(salary) >= (select avg(salary) from employees where
department_id=30);

select * from employees e1


where salary > (select avg(salary) from employees e2 where e1.department_id =
e2.department_id);

select * from employees e where exists (select 1 from employees ang where
ang.manager_id = e.employee_id);

--departm. care nu au angajati


select * from departments d where not exists (Select 1 from employees e where
e.department_id = d.department_id);

select * from employees where salary in (select salary from employees);

---ang.care cistiga cel mai mare sal pentru fievare tip de functie
select * from employees
where salary in (select max(salary) from employees group by job_id);

---cei mai recet angajati din fiecare departament


select * from employees e
where hire_date in (select max(hire_date) from employees e2 where e.department_id
= e2.department_id group by department_id)
order by employee_id;

--ang care cistiga mai mult decit media dep. din care fac parte
select * from employees e where salary > (select avg(salary) from employees e2 where
e.department_id = e2.department_id group by department_id);

--depart cu cel mai mare sal.total anual

select department_id, sum(salary) from employees group by department_id having


sum(salary) = (
select max(sal_total) from (
select sum(salary) sal_total, department_id from employees group by
department_id order by 1 desc
)
);

select department_id, sum(salary) from employees group by department_id having


sum(salary) = (
select max(sum(salary)) from employees group by department_id
);

--dep.al caror salariu maxim este mai mare de 10000


select * from departments where department_id in
(select department_id from employees group by department_id having
max(salary)>10000);

--pers.care nu au mai fost abgajate anterior in organizatie


select * from employees e where employee_id not in (select employee_id from
job_history);

select * from employees e where not exists (select employee_id from job_history jh
where jh.employee_id = e.employee_id);

--job + salariul mediu pt pers. care au mai fost anterior angajate


select job_id, avg(salary) from employees
where employee_id in (select employee_id from job_history)
group by job_id;

--sa afisam detlii despre job-uri pentru pers. care anteriro au fost angajate pe
poztie de IT_PROG
select * from jobs where job_id in (
select job_id from employees where employee_id in (
select employee_id from job_history where job_id='IT_PROG'
)
);

--toate inf.depsre angajatii care cistiga intre cel mai mic salariu din depart.lor
si 3000
select * from employees e where salary > (
select min(salary) from employees e2 where e.department_id = e2.department_id group
by department_id
) and salary < 3000;

--toti ang.din Toronto


select * from employees where department_id in (
select department_id from departments where location_id in (
select location_id from locations where city='Toronto'
));

--pers.al caror salariu este mai mic decit ale oricaror pers.cu job_id=FI_MGR
select * from employees e
where salary < (select salary from employees where job_id='FI_MGR');

--pt fiecare angajar o comparatie cu sal.mediu din depart lui si sal.mediu din org,
inclusiv diferentele si starea (mai mare/mai mic, egal)
select employee_id, salary, salary-sal_med_org, salary-sal_med_depart, sal_med_org,
sal_med_depart
,case when salary > sal_med_org then '+ med.sal.org' else '- med.sal.org' end as
Stare_med_sal_org
,case when salary > sal_med_depart then '+ med.sal.depart' else '- decit
med.sal.depart' end as Stare_med_sal_depart
from (
select employee_id, salary,
(select round(avg(salary)) from employees) sal_med_org,
(select round(avg(salary)) from employees e2 where e2.department_id =
e.department_id) sal_med_depart
from employees e
);

with x as (
select employee_id, salary,
(select round(avg(salary)) from employees) sal_med_org,
(select round(avg(salary)) from employees e2 where e2.department_id =
e.department_id) sal_med_depart
from employees e
)
select employee_id, salary, salary-sal_med_org, salary-sal_med_depart, sal_med_org,
sal_med_depart
,case when salary > sal_med_org then '+ med.sal.org' else '- med.sal.org' end as
Stare_med_sal_org
,case when salary > sal_med_depart then '+ med.sal.depart' else '- decit
med.sal.depart' end as Stare_med_sal_depart
from x;

--pers.care cistiga la fel cu angajatii din departmanetul de MK=arketing


select * from employees where salary in (
select salary from employees where department_id in (select department_id from
departments where department_name='Marketing')
);
Subinterogari - exercitii
--care sint angajatii cu job-ul "Stock Manager"
Select * from employees where job_id=(SELECT job_id from jobs where job_title='Stock
Manager');

--care sint angajatii cu job-urile "Stock Manager" si "Stock Clerk"


select * from employees where
job_id in (select job_id from jobs where job_title='Stock Manager' or
job_title='Stock Clerk');

--pers. care au fost angajate pe alte pozitii in trecut


select * from employees where employee_id in (select employee_id from job_history);

--angajatii din Roma si Singapore


SELECT * from employees where department_id IN
(SELECT department_id from locations where location_id
IN (select location_id from locations where city='Roma' OR city='Singapore')
);

--departamentele care nu au angajati - cu "exists"


select * from departments d where not exists
(select 1 from employees e where e.department_id = d.department_id);

--numele si data angajarii pentru pers. care au fost angajate dupa persoana cu id-ul
101
select first_name, last_name, hire_date from employees
where hire_date > (select hire_date from employees where employee_id = 101)
order by hire_date;

--depart. pentru care costul total mediu al salariului este mai mare decit costul
mediu pe organizatie
select AVG(salary) as salariu_total_mediu, department_id
from employees
group by department_id
having avg(salary) > ( select AVG(salary) from employees );

--1. afisati job_id, min_salary, and max_salary din tabela jobs


--2. adaugati 2 coloane la 1) care sa contina sal.mediu minim si sal.mediu maxim (cu
subinterogare)
select job_id, min_salary, max_salary
, (select round(avg(min_salary)) from jobs) avg_min_sal
, (select round(avg(max_salary)) from jobs) avg_max_sal
from jobs;

--citi angajati exista in fiecare departament si cit reprezinta totalul salariilor


din departamentul respectiv, afisate procentual la total orgaizatie
select nr_pe_depart.department_id, round(nr_pe_depart.nr_ang / nr_total.totalang *
100, 2), round(nr_pe_depart.sum_sal / nr_total.totalsal * 100, 2) from

(select department_id, count(*) nr_ang, sum(salary) sum_sal


from employees
group by department_id) nr_pe_depart
,
(select count(*) totalAng, sum(salary) totalSal from employees) nr_total;

--cu CTE
with
nr_pe_depart as (
select department_id, count(*) nr_ang, sum(salary) sum_sal
from employees
group by department_id
),
nr_total as (
select count(*) totalAng, sum(salary) totalSal from employees
)
select nr_pe_depart.department_id, round(nr_pe_depart.nr_ang / nr_total.totalang *
100, 2), round(nr_pe_depart.sum_sal / nr_total.totalsal * 100, 2)
from nr_pe_depart, nr_total;

--
select nr_pe_depart.department_id, (select department_name from departments where
nr_pe_depart.department_id=department_id) as nume_departament,
round(nr_pe_depart.nr_ang / nr_total.totalang * 100, 2),
round(nr_pe_depart.sum_sal / nr_total.totalsal * 100, 2)
from
(select department_id, count(*) nr_ang, sum(salary) sum_sal from employees group
by department_id) nr_pe_depart
,
(select count(*) totalAng, sum(salary) totalSal from employees) nr_total;

You might also like