SQL 값이 NULL일경우 - NVL / IFNULL / ISNULL / NVL2 / COLEASCE

값이 NULL일 경우 다른 값으로 출력해주는 함수들을 소개한다

아래는 설명에 쓰일 테이블입니다

NAME SALARY
철수 4000
영희 3500
훈이 NULL

Oracle - NVL, NVL2

ORACLE에서는 NVL / NVL2 함수를 사용합니다

NVL(EXPR1, EXPR2)  -  EXPR1이 NULL이면 EXPR2의 값을 NULL이 아니면 EXPR1의 값 출력

SELECT NAME, NVL(SALARY, 'NO PAY') AS SALARY
 --> SALARY가 NULL이면 'NO PAY' 아니면 SALARY 출력
NAME SALARY
철수 4000
영희 3500
훈이 NO PAY

위 결과가 출력됩니다 어렵지 않죠??

NVL2(EXPR1, EXPR2, EXPR3)  -  EXPR1이 NULL이 아니면 EXPR2의 값을 NULL이면 EXPR3의 값 출력

SELECT NAME, NVL2(SALARY, 'PAY', 'NO PAY')
 --> SALARY가 NULL이 아니면 'PAY' NULL이면 'NO PAY' 출력
NAME SALARY
철수 PAY
영희 PAY
훈이 NO PAY

위 결과 출력됩니다~


MySQL - IFNULL, MSSQL - ISNULL

MYSQL과 MSSQL에도 NVL함수와 똑같은 기능에 이름만 다른 함수들이 있습니다

두 함수 모두 다 NVL과 똑같이 EXPR1이 NULL 이면 EXPR2의 값을 NULL 이 아니면 EXPR1의 값 출력합니다

MYSQL - IFNULL( EXPR1, EXPR2 )

MSSQL - ISNULL( EXPR1, EXPR2 )

 

똑같으니 굳이 사용하는 부분을 보이지는 않겠습니다

NVL예제에서 NVL대신에 위의 함수들을 넣기만 하면 됩니다~!


COALESCE - Oracle, MSSQL, MySQL 공통

ORACLE / MSSQL / MYSQL 공통으로 쓰는 COALESCE 함수 도 있습니다

COALESCE( EXPR1, EXPR2, EXPR3...) - 가장 앞에 있는 EXPR 값이 NULL이 아닌 것을 반환한다

아래 테이블을 통해 예제를 진행해 보겠습니다.

NAME SALARY POINT
철수 4000 NULL
영희 NULL 8000
훈이 NULL NULL
SELECT NAME, COLEASCE(SALARY, POINT, 'NOTHING') AS 'SALARY OR POINT'
 --> SALARY출력 SALARY가 NULL 이면 POINT출력 POINT도 NULL이면 'NOTHING'출력
NAME SALARY OR POINT
철수 4000
영희 8000
훈이 NOTHING

COALESCE는 몰라도 위의 함수들로 구현 가능해서 꼭 필요한 건 아니지만

여러 개 옵션(2개 이상) 중 NULL 아닌 것의 출력을 요한다면 유용하게 쓸 수 있을 것 같습니다

 

이상으로 포스팅 마치겠습니다

도움이 되셨다면 공감 버튼 부탁드립니다~