본문 바로가기
개발/SQL

[Oracle] Null 체크 및 대체 (NVL, NVL2)

by 김토끼A 2022. 10. 26.

Oracle

 데이터 중 NULL 값이 있을 수 있습니다. 이런 NULL 값을 체크하여 다른 문자로 대체를 하여 표현할 수도 있고, 그것을 비교할 수도 있는 NVL에 대해 알아보겠습니다.

 

NVL(값, NULL일 경우 대체하고 싶은 값)

: NVL에 NULL을 체크하고 싶은 칼럼이나 값을 적고, 그게 NULL일 경우 대체할 값을 적어주면 됨.

 

 TMP_ANIMAL이라는 테이블이 아래와 같이 데이터가 존재합니다. 이 데이터에 NVL을 사용하는 예시 2개를 정리해보았습니다.

 

NVL
TMP_ANIMAL 테이블

 

예시1) 테이블 TMP_ANIMAL에서 칼럼 YN(사용유무)가 유이면 'Y'이고, 무면 'N' 또는 NULL인데 조회시 NULL인 값도 'N'으로 조회될 수 있도록 하시오.

 

SELECT NAME, NVL(YN, 'N') AS YN
  FROM TMP_ANIMAL

 

 위의 쿼리를 사용하게 되면 아래와 같이 'Y'였던 dog와 rabbit을 제외한 나머지가 'N'으로 조회된 것을 확인할 수 있습니다.

 

NULL
예시1 결과값

 

예시2) 테이블 TMP_ANIMAL에서 칼럼 YN(사용유무)가 유이면 'Y'이고, 무면 'N' 또는 NULL인데 사용유무가 무인 동물의 이름을 조회되도록 하시오.

 

SELECT NAME
  FROM TMP_ANIMAL
 WHERE NVL(YN, 'N') = 'N'

 

 위의 쿼리를 사용하게 되면 아래와 같은 결과를 얻게 됩니다. 'Y'였던 dog와 rabbit을 제외한 데이터에 있는 모든 동물의 이름이 조회되는 걸 확인할 수 있습니다. 그리고 조회조건에서도 NVL을 사용할 수 있다는걸 알 수 있습니다.

 

NULL CHECK
예시2 결과값

 

NVL2(값, NULL이 아닌 경우 대체하고 싶은 값, NULL일 경우 대체하고 싶은 값)

: NVL2에 NULL을 체크하고 싶은 칼럼이나 값을 적고, 그 칼럼이 NULL이 아닐때 출력하고 싶은 값NULL일때 출력하고 싶은 값을 적어주면 됨.

 

예시3) GUEST들은 가입 당시 휴대폰 소유를 하고 있을 경우 휴대폰 번호를 입력해야했습니다. 아래 테이블 TMP_GUEST_LIST를 조회하되 GUEST가 휴대폰 소유 유무를 칼럼 PHONE_YN으로 추가적으로 조회될 수 있도록 하시오. (단, PHONE_YN는 소유할 경우 'Y', 소요하고 있지 않을 경우 'N')

 

NVL2
TMP_GUEST_LIST 테이블

 

SELECT NAME, AGE, PHONE_NUMBER, NVL2(PHONE_NUMBER, 'Y', 'N') AS PHONE_YN
  FROM TMP_GUEST_LIST

 

 위 쿼리를 사용하게 되면 아래와 같은 결과를 얻게 됩니다. PHONE_NUMBER 칼럼에 NVL2를 활용하여 칼럼에 연락처가 입력되어 있을 경우 'Y', NULL 값일 경우 'N'이 출력될 수 있도록 했습니다. 

 

예시3 결과값

 

 본 글에서 Oracle의 NVL과 NVL2에 대해 알아보았습니다. MSSQL에서 NVL같은 역할을 하는 ISNULL에 대해서 알고싶다면 아래 링크를 클릭하시면 됩니다. 

 

[MSSQL] Null 체크 및 대체 (ISNULL)

 데이터 중 NULL값이 있을 수 있습니다. 이런 NULL값을 체크하여 다른문자로 대체를 하여 표현할 수도 있고, 그것으로 비교할 수도 있는 ISNULL에 대해 알아보겠습니다. ISNULL(값, NULL일 경우 대체하

pink-rabbit.tistory.com

댓글