DECODE 사용시 주의사항

 

*ELSE 없는 IF를 사용하라.

     select sum(decode(col1, 1, qty, 0)),...

  →select sum(decode(col1, 1, qty)),...

 

*가능한 그룹함수내에서 nvl을 사용하지 마라

     select sum(decode(col1, 1, nvl(qty,0))),...

  →select nvl(sum(decode(col1, 1, qty)),0),...

 

*가능한 반복해서 DECODE를 사용하지 마라

 

。컬럼결합법

     select sum(decode(market, 'D',

                              decode(type, '1',

                                       decode(unit, 'A',0.2 * col,

                                                          'B',0.5 * col,...

   →select sum(decode(market || type || unit, 'D1A', 0.2,

                                                                  'D1B' 0.5,...)) * col

 

case문으로 대체 1

 

일반 함수 CASE 함수 예

 

*사용 예

-교수 테이블에서 소속 학과에 따라 보너스를 다르게 계산하여 출력하여라. 학과 번호별로 보너스는 다음과 같이 계산한다. 학과 번호가 101이면 보너스는 급여의 10%, 102이면 20%, 201이면 30%, 나머지 학과는 0%이다.

 

 

일반 함수 CASE 함수

 

*CASE 함수

-CASE 함수는 DECODE 함수의 기능을 확장한 함수

-DECODE 함수는 표현식 또는 칼럼 값이 '=' 비교를 통해 조건과 일치하는 경우에만 다른 값으로 대치할 수 있지만, CASE 함수에서는 산술 연산, 관계 연산, 논리 연산과 같은 다양한 비교가 가능

-또한 WHEN절에서 표현식을 다양하게 정의

-8.1.7에서부터 지원되었으며, 9i에서 SQL, PL/SQL에서 완벽히 지원

-DECODE함수에 비해 직관적인 문법체계와 다양한 비교 표현식 사용

 

*사용법

 CASE expression WHEN comparison exp1 THEN return exp1

                   [WHEN comparison exp2 THEN return exp2

                    WHEN comparison exp3 THEN return exp3

                    ELSE else expression]

END

 

 

 

 

일반 함수 DECODE 함수 예

 

*사용 예

-교수 테이블에서 교수의 소속 학과 번호를 학과 이름으로 변환하여 출력하여라. 학과 번호가 101이면 '컴퓨터공학과', 102이면 '멀티미디어학과', 201이면 '전자공학과', 나머지 학과 번호는 '기계공학과(default)로 변환한다.

 

 

일반 함수 DECODE 함수

 

*DECODE 함수의 개념을 도식적으로 표현한 것이다.

 

 

일반 함수 DECODE 함수

 

*DECODE 함수

-DECODE 함수는 기존 프로그래밍 언어에서 IF문이나 CASE 문으로 표현되는 복잡한 알고리즘을 하나의 SQL 명령문으로 간단하게 표현할 수 있는 유용한 기능

-DECODE 함수에서 비교 연산자는 '='만 가능

 

*사용법

 DECODE(expression | column, SEARCH1, RESULT1

                         [, SEARCH2, RESULT2, ..., ]

                         [, DEFAULT])

 

-표현식 또는 칼럼의 값이 SEARCH1 값과 일치하면 RESULT1 값을 반환, SEARCH2 값과 일치하면 RESULT2 값 반환

-일치하는 값이 없거나 NULL인 경우에는 기본값 반환

-기본값이 없는 경우에는 NULL 반환

 

 

일반 함수 NVL 확장 함수 : COALESCE 함수 예

 

*사용 예

-교수 테이블에서 보직수당이 NULL이 아니면 보직수당을 출력하고, 보직수당이 NULL이고 급여가 NULL이 아니면 급여를 출력, 보직수당과 급여가 NULL이면 0을 출력하여라.

 

 

일반 함수 NVL 확장 함수 : COALESCE 함수

 

*COALESCE 함수

-COALESCE 함수는 인수중에서 NULL이 아닌 첫 번째 인수를 반환하는 함수

 

*사용법

 COALESCE(expression-1, expression-2, ...., expression-n)

 

-expression-1 : expression-1이 NULL이 아니면 expression-1을 반환

-expression-2 : expression-1이 NULL이고 expression-2가 NULL이 아니면 expression-2를 반환

-expression-n : expression-1부터 expression-n-1까지의 값이 NULL이고 expression-1이 NULL이 아니면 expression-n을 반환

 

NVL(표현식1, NVL(표현식2, ... NVL(표현식n-1, 표현식n)...))와 유사

예)SELECT COALESCE(NULL, NULL, 10, 100, NULL) FROM DUAL;     ⇒결과 : 10

    SELECT NVL(표현식1, NVL(표현식2, NVL(표현식3, ...NVL(표현식n-1, 표현식n)...)))

 

 

 

+ Recent posts