기타 함수

DB 2009. 6. 2. 13:50

기타 함수 Oracle

2008/12/31 18:13

복사 http://blog.naver.com/kyungmer/130039963000

1. NVL 함수

   Null 값을 어떤 특정한 값(실제 값)으로 변환하는데 사용한다.

   사용법> NVL(expr1, expr2)

   예> NVL(comm, 0)


2. NVL2 함수

   값이 Null인 경우와 Null이 아닌 경우의 리턴값이 다르다.

   사용법> NVL2(col | expr, expr1, expr2)

   예> NVL2(comm, 'SAL+COMM', 'SAL')

      값이 Null이 아니면 'SAL+COMM'을, 값이 Null이면 'SAL'을 리턴한다.

   문제> EMP 테이블에서 모든 사원들의 이름, 급여, 보너스와 보너스가 있으면 SAL+COMM을,

            보너스가 없으면 SAL이라는 문자열을 출력하라.

      SELECT ename, sal, comm, NVL2(comm, 'SAL+COMM', 'SAL') income
      FROM emp;

  

      ENAME                       SAL       COMM INCOME
      -------------------- ---------- ---------- ---------------
      SMITH                       800            SAL
      ALLEN                      1600        300 SAL+COMM
      WARD                       1250        500 SAL+COMM
      JONES                      2975            SAL
      MARTIN                     1250       1400 SAL+COMM
      BLAKE                      2850            SAL
      CLARK                      2450            SAL
      SCOTT                      3000            SAL
      KING                       5000            SAL
      TURNER                     1500          0 SAL+COMM
      ADAMS                      1100            SAL

      ENAME                       SAL       COMM INCOME
      -------------------- ---------- ---------- ---------------
      JAMES                       950            SAL
      FORD                       3000            SAL
      MILLER                     1300            SAL


3. NULLIF 함수

   두 개의 값을 비교하여 같으면 Null 값을 리턴하고 서로 다른 값을 가지면 첫번째 expr을 리턴한다.

   사용법> NULLIF(expr1, expr2)

   예> NULLIF(comm, 0)


4. COALESCE 함수

   나열된 값을 순차적으로 체크하여 NULL이 아닌 값을 리턴해주는 함수.

   사용법> COALESCE(expr1, expr2....exprn)

   예> COALESCE(comm, sal, 10)

   문제> EMP 테이블에서 사원의 이름, 보너스 및 급여를 출력하는데 급여가 널이면 보너스를,

            보너스가 널이면 급여를 출력하시오.

      SELECT ename, sal, comm, COALESCE(sal, comm)
      FROM emp;


      ENAME                       SAL       COMM COALESCE(SAL,COMM)
      -------------------- ---------- ---------- ------------------
      SMITH                       800                           800
      ALLEN                      1600        300               1600
      WARD                       1250        500               1250
      JONES                      2975                          2975
      MARTIN                     1250       1400               1250
      BLAKE                      2850                          2850
      CLARK                      2450                          2450
      SCOTT                      3000                          3000
      KING                       5000                          5000
      TURNER                     1500          0               1500
      ADAMS                      1100                          1100

      ENAME                       SAL       COMM COALESCE(SAL,COMM)
      -------------------- ---------- ---------- ------------------
      JAMES                       950                           950
      FORD                       3000                          3000
      MILLER                     1300                          1300


5. DECODE 함수

   CASE나 IF-ELSE 문의 역할을 한다.

   사용법> DECODE(col | expr, search1, result1[,search2, result2, ...][,default])

   예> DECODE(deptno, 10, sal*1.1, 20, sal*1.5, sal*1.2, sal)

   문제> EMP 테이블에서 JOB이 ANALYST이면 급여 증가는 10%이고 JOB이 CLERK이면

            급여 증가는 15%이고 JOB이 MANAGER이면 급여 증가는 20%이다.

            다른 업무에 대해서는 급여 증가가 없다.

            사원번호, 이름, 업무, 급여, 증가된 급여를 출력하여라.

     

      SELECT empno, ename, job, sal,
      DECODE(job, 'ANALYST', sal*1.1, 'CLERK', sal*1.15, 'MANAGER', sal+sal*0.2, sal) d_sal
      FROM emp
      ORDER BY sal DESC;


      EMPNO ENAME                JOB                       SAL      D_SAL
      ----- -------------------- ------------------ ---------- ----------
       7839 KING                 PRESIDENT                5000       5000
       7902 FORD                 ANALYST                  3000       3300
       7788 SCOTT                ANALYST                  3000       3300
       7566 JONES                MANAGER                  2975       3570
       7698 BLAKE                MANAGER                  2850       3420
       7782 CLARK                MANAGER                  2450       2940
       7499 ALLEN                SALESMAN                 1600       1600
       7844 TURNER               SALESMAN                 1500       1500
       7934 MILLER               CLERK                    1300       1495
       7521 WARD                 SALESMAN                 1250       1250
       7654 MARTIN               SALESMAN                 1250       1250

       EMPNO ENAME                JOB                       SAL      D_SAL
       ----- -------------------- ------------------ ---------- ----------
        7876 ADAMS                CLERK                    1100       1265
        7900 JAMES                CLERK                     950     1092.5
        7369 SMITH                CLERK                     800        920


6. CASE 함수

   DECODE 함수와 동일하나 지원하지 않는 범위 비교가 가능하다.

   사용법> CASE col | expr WHEN condition1 THEN result1

                                      [WHEN condition2 THEN result2

                                                  ..........

                                       WHEN conditionN THEN resultN

                                       ELSE result]

               END

   예> CASE job WHEN 'ANALYST' THEN sal *1.1

                       WHEN 'CLERK' THEN sal*1.15

                       WHEN 'MANAGER' THEN sal*1.2

                       ELSE sal

         END

   위에 5.DECODE함수에서 나왔던 문제를 CASE함수로 풀면 아래와 같다.

   SELECT empno, ename, job, sal,
      CASE job WHEN 'ANALYST' THEN sal*1.1
               WHEN 'CLERK' THEN sal*1.15
               WHEN 'MANAGER' THEN sal*1.2
               ELSE sal
      END d_sal
   FROM emp
   ORDER BY sal DESC;

[출처] 기타 함수|작성자 이경모

'DB' 카테고리의 다른 글

데이터형 변환  (0) 2009.06.02
TO_CHAR 함수  (0) 2009.06.02
그룹 함수  (0) 2009.06.02
GROUP BY  (0) 2009.06.02
Join  (0) 2009.06.02
Posted by 으랏차
,