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 ;