#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 |