Oracle SQL 강좌
NVL, NVL2, NULLIF, COALESCE 33 13 99,999+

by 김정식 NVL NVL2 NULLIF COALESCE [2006.02.12]


NVL

NVL 함수는 NULL 값을 다른 값으로 바꿀 때 사용하며, 모든 데이터 타입에 적용이 가능하다.

   
-- 매니저가 없는 값을 0으로 바꾸어서 출력하는 예제.
SELECT empno, NVL(mgr, 0) mgr
  FROM emp  
 WHERE deptno = 10;

EMPNO      MGR
------- -------
  7782    7839
  7839       0
  7934    7782

NVL2

  • - NVL2라는 함수는 NVL함수의 DECODE 함수의 개념을 합쳤다고 생각하면 쉽습니다.
  • - NVL2(expr, expr1, expr2)
  • - expr의 값이 NULL이 아닐 경우에는 expr1의 값을 반환 하고, NULL일 경우에는 expr2의 값을 반환 한다.
   
-- 매니저가 있는경우 1을 없는경우 0을 출력하는 예제이다.
SELECT empno, NVL2(mgr, 1, 0) mgr
  FROM emp  
 WHERE deptno = 10;

EMPNO        MGR
------- ----------
  7782          1
  7839          0
  7934          1

NULLIF

  • - NULLIF(exp1, exp2)
  • - exp1값과 exp2값이 동일하면 NULL을 그렇지 않으면 exp1을 반환
  • - CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

COALESCE

  • - COALESCE(expr1,expr2,expr3,…)
  • - expr1이 NULL이 아니면 expr1값을 그렇지 않으면 COALESCE(expr2,expr3,…)값을 반환.
  • - NVL 함수와 비슷하다.
 
-- 아래 문장을 실행해 보자.
SELECT COALESCE(comm,1), comm 
  FROM emp;


COALESCE(COMM,1)       COMM
---------------- ----------
               1
             300        300
             500        500
               1
            1400       1400
               1
               1
               1
               0          0
               1
               1  

- 강좌 URL : http://www.gurubee.net/lecture/1880

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by dksj [2005.11.16 15:51:26]
NVL의 뜻이 뭐예요>?

by coonta [2005.11.17 09:54:35]
- NVL 함수는 NULL값을 다른 값으로 바꿀 때 쓰입니다.

by 아감사 [2006.04.05 11:49:22]
자주 와서 많이 보고 갑니다..감사합니다.

by 2-2 [2006.05.04 14:13:19]
아..정말..골때리네..ㅡ,.ㅡ;;
....잘만 알면 편리할꺼 같은데..

완전 삽질만 하고 있네..ㅡ,.ㅡ;;명령어 열라 외어야지ㅡ,.ㅡ;

by 희야 [2006.09.18 09:57:03]
와우 이럴수가..난 왜 이제알았지..ㅠㅠ

by 정 [2007.04.10 16:42:46]
감사합니다.

by 선 [2008.01.24 11:01:01]
나두 잘되는데.. ^^
항상 잘보고 있습니다.. 감사~ ^^

by 독수리한 [2009.02.02 17:19:35]
출처남기고 퍼가겠습니다^^

by 오타찾기 [2009.07.03 16:14:35]
SELECT empno, NVL
FROM emp
WHERE deptno = 30;
여기 오타네여~~~
SELECT empno, NVL (COMM,0)
FROM emp
WHERE deptno = 30;

by 재뾰 [2010.07.02 17:04:26]
음냥 재밋네 머지랑 케이스

by 김승범 [2012.10.19 09:24:09]
감사합니다^^ ㅁㅐ번 많이 배웁니다 ㅎㅎ

by 박군 [2013.12.27 09:31:31]

COALESCE 이나  NULLIF는 책에서도 못봤는데

근데 실무에서 쓰는경우가 있나요?

by 빌헬름손 [2016.12.22 10:44:44]

NVL은 oracle 함수이고, COALESCE 함수는 ANSI 표준 함수입니다. oracle 만이 아닌 다른 DB도 고려해야하는 실무에서 ANSI 표준을 지키려는 경우가 많습니다 :) 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입