์ƒˆ์†Œ์‹

IT & Security/DB

[DB] ์˜ค๋ผํด ์„œ๋ธŒ์ฟผ๋ฆฌ ์˜ˆ์ œ

  • -
๋ฐ˜์‘ํ˜•

์•„๋ž˜ ์˜ˆ์ œ๋Š” ์˜ค๋ผํด์—์„œ ๊ธฐ๋ณธ์ œ๊ณตํ•˜๋Š” hr ์Šคํ‚ค๋งˆ๋ฅผ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

--ex 2-1) ๋ถ€์„œ๋ณ„๋กœ ์‚ฌ์›์˜ ์ˆ˜๊ฐ€ 5๋ช… ์ด์ƒ์ธ ๋ถ€์„œ์˜
-- ๋ถ€์„œ๋ฒˆํ˜ธ์™€ ๋ถ€์„œ๋ช… 
-- , ๋ถ€์„œ์žฅ์‚ฌ๋ฒˆ, first_name์„ ์ธ์›์ˆ˜์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๋ผ.

select d.department_id, d.department_name, d.manager_id, 
        (select first_name from employees
        where d.manager_id = employee_id
        ), count(*)
from departments d join employees e
    on d.department_id = e.department_id
group by d.department_id, d.department_name, d.manager_id
having count(*) >=5
order by 5 desc;

 

 

 

 

 

 

-- ex 2-2) ๋ถ€์„œ๋ณ„๋กœ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๊ธ‰์—ฌ๊ฐ€ ์ง€๊ธ‰๋˜๋Š”์ง€ ์•Œ๊ณ  ์‹ถ๋‹ค.
-- ์ „์ฒด ์ด๊ธ‰์—ฌ์—์„œ ๋ถ€์„œ๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๋น„์œจ์„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑํ•˜๋ผ. 
-- ๋ถ€์„œ๋ฒˆํ˜ธ,๋ถ€์„œ๋ณ„ ๊ธ‰์—ฌํ•ฉ๊ณ„, ๋น„์œจ(%๊ฐ€ ๋งจ๋’ค์— ์˜ค๋„๋ก)์„ ๋น„์œจ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๋ผ.

select department_id, sum(salary), 
lpad(round((sum(salary)/(select sum(salary) from employees))*100) || '%',10)
from employees
group by department_id
order by 3;

 

 

 

 

 

 

-- ex 2-3)์ง์†์ƒ์‚ฌ๊ฐ€ ์—†๋Š” ์‚ฌ์›์„ ํฌํ•จํ•˜์—ฌ 
-- ๋ชจ๋“  ์‚ฌ์›์˜ ์ง์†์ƒ์‚ฌ๊ฐ€ ๋‚˜์˜ค๋„๋ก ํ•˜๊ณ  ์‹ถ๋‹ค. 
--์‚ฌ๋ฒˆ(employee_id), first_name, ์ง์†์ƒ์‚ฌ์‚ฌ๋ฒˆ(manager_id), 
-- ์ง์†์ƒ์‚ฌfirst_name์„ ์‚ฌ๋ฒˆ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๋ผ. (correlated subquery์ด์šฉ)

select employee_id, first_name, manager_id, 
    (select first_name from employees where e.manager_id = employee_id)
from employees e
order by 1;

 

 

...

 

 

 

 

 

-- ex 2-4)๋ชจ๋“  ๊ธ‰์—ฌ์˜ ํ‰๊ท ๊ธ‰์—ฌ๋ณด๋‹ค ์‹œ(city)๋ณ„๋กœ 
-- ์ง€๊ธ‰๋œ ํ‰๊ท ๊ธ‰์—ฌ๊ฐ€ ์ ์€ ์‹œ์— ๋Œ€ํ•˜์—ฌ 
-- ์‹œ(city), ์‹œ๋ณ„ ํ‰๊ท ๊ธ‰์—ฌ๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.


