nvl, nvl2

- nvl

nvl(null값이 포함된 필드명, 적용시킬값)

-> null값을 특정값으로 변환

SQL> select ename,nvl(comm,0) from emp;

ENAME      NVL(COMM,0)
---------- -----------
SMITH                0
WARD               500
JONES                0
          ...

 

- nvl2

nvl2(null값을 포함한 필드명,인수1,인수2)

-> null이 아닌 경우 인수1, null인 경우 인수2 반환

SQL> select ename,sal,comm,nvl2(comm,sal+comm,sal) total_sal from emp;

ENAME             SAL       COMM  TOTAL_SAL
---------- ---------- ---------- ----------
SMITH             800                   800
ALLEN            1600        300       1900
                  ...

 


조건문 ( decode, case~when )

decode 함수는 오라클 sql에서만 사용할 수 있는 비표준 함수이고, 조건이 많아지면 가독성이 떨어진다는 단점이 있다.

이 decode 함수를 대체할 수 있는 구문이 case~when 표현식이다.

- decode

decode(필드명,조건식,계산값,조건식2,계산값2,조건식3,계산값3.디폴트값)

SQL> select ename,job,sal,
  2  decode(job,'ANALYST',sal*1.1,'CLERK',sal*1.15,'MANAGER',sal*1.2,sal) "급여인상"
  3  from emp;

ENAME      JOB              SAL   급여인상
---------- --------- ---------- ----------
SMITH      CLERK            800        920
ALLEN      SALESMAN        1600       1600
                   ...

 

- case~when

case when 조건식1 then 리턴값1  
     when 조건식2 then 리턴값2
     else 디폴트값
end
SQL> select ename,job,sal,
  2  case when job='ANALYST' then sal*1.1
  3  when job='CLERK' then sal*1.15
  4  when job='MANAGER' then sal*1.2
  5  else sal end as "최종금액"
  6  from emp;

ENAME      JOB              SAL   최종금액
---------- --------- ---------- ----------
SMITH      CLERK            800        920
ALLEN      SALESMAN        1600       1600
                  ...
​

 

+ Recent posts