데이터베이스 연구실.log

NULL 처리

값이 없는 상태인 NULL을 조건에서 검색하는 방법(IS NULL)과, 계산이나 출력에서 NULL을 다른 값으로 바꾸는 NVL, NVL2, COALESCE

NULLIS NULLIS NOT NULLUNKNOWNNVLNVL2COALESCE

#핵심 요약

NULL은 데이터가 없는 상태이고, 알 수 없는 값(unknown)임

NULL은 =로 비교할 수 없고 IS NULL, IS NOT NULL로 검색함

NULL이 들어간 산술식의 결과는 NULL임
계산 전에 NVL, NVL2, COALESCE로 바꿈

#개념과 동작 원리

NULL은 NOT NULL이나 PRIMARY KEY 제약이 없는 어떤 데이터 타입의 컬럼에도 올 수 있음
값을 모르거나 의미가 없을 때 씀
숫자 0과는 다름

Oracle은 길이 0인 문자 값을 NULL로 처리함
다만 앞으로도 그렇다는 보장이 없으니 빈 문자열을 NULL과 같은 것으로 다루지 말라고 권함

IS NULL, IS NOT NULL 외의 조건에서 결과가 NULL 값에 좌우되면 결과는 UNKNOWN임
NULL은 어떤 값과도, 다른 NULL과도 같거나 다르지 않음
예외로 DECODE는 두 NULL을 같다고 봄

WHERE 절의 조건이 UNKNOWN이면 그 행은 나오지 않음
NOT FALSE는 TRUE지만 NOT UNKNOWN은 UNKNOWN임

조건 a의 값 결과
a IS NULL NULL TRUE
a IS NOT NULL NULL FALSE
a = NULL 10 또는 NULL UNKNOWN
a != NULL 10 또는 NULL UNKNOWN
a = 10 NULL UNKNOWN

함수:

함수 동작
NVL(expr, 대체값) expr이 NULL이면 대체값
NVL2(expr, 값1, 값2) expr이 NULL이 아니면 값1, NULL이면 값2
COALESCE(expr1, expr2,...) 실습에서는 COALESCE(comm, 0)을 NVL처럼 썼음
PostgreSQL에서 NVL 대신 씀

NULL 검색과 함께 사용하는 비교, 논리 조건은 WHERE와 조건 연산자에서 다룸

#필수 명령어 또는 SQL

#NULL 검색

SQL Developer 또는 SQL*Plus조회만 함
SELECT ename, comm
  FROM emp
 WHERE comm IS NULL;

SELECT ename, comm
  FROM emp
 WHERE comm IS NOT NULL;

결과 해석: 개별 실행 출력은 기재 없음

#NULL을 다른 값으로

SQL Developer 또는 SQL*Plus조회만 함
SELECT ename, sal, comm, sal + NVL(comm, 0)
  FROM emp;

SELECT ename, sal, comm, NVL2(comm, sal + comm, sal)
  FROM emp;

SELECT ename, sal, COALESCE(comm, 0), sal + COALESCE(comm, 0) AS "이번달 월급"
  FROM emp;

결과 해석: 세 문장 모두 커미션이 NULL인 사원의 월급+커미션을 월급으로 보여 줌
NVL 없이 sal + comm만 쓰면 그 사원은 NULL이 됨

숫자 컬럼을 문자로 바꿔 출력하려면 대체값의 타입을 맞춤

SQL Developer 또는 SQL*Plus조회만 함
SELECT ename, NVL(TO_CHAR(comm), 'no comm')
  FROM emp;
PostgreSQL psql조회만 함
SELECT ename, COALESCE(TO_CHAR(comm, 'FM9999'), 'no comm')
  FROM emp;

결과 해석: 개별 실행 출력은 기재 없음

#사용 조건과 주의사항

NVL의 두 인수 타입이 맞지 않을 때의 변환 규칙은 확인 불가
실습에서는 숫자 컬럼에 문자 대체값을 줄 때 TO_CHAR로 먼저 바꿨음

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기