Base/Database

[Database] DECODE & CASE 함수 사용법 (Oracle SQL)

반응형

 

DECODE

 

SELECT 구문으로 IF-ELSE 논리를 제한적으로 구현한 오라클 DBMS 전용 함수

 

[구문]

DECODE(expr, search1, result1 [,searchN,resultN...][,default]

 

expr - 대상 컬럼 또는 문자(열)

search - expr과 비교하려는 값

result - IF expr = search 인 경우의 반환 값 (expr 에 대한 search 값이 TRUE 일때 )

[] - 반복사용 가능

 

이 쿼리에서 DEOCODE 부분을 해석하면 지금 EMP_NO의 주민번호를 SUBSTR을 통해서 주민번호 뒷자리의

첫번째 자리를 빼낸다. 

 

그 다음 DECODE를 통해서 1이면 남자 2이면 여자라는 쿼리다.

두번째 DECODE는 1이면 남자 3이면 남자 그다음 바로 , 다음 여자라고 썼다. 이경우에는 ELSE 라고 보면 되면 

 

       '1', '남자',  '3', '남자',  '여자'

그래서 IF   /    IF ELSE    / ELSE 라고 보면 된다.

 

 

위와 같은 경우에는 MGR_ID가 NULL 인경우에는 관리자로 아닌 경우 직원으로 만든다.

 

 

 

 

 

직급에 따라 연봉이 인상된다고 했을때 위와 DECODE를 사용해서 나타 낼 수 있다.

 

 

 

 

CASE

 

조건에 따른 결과값을 출력하는 함수

 

DECODE와 유사한 함수로 WHEN에 조건 THEN에 조건에 따른 값을 넣는 함수로서 IF ELSE 같다. 

 

구문

CASE expr WHEN search1 THEN result1 [WHEN..THEN..][ELSE default] END

CASE WHEN condition1 THEN result1 [WHEN..THEN..][ELSE default] END

 

expr - 대상 컬럼 또는 문자열

search - expr과 비교하려는 값

condition - 비교 조건식

result - 비교 조건에 만족했을 때 반환값

default - 조건을 만족하지 않았을 때 기본 반환 값

 

 

이렇게 두가지 케이스에 대한 CASE 문을 작성했다.

 

첫번째는 CASE 구문은 

CASE expr WHEN search1 THEN result1 [WHEN..THEN..][ELSE default] END

 

 

 CASE JOB_ID 
        WHEN 'J7' THEN SALARY*1.2
        WHEN 'J6' THEN SALARY*1.15
        WHEN 'J5' THEN SALARY*1.1
ELSE SALARY

END

 

이 구문은 컬럼명을 CASE 앞에 붙인 후 그다음에 WHEN에 해당 조건에만 적어준다.

 

 

두번째 CASE 구문은

CASE WHEN condition1 THEN result1 [WHEN..THEN..][ELSE default] END 이런 형태다

 

CASE 
            WHEN SALARY < 3000000 THEN '초급개발자'
            WHEN SALARY < 4000000 THEN '중급개발자'
ELSE '고급 개발자'
END AS 급여등급

 

이 구문은 CASE를 쓴 후 WHEN 에 하나하나 컬럼에 대한 컬럼명과 그것에 대한 조건을 넣어준다.

 

 

 

예제 하나더 

 

 

[Database] Oracle SQL DECODE & CASE 함수 사용법

반응형