DATABASE(oracleDB 11g)/SQL

[SQL]decode와 case함수

SEUNGSAMI 2019. 1. 29. 12:19

decode와 case함수


decode와 case함수는 프로그래밍을 할때 if문과 case문이라고 생각하면 된다.



아래의 예시를 참고하자

decode

1
2
3
4
5
6
7
select last_name, department_id,
decode(
department_id,
90'비서'80'영업'60'관리'
) 부서
from employees
where department_id in (608090);
cs

이경우 90일때 비서, 80일때 영업, 60일때 관리로 표시해서 col을 만들주는 것이다. 또한 col을 표시하기 때문에 부서라는 alias를 사용할 수 있다.


case의 경우 쓰는법이 살짝 다르다.

1
2
3
4
5
6
7
8
9
select last_name, department_id,
case
when department_id = 90 then '비서'
when department_id = 80 then '영업'
when department_id = 60 then '관리'
end as 부서명,
salary
from employees
where department_id in (608090);
cs

위의 decode예시와 나타나는 결과값은 동일하다

case 

when {condition} then {result}

              ...

when {condition} then {result}

else {result} end as {alias}

의 구조를 갖고 있다.



<연습문제>

사번 이름 근속연수 직급 출력하라.

이때 조건으로는근속연수가 15년 이상이면 '부장' 으로

12년 이상이면 '과장', 9년 이상이면 '대리' 나머지는 '사원'으로 나타내어라

1
2
3
4
5
6
7
8
9
10
select employee_id 사번, last_name 이름, trunc((sysdate-hire_date)/365) 근속연수, 
case
when (sysdate-hire_date)/365 >= 15 then '부장'
when (sysdate-hire_date)/365 >= 12 then '과장'
when (sysdate-hire_date)/365 >= 9 then '대리'
else '사원'
end 직급
from employees
order by 근속연수 desc;
 
cs


SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.


'DATABASE(oracleDB 11g) > SQL' 카테고리의 다른 글

[SQL]GROUP BY의 기초  (0) 2019.01.29
[SQL]집합 함수의 기초  (0) 2019.01.29
[SQL]날짜관련함수 연습문제  (0) 2019.01.29
[SQL]width_bucket함수  (0) 2019.01.28
[SQL]일반 함수 기초  (0) 2019.01.25