ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL 단일행 함수_일반함수
    Data Base_Oracle/SQL 2020. 1. 2. 23:47

    일반함수 (기타 함수)

    함수 설명
    nvl() null값을 어떤 특정한 값으로 변환해서 표출할 때 사용, 값이 실제로 바뀌는 것이 아님
    nvl(null값이 포함된 필드명, 표시할 값) : null 값을 지정한 값으로 표시함
    nvl2() nvl2(null값을 체크할 필드명, 인수1, 인수2),
    값이 있으면 인수 1 출력, 값이 없으면(null이면) 인수 2 출력
    decode() decode(필드명, 조건1, 결과1, 조건2, 결과2,,,default값)
    조건1에 해당하면 결과1 반환,,,, 해당하는 것이 없으면 default값 반환
    case case~when~ 구문이라고도 하며 조건에 맞는 문장을 수행
    switch문과 유사

    일반함수 사용례

    { nvl() }

    ▷ emp테이블에서 comm필드 내의 null을 0으로 바꾸어서 표출

    ▶ [ SQL> select ename, sal, comm, nvl(comm, 0) from emp; ]

    ENAME SAL COMM NVL(COMM, 0)
    SMITH 800   0
    JONES 2975   0
    TURNER 1500 0 (null 아님) 0 (comm값이 0이라서 0으로 표시됨)
    ... ... ... ...

    { nvl2() }

    ▷ 보너스가 있으면 총급여(급여 + 보너스)를 출력하고, 보너스가 없으면 급여만 출력

    ▶ [ SQL> select ename, sal, comm, nvl2(comm, sal+comm, sal) 총급여 from emp; ]

    ENAME SAL COMM 총급여
    SMITH 800   800
    ALLEN 1600 300 1900
    TURNER 1500 0 (null 아님) 1500
    ... ... ... ...

    { decode() }

    ▷ 부서별로 매출에 따른 급여 인상 예정
    ANALYST 10%, CLERK 15%, MANAGER 20% 인상
    사원명, 업무, 급여를 출력
    각각의 조건에 따른 계산식 적용
    급여가 높은 순으로 정렬

     

    ▶ [ SQL> select ename, job, sal,
    decode(job, 'ANALYST', sal * 1.1, 'CLERK', sal * 1.15, 'MANAGER', sal * 1.2, sal) 급여인상액
    from emp
    order by 3 desc; ]

    ENAME JOB SAL 급여인상액
    FORD ANALYST 3000 3300
    JONES MANAGER 2975 3570
    MILLER CLERK 1300 1495
    WARD SALESMAN 1250 1250
    ... ... ... ...

    { case~when~구문 }

    맞는 조건이 있을 경우 결과를 실행해서 표출함
    조건에 걸리지 않는 레코드는 기본값이 반영됨
    시작은 CASE로, 끝은 END로 선언해야하며
    조건 앞에는 WHEN, 결과 앞에는 THEN을 써야함

    ※ 형식) case when 조건1 then 결과1
    when 조건2 then 결과2
    when 조건3 then 결과3
    else 기본값 end

     

    ▷ 위의 decode()에서 했던 예제를 case~when~

    구문으로 바꾸어서 작성

     

    ▶ [ SQL> select ename, job, sal,
    case when job=upper('analyst') then sal * 1.1
    when job=upper('clerk') then sal * 1.15
    when job=upper('manager') then sal * 1.2
    else sal end 급여인상액 from emp
    order by 3 desc; ]
    ---- 결과는 위와 동일 ----


    일반함수는 컴퓨터언어의 조건문과 유사한 면이 있기 때문에

    익혀두면 원하는 조건에 따른 결과를 산출할 수 있겠습니다.

    댓글

Designed by Tistory.