Web/DB
[Oracle] DECODE, CASE WHEN
돈기법
2022. 3. 23. 16:09
- DECODE
사용방법
: DECODE (컬럼, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3 ...)
ex) 1-1
WITH temp AS (
SELECT 'M' gender FROM dual UNION ALL
SELECT 'F' gender FROM dual UNION ALL
SELECT 'X' gender FROM dual
)
SELECT gender
, DECODE(gender, 'M', '남자', 'F', '여자', '기타') gender2
FROM temp
if (gender == "M") {
return "남자";
} else if (gender == "F") {
return "여자";
} else {
return "기타";
}
GENDER | GENDER2 |
M | 남자 |
F | 여자 |
X | 기타 |
ex) 1-2
WITH temp AS (
SELECT 'M' gender FROM dual UNION ALL
SELECT 'F' gender FROM dual UNION ALL
SELECT 'X' gender FROM dual
)
SELECT gender
, DECODE(gender, 'M', '남자', 'F', '여자') gender2
FROM temp
else 부분은 생략이 가능하다. 해당 조건이 없으면 null 반환
GENDER | GENDER2 |
M | 남자 |
F | 여자 |
X | null |
ex) 2
SELECT ENAME
, COMM
, DECODE (COMM, NULL, 'N', 'Y') COMM_YN
FROM SCOTT.EMP
WHERE EMPNO IN ('7839', '7566', '7499');
NVL 함수처럼 null 값을 체크하는 용도로도 쓸 수 있다.
ENAME | COMM | COMM_YN |
ALLEN | 300 | Y |
JONES | - | N |
KING | - | N |
COMM이 null이면 'N', 아니면 'Y'
DECODE 함수는 조건이 복잡해질 경우 가독성이 떨어짐.
CASE 표현식이 가독성이 좋고 더 많은 기능을 제공한다.
- CASE WHEN
사용방법
: CASE WHEN {조건} THEN {리턴 값}
WHEN {조건} THEN {리턴 값}
ELSE {값}
END
ex) 1-1
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'
if (deptno== '10') {
return 'New York';
} else if (deptno == '20') {
return 'Dallas';
} else {
return 'Unknown';
}
ENAME | DEPTNO | LOC_NAME |
BLAKE | 30 | Unknown |
CLARK | 10 | New York |
JONES | 20 | Dallas |
else 부분은 생략이 가능하다. 해당 조건이 없으면 null 반환
ex) 1-2
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문 방식으로도 사용 가능하다.
ex) 2
SELECT ename
, sal
, CASE WHEN sal >= 2900 THEN '1등급'
WHEN sal >= 2700 THEN '2등급'
WHEN sal >= 2000 THEN '3등급'
END AS sal_grade
FROM emp a
WHERE job = 'MANAGER'
AND (CASE WHEN sal >= 2900 THEN 1
WHEN sal >= 2700 THEN 2
WHEN sal >= 2000 THEN 3
END) = 1
비교 연산자, 범위 연산자 사용이 가능하며, where절에서도 사용 가능하다.
그 외에도 오라클 내장 함수, 사용자 정의 함수도 조건으로 사용 가능하다.