์ƒˆ์†Œ์‹

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

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

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