Oracle

[오라클] NULL 관련 함수

김도유 2022. 12. 27. 10:58

NULL 의 특성

  • 아직 정의되지 않은 값으로 0 또는 공백과 다르다. (0은 숫자이고, 공백은 문자다)
  • 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않으면 NULL을 포함할 수 있다. 
  • NULL을 포함하는 연산의 결과도 NULL이다 ( 1 + NULL = NULL) 
    • 컬럼 A가 1 이고 컬럼 B가 NULL 일때는 연산 결과가 NULL 이지만, 
    • 컬럼 A에서 숫자 1과 NULL 이 있는 상태에서 sum(A)를 하면 NULL 을 제외한 1값이 나온다. 
  • NULL과 연산하고 싶을 때에는 시스템에서 의미 없는 문자로 바꿔서 연산하는 경우가 많다. 혹은 NVL 함수를 이용할 수도 있다. 

 

 

1. NVL(식1,식2)  / ISNULL(식1,식2)

  • 식1의 값이 NULL 이면 식2 출력
  • 단, 표현식1과 표현식2의 결과 데이터 타입이 같아야 한다. 

 

SELECT NVL(NULL, 'NVL-OK') NVL_TEST
FROM   DUAL ;
--결과값 : NVL-OK


SELECT NVL('NOT-NULL', 'NVL-OK') NVL_TEST
FROM   DUAL ;
--결과값 : NOT-NULL (NULL이 아니니까 표현식 2가 아닌 1을 표기한 것임)

 

NVL과 ISNULL은 CASE로 표현하는 것도 가능하다.

SELECT PLAYER_NAME 선수명, 
       CASE WHEN POSITION IS NULL 
            THEN '없음'
            ELSE POSITION
       END AS 포지션
FROM   PLAYER ;

 

 

2. NULLIF(1,2) 

  • 식1이 식2와 같으면 NULL을 아니면 식1을 출력
-- MGR 7698 이면 NULL로 표시한다. 
SELECT ENAME, EMPNO, MGR, NULLIF(MGR, 7698) NUIF
FORM   EMP ;

 

3. COALESCE(1,2)

  • 임의의 개수표현식에서 NULL이 아닌 최초의 표현식, 모두 NULL이면 NULL 반환
  • 예시 : COALESCE(NULL,NULL,‘abc’) -> ‘abc’

 

사원 테이블에서 커미션, 급여를 표기하되, 두 컬럼 모두 NULL 이면 NULL을 표기하는 예시

-- COALESCE (표현식1, 표현식2)

SELECT ENAME, COALESCE(COMM, SAL) COAL
FROM   EMP ;