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 (60, 80, 90); | 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 (60, 80, 90); | 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 |