단일행함수 : 조건부 표현식

조건부 표현식

  • SQL 문에서 IF-THEN-ELSE 논리 사용 가능
  • 방법 2가지 :
    • CASE 식
    • 검색된 CASE 표현식
    • DECODE 함수




CASE식

  • CASE로 시작해서 END로 끝난다
  • = 사용
  • 예시 : EMPLOYEES테이블에서 JOB_ID가 IT인 사람은 연봉에서 10%인상, ST인 사람은 30%연봉인상 그 외는 급여인상이 없다는 테이블을 만들어보자.
    • “수정된_연봉” : 엘리야스이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//기본형
CASE 표현1 WHEN 비교표현1 THEN 리턴표현1
WHEN 비교표현2 THEN 리턴표현2
...
ELSE 엘스표현
END

//예시
select job_id, salary,
case job_id when 'IT' then 1.1*salary
when 'ST' THEN 1.3*salary
ELSE salary
END "수정된_연봉"
FROM EMPLOYEES;




검색된 CASE 표현식

  • CASE로 시작해서 END로 끝난다
  • = 이외 연산자 사용.
  • 예시 : EMPLOYEES테이블에서 고과점수가 500점 미만인 사람은 low, 1000점미만인 사람은 Medium, 2000점미만인 사람은 Good, 그외는 great이라는 테이블을 만들어보자.
    • label : 엘리야스이다.
1
2
3
4
5
6
7
8
//예시 
select last_name, score,
case when score<500 then 'Low'
when score<1000 then 'Medium'
when score<2000 then 'Good'
else 'Great'
end label
from employees;




DECODE 함수

  • = 사용
  • 예시 : EMPLOYEES테이블에서 JOB_ID가 IT인 사람은 연봉에서 10%인상, ST인 사람은 30%연봉인상 그 외는 급여인상이 없다는 테이블을 만들어보자.
    • “수정된_연봉” : 엘리야스이다.
1
2
3
4
5
6
7
8
9
//기본형
DECODE(컬럼명, 비교표현1, 리턴표현1, 비교표현2, 리턴표현1, ..., default) "엘리야스"

//예시
select job_id, salary,
decode job_id, 'IT', 1.1*salary
'ST', 1.3*salary
salary) "수정된_연봉"
FROM EMPLOYEES;