Base/Database

[Database] NVL,NVL2 함수 사용방법 (Oracle SQL)

반응형

 

NVL 함수

 

NULL을 지정한 값으로 변환하는 함수

 

SELECT (expr1,expr2)

FROM    테이블

 

구문

          1        2     

NVL(expr1,expr2)

 

expr1 - NULL을 포함하는 컬럼(NULL이 들어가 있을 만한 컬럼) , 

expr2 - NULL인 경우 변환할 값(NULL 대신 넣을 값)

 

 

BOUNS_PCT 값이 NULL 일때 0을 넣어준다.

 

 

NVL을 사용하지 않고 일반적인 연산을 했을때 나오는 결과 값

이 쿼리는 연봉을 구하고 그 연봉에 보너스를 더하는데 BONUS_PCT 값에  NULL이 있을 경우 결과 값이 NULL이 나온다.

(NULL 값이 있을 때 연산을 하면 NULL 이 나온다.)

이걸 NVL 함수를 사용해서 NULL값을 0으로 만든후 연산을 하여 아래와 같이 계산이 가능하게 끔 만든다. 

NVL 함수 사용으로 NULL이 아닌 결과 값이 나온다.

 

 

 

NVL2 함수

 

NULL 값이 아닐 경우 특정 값으로 출력하는 함수

 

SELECT (expr1,expr2,expr3)

FROM    테이블

 

구문

          1        2     3 

NVL2(expr1,expr2,expr3)

 

1.expr1 - 컬럼(NULL이 들어가 있는 컬럼 , 

2.expr2 - NULL이 아닌 경우 출력할 값

3.expr3 - NULL인 경우 출력할 값

 

위와 같은 경우 쿼리를 풀어서 해석하면

MGR_ID(expr1) 가 NULL이 아닌 경우 '직원'(expr2)으로 출력하고 만약 NULL 이라면 '관리자'(expr3)으로 출력한다.

IF ELSE 문을 배웠다면 그거랑 같다고  생각하면 쉬울 것 같다.

 

반응형