[ORACLE] CASE WHEN, DECODE

김민성·2023년 4월 7일
0
post-thumbnail

CASE WHEN ~ THEN

SQL을 작성할때 자주 쓰이는 CASE WHEN 구문이다.
SELECT절이나 WHERE절에 사용된다.

  • 문법
CASE WHEN 조건1 THEN 리턴값2 WHEN 조건2 THEN 조건2 .... ELSE 그 외 END AS 별칭

-- ELSE 생략가능

조건에는 비교연산자, NULL연산자를 사용하여 조건을 부여할 수 있고, 논리 연산자를 사용하여 여러개의 조건을 부여할 수 있다.

사용 방법은 IF문 처럼 쓰는 방식과, SWITCH문 처럼 쓰는 방식이 있다.

  • if문 방식
SELECT ename
     , deptno
     , CASE WHEN deptno = '10' THEN 'New York'
            WHEN deptno = '20' THEN 'Dallas'
            ELSE 'Unknown'
       END AS loc_name
  FROM emp
 WHERE job = 'MANAGER'
  • switch문 방식
SELECT ename
     , deptno
     , CASE deptno 
            WHEN 10 THEN 'New York'
            WHEN 20 THEN 'Dallas'
            ELSE 'Unknown'
       END AS loc_name
  FROM scott.emp
 WHERE job = 'MANAGER'

switch문 방식은 조건을 사용할 수는 없지만 값만 체크할 때 사용한다.

  • 조건을 여러개 사용하는 예시
SELECT employee_no
	 , job_id
     , CASE WHEN department_no = 4 AND job_id = 12 THEN 'ADMIN'
       WHEN department_no = 4 AND job_id = 15 THEN 'CUSTOMER'
       END AS position
FROM employees
WHERE department_no IN (1,2,3,4)
     

DECODE

DECODE 함수는 if else와 비슷한 기능을 수행한다.
문법은 아래와 같다

DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3,........)

-- 예시
DECODE(GENDER, 'M', '남자', 'F','여자','기타')
  1. if(GENDER == 'M') return '남자'
  2. else if(GENDER == 'F') return '여자'
  3. else return '기타'
    이렇게 해석하면 된다.
  • 응용
    NVL2 함수처럼 사용할 수도 있다.
SELECT ENAME
			, COMM
			, DECODE(COMM,NULL,'N','Y') COMM_YN
FROM SCOTT.EMP
WHERE EMPNO IN ('7839','7566','7499')

NVL("값","지정값") : 값이 NULL일경우 지정값을 출력하고 아니면 그대로 출력
NVL2("값","지정값1","지정값2") : 값이 NULL이 아닐경우 지정값1을 출력하고 NULL일 경우 지정값2를 출력

profile
정리하는 개발자

0개의 댓글