SQL을 작성할때 자주 쓰이는 CASE WHEN 구문이다.
SELECT절이나 WHERE절에 사용된다.
CASE WHEN 조건1 THEN 리턴값2 WHEN 조건2 THEN 조건2 .... ELSE 그 외 END AS 별칭
-- ELSE 생략가능
조건에는 비교연산자, NULL연산자를 사용하여 조건을 부여할 수 있고, 논리 연산자를 사용하여 여러개의 조건을 부여할 수 있다.
사용 방법은 IF문 처럼 쓰는 방식과, SWITCH문 처럼 쓰는 방식이 있다.
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'
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 함수는 if else와 비슷한 기능을 수행한다.
문법은 아래와 같다
DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3,........)
-- 예시
DECODE(GENDER, 'M', '남자', 'F','여자','기타')
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를 출력