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 함수 사용법
'Base > Database' 카테고리의 다른 글
[Database] INNER JOIN / OUTER JOIN 함수 사용법 및 차이(ORACLE & ANSI표준) (0) | 2020.07.16 |
---|---|
[Database] ORDER BY 절,GROUP BY 절 함수 사용법 (Oracle SQL) (0) | 2020.07.16 |
[Database] NVL,NVL2 함수 사용방법 (Oracle SQL) (0) | 2020.07.15 |
[Database] 데이터 타입 변환 TO_DATE,TO_NUMBER,TO_CHAR 사용법 (0) | 2020.07.15 |
[Database] 날짜함수 SYSDATE,ADD_MONTHS,MONTHS_BETWEEN 함수 사용법 (0) | 2020.07.14 |