쌓고 쌓다
[Oracle] DECODE, CASE 함수 본문
DECODE 함수
IF문, CASE문을 하나의 SQL 명령문으로 표현할 수 있는 함수
비교 연산자는 '='만 가능
DECODE(expression|column, SEARCH1, RESULT1
[, SEARCH2, RESULT2, ...,]
[, DEFAULT] )
표현식 또는 칼럼의 값이 SEARCH1과 일치하면 RESULT1을 반환, SEARCH2와 일치하면 RESULT2를 반환
일치하는 값이 하나도 없거나 NULL인 경우에 DEFAULT 값을 반환
DEFAULT 값이 없다면 NULL을 반환
- 교수 테이블에서 교수의 소속 학과 번호를 학과 이름으로 변환 출력하라.
( 101이면 '컴퓨터공학과', 102이면 '멀티미디어학과', 201이면 '전자공학과', 나머지는 '기계공학과' )
SELECT deptno, DECODE(deptno, 101, '컴퓨터공학과', 102, '멀티미디어학과', 201,
'전자공학과', '기계공학과')
FROM professor;
- 102번 학과 학생들에 대해 주민번호의 7번째 문자가 1인 경우에는 '남자', 2인 경우에는 '여자'로 변환하여 출력
SELECT DECODE( SUBSTR(idnum,7,1), 1, '남자', 2, '여자' )
FROM student
WHERE deptno=102;
- 오늘이 생일인 학생에게 '생축' 메시지
SELECT name, TO_CHAR(sysdate, 'yy/mm/dd') "오늘 날짜"
,TO_CHAR(birthdate, 'yy/mm/dd') "생일"
,DECODE( TO_CHAR(sysdate, 'yy/mm/dd'), TO_CHAR(birthdate, 'yy/mm/dd'), '')
FROM student;
CASE 함수
DECODE 함수의 경우 '=' 비교를 통해 일치하는 경우에만 다른 값으로 대체했다.
CASE 함수는 산술, 관계, 논리 연산 등 다양한 비교 연산이 가능하다.
CASE expression WHEN comparion_exp1 THEN return_exp1
[ WHEN comparrion_exp2 THEN return_exp2
WHEN comparion_exp3 THEN return_exp3
ELSE else_expression]
END
- 교수 테이블에서 소속 학과에 따라 보너스를 다르게 계산하여 출력
( 학과 번호가 101이면 보너스는 급여의 10%, 102이면 20%, 201이면 30%, 나머지 학과는 0%이다. )
SELECT deptno, sal,
CASE WHEN deptno=101 THEN sal*0.1
WHEN deptno=102 THEN sal*0.2
WHEN deptno=201 THEN sal*0.3
ELSE 0
END "보너스"
FROM professor;
- 학생 테이블에서 키의 범위에 따라 A, B, C, D 4개의 등급으로 출력
(180~190이면 'A', 170~179이면 'B', 160~169이면 'C', 160 미만이면 'D')
SELECT height,
CASE WHEN height < 160 THEN 'D'
WHEN height BETWEEN 160 AND 169 THEN 'C'
WHEN height BETWEEN 170 AND 179 THEN 'B'
WHEN height BETWEEN 180 AND 190 THEN 'A'
END
FROM student;
또는
SELECT height,
CASE WHEN height < 160 THEN 'D'
WHEN height < 169 THEN 'C'
WHEN height < 179 THEN 'B'
WHEN height < 190 THEN 'A'
END
FROM student;
'프로그래밍 > SQL' 카테고리의 다른 글
[Oracle] ROLLUP, CUBE, GROUPING (0) | 2022.10.31 |
---|---|
[Oracle] GROUP BY(그룹핑), 그룹 함수 (0) | 2022.10.20 |
[Oracle] NVL, NVL2, NULLIF, COALESCE (0) | 2022.10.08 |
[Oracle] 날짜 함수, 타입 변환 (1) | 2022.10.08 |
[Oracle] ROUND, TRUNC, MOD, CEIL, FLOOR 함수 (1) | 2022.10.08 |
Comments