select l.city,
round(avg(e.salary)) 
from locations l 
join departments d on l.location_id=d.location_id
join employees e on d.department_id = e.department_id
group by l.city
having avg(e.salary)<(select avg(salary) from employees);

 

 

 

 

 

 

-- ex 2-5)๋‘ ๋ฒˆ์ด์ƒ์˜ job์ด๋ ฅ์„ ๊ฐ€์ง„ ๋ชจ๋“  ์‚ฌ์›์˜ ์‚ฌ๋ฒˆ, 
-- first_name, ํ˜„์žฌ๋ถ€์„œ๋ฒˆํ˜ธ, ํ˜„์žฌ๋ถ€์„œ๋ช…, job์ด๋ ฅ๋ถ€์„œ๋ฒˆํ˜ธ, 
-- job์ด๋ ฅ๋ถ€์„œ๋ช…์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.


select e.employee_id, e.first_name,
e.department_id, d.department_name,
h.department_id, (select department_name from departments where
        department_id = h.department_id)
from employees e 
join departments d on e.department_id = d.department_id
join job_history h on h.employee_id = e.employee_id
where e.employee_id in 
    (select employee_id from job_history group by employee_id having count(*)>=2);

-- ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

select e.employee_id, e.first_name,
e.department_id, d.department_name,
h.department_id, (select department_name from departments where
        department_id = h.department_id)
from employees e 
join departments d on e.department_id = d.department_id
join job_history h on h.employee_id = e.employee_id
where 2<=(select count(*) from job_history where e.employee_id=employee_id);

 

 

 

 

 

 

-- ex 2-6) job์ด๋ ฅ์ด ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ์›์˜ 
-- ์‚ฌ๋ฒˆ, first_name, ํ˜„์žฌ job๋ฒˆํ˜ธ, ํ˜„์žฌ job๋ช…์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
-- (exists ์ด์šฉ)

select e.employee_id, e.first_name, e.job_id, j.job_title
from employees e join jobs j on e.job_id = j.job_id
where exists (select *
                from job_history where e.employee_id=employee_id);
                

 

 

 

 

 

 

 

            
-- ex 2-7)CTAS๊ธฐ๋ฒ•์œผ๋กœ employees๋ฅผ testemp2 ํ…Œ์ด๋ธ”๋กœ ๋ณต์‚ฌํ•˜๊ณ  
-- testemp2์˜ job_id๊ฐ€ ‘ST_MAN’์ธ ์‚ฌ์›์˜ salary๋ฅผ 
-- ๋ถ€์„œ์žฅ์‚ฌ๋ฒˆ์ด ‘100’์ธ ๋ถ€์„œ์˜ ํ‰๊ท ์›”๊ธ‰์œผ๋กœ updateํ•˜๋ผ.

create table testemp3 as select * from employees;

update testemp3 t
set salary = (select avg(salary) from employees e 
                join departments d on d.department_id = e.department_id
                where d.manager_id='100')
where job_id='ST_MAN';

 

 

 

 

 

 

-- ex 2-8)๋ถ€์„œ๋ช…์ด ‘Marketing’์ธ ์‚ฌ์› ์ค‘์—์„œ 
-- ๊ทธ ๋ถ€์„œ์˜ ํ‰๊ท  ๊ธ‰์—ฌ๋ณด๋‹ค 
-- ๋” ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ์›์˜ first_name๊ณผ ๊ธ‰์—ฌ๋ฅผ ์ถœ๋ ฅํ•˜๋ผ.
select d.department_id,avg(e.salary) from employees e join departments d
            on d.department_id = e.department_id group by d.department_id;

select first_name, salary from employees e
where 
    (select department_name from departments d
        where e.department_id = d.department_id)='Marketing' and
     salary >
     (select avg(salary) from employees e1 join departments d
            on e1.department_id = d.department_id);
        

 

 

 

 

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.