#1. 데이터는 선생님께 받은 임시데이터를 사용하였다.

#2. 기본적인 쿼리문 위주이며, group by 부터 join의 활용까지의 내용이다.


-- 문제 : 각 부서별 평균 급여를 계산


-- 단계 1 : 부서별로 출력

select * from s_emp;

select 

    dept_id 

 from s_emp 

group by dept_id 

order by dept_id;


-- 단계 2: 평균급여를 계산

select 

     dept_id

    ,round(avg(salary)) as 평균급여 

 from s_emp 

group by dept_id 

order by dept_id;

-----------------------------------------------------------------------------------------


-- 문제 : 각 부서별로 직책이 사원인 직원들의 평균급여를 계산

-- 단계 : 위의 내용에서 직책을 사원으로 제한

select 

     dept_id

    ,round(avg(salary)) as 평균급여 

 from s_emp 

where title = '사원' 

group by dept_id 

order by dept_id;


-----------------------------------------------------------------------------------------


-- 문제 : 각 지역별로 몇 개의 부서가 있는지를 나타내기

-- 단계 1 : 지역별로 출력

select * from S_DEPT;

select 

    region_id 

 from s_dept 

group by region_id 

order by region_id;


-- 단계 2 : 각 그룹별로 몇개씩있는지 카운트

select 

     region_id 

    ,count(*) as 부서수 

 from s_dept 

group by region_id 

order by region_id;

-----------------------------------------------------------------------------------------


-- 문제 : 각 부서별로 평균 급여를 구하되 평균 급여가 2000이상인 부서만 출력

-- 단계 1 : 각 부서별로 평균 급여를 출력 위의 문제를 참고

select 

     dept_id

    ,round(avg(salary)) as 평균급여 

 from s_emp 

group by dept_id 

order by dept_id;


-- 단계 2 : 평균급여가 2000이상인 부서를 출력

select 

     dept_id 

    ,round(avg(salary)) as 평균급여 

 from s_emp 

group by dept_id

having round(avg(salary)) > 2000

order by dept_id;


---------------------------------------------------------------

-- 문제 : 각 직책별로 급여의 총합을 구하되 직책이 부장인 사람은 제외하시오

--      단, 급여총합이 8000이상인 직책만 나타내며, 급여 총합에 대한 오름차순으로 정렬하시오

-- 단계 1 : 직책별로 급여의 총합을 구하기

select * from s_emp;

select 

     title 

    ,sum(salary) as 총합급여

 from s_emp 

group by title

order by title;


-- 단계 2 : 직책이 부장인 사람을 제외

select 

     title 

    ,sum(salary) as 총합급여

 from s_emp 

where 

    title not like '%부장'

group by title

order by title;


-- 단계 3 : 급여총합이 8000이상인 직책만 나타내며, 급여 총합에 대한 오름차순으로 정렬하시오

select 

     title 

    ,sum(salary) as 총합급여

 from s_emp 

where title not like '%부장'

group by title

having sum(salary) >= 8000

order by sum(salary);

----------------------------------------------------------------

-- 5.6 그룹을 서브그룹으로 세분화하기

-- 문제 : 각 부서내에서 각 직책별로 몇명의 인원이 있는지를 나타내시오

-- 단계 1 : 각 부서별로 인원을 출력 / 위의 내용을 참고

select 

     dept_id

    ,count(*) as 인원수

 from s_emp 

group by dept_id

order by dept_id;

-- 문제 : 직책별 조건을 추가    

select 

     dept_id

    ,title

    ,count(*) as 인원수

 from s_emp 

group by 

     dept_id

    ,title

order by dept_id

;


----------------------------------------------------------------


-- 6.4 : JOIN

-- 문제 : 직원테이블과 부서테이블을 조인하여 사원의 이름과 부서, 부서명을 나타내시오

-- 단계 1 : 직원테이블과 부서테이블을 조인

select 

    * 

 from 

     s_emp

    ,s_dept

where s_emp.dept_id = s_dept.id

;


-- 단계 2 : 사원의 이름과 부서, 부서명을 출력


select 

    s_emp.name

    ,s_emp.dept_id

    ,s_dept.name as 부서명

 from 

     s_emp

    ,s_dept

where s_emp.dept_id = s_dept.id

;

    

-- 6.5 : 칼럼과 테이블의 alias 사용

-- 문제 : 서울 지역에 근무하는 사원에 대해 각 사원의 이름과 근무하는 부서명을 나타내시오

-- 단계 1 : 지역테이블, 사원테이블, 부서테이블을 조인

select

    *

 from 

    S_DEPT d

    ,S_EMP e

    ,S_REGION r

where 

    d.REGION_ID = r.ID

    and e.DEPT_ID = d.ID

;


-- 단계 2 : 서울 지역에 근무하는 사원 출력

select

    *

 from 

    S_DEPT d

    ,S_EMP e

    ,S_REGION r

where 

    d.REGION_ID = r.ID

    and e.DEPT_ID = d.ID

    and r.NAME = '서울특별시'

;

    

-- 단계 3 : 사원의 이름과 근무하는 부서명

select

    e.NAME as 사원명

    ,d.NAME as 부서

 from 

    S_DEPT d

    ,S_EMP e

    ,S_REGION r

where 

    d.REGION_ID = r.ID

    and e.DEPT_ID = d.ID

    and r.NAME = '서울특별시'

;


'Database' 카테고리의 다른 글

[오라클] 기본개념과 SQL과 관련된 정의  (0) 2018.02.09
[오라클] 설치하기  (0) 2018.02.06
블로그 이미지

UKkim

,