쌓고 쌓다

[Oracle] DECODE, CASE 함수 본문

프로그래밍/SQL

[Oracle] DECODE, CASE 함수

승민아 2022. 10. 8. 22:40

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;
Comments