오라클 SQL · 기초 다지기

NULL 처리와 NVL, COALESCE, NULLIF

NULL은 값이 0인 것도, 빈 문자열인 것도 아닌 특별한 상태다. NULL을 제대로 이해하지 못하면 비교, 집계, 정렬, 함수 결과에서 계속 오답이 생긴다.

NULL 처리와 NVL, COALESCE, NULLIF 대표 이미지

이 글에서 꼭 잡아야 할 것

NULL은 값이 0인 것도, 빈 문자열인 것도 아닌 특별한 상태다. NULL을 제대로 이해하지 못하면 비교, 집계, 정렬, 함수 결과에서 계속 오답이 생긴다.

SQL의 세 값 논리는 TRUE, FALSE, UNKNOWN을 함께 다룬다. NULL이 들어간 비교는 종종 UNKNOWN이 되어 필터링에서 제외되기 때문에, 문제를 풀 때는 NULL이 있는지 없는지부터 먼저 확인하는 습관이 매우 중요하다.

난이도 입문
모듈 기초 다지기
학습 시간 10분
핵심 키워드 NULL, NVL, COALESCE

개념 지도와 이해 포인트

NULL의 의미 NULL은 아직 알 수 없거나 값이 존재하지 않음을 뜻한다. 따라서 일반 비교 연산자로는 동일 여부를 판단할 수 없고 별도 문법이 필요하다.
NULL 전용 비교 `IS NULL`, `IS NOT NULL`로만 정확하게 판단할 수 있다. `= NULL`이나 `<> NULL`은 기대한 결과를 내지 않는다.
대체 함수 `NVL`은 NULL이면 대체값을 반환하고, `COALESCE`는 여러 표현식 중 처음 NULL이 아닌 값을 고른다. `NULLIF`는 두 값이 같으면 NULL을 만든다.
NULL 처리와 NVL, COALESCE, NULLIF 개념 다이어그램

대표 문법 패턴

SELECT employee_id, commission_pct,
       NVL(commission_pct, 0) AS commission_rate
FROM employees;

SELECT employee_id, manager_id
FROM employees
WHERE manager_id IS NULL;

문법 읽는 포인트

  • `NVL(expr1, expr2)`는 expr1이 NULL이면 expr2를 반환한다.
  • `COALESCE`는 여러 후보 중 첫 번째 유효값을 고를 때 유리하다.
  • NULL 비교에는 반드시 `IS NULL` 또는 `IS NOT NULL`을 사용한다.

핵심 용어

  • NULL
  • NVL
  • COALESCE

보너스가 없는 직원을 0으로 치환해 보기

보고서나 계산식에서는 NULL 때문에 결과가 통째로 NULL이 되는 일이 잦다. 대체값을 미리 정해 두면 계산 결과를 안정적으로 유지할 수 있다.

SELECT employee_id,
       salary,
       NVL(commission_pct, 0) AS commission_pct,
       salary * NVL(commission_pct, 0) AS commission_amount
FROM employees
ORDER BY employee_id;

수험 체크포인트와 자주 하는 실수

시험 체크포인트

  • `= NULL`은 항상 오답 포인트로 자주 등장한다.
  • 집계 함수는 NULL을 자동 제외하는 경우가 많으므로 COUNT 차이를 함께 묻는 문제가 나온다.
  • `NVL`과 `COALESCE`의 차이는 인자 수와 이식성 측면에서 비교하면 기억이 잘 남는다.

자주 하는 실수

  • NULL을 0이나 공백과 같은 의미로 외워 버리는 실수
  • `NOT IN` 목록 안에 NULL이 있을 때 결과가 비어 보이는 상황을 놓치는 실수
  • NULL 치환 후 데이터 타입이 바뀌는 경우를 고려하지 않는 실수

연결 학습

NULL을 제대로 다루면 SQL 오답의 상당수를 줄일 수 있다. 다음 챕터에서는 결과를 보기 좋게 정렬하는 ORDER BY와 별칭 활용을 정리한다.

댓글 0

작성자 이름과 댓글 내용을 입력하면 바로 등록됩니다. 답글은 한 단계까지 지원하고, 댓글은 최대 200자까지 작성할 수 있습니다.

일반 댓글 작성

댓글을 불러오는 중입니다.

같은 카테고리에서 이어서 읽기

지금 읽은 글과 가까운 흐름의 글 5개를 모아 두었습니다. 바로 앞뒤 문맥을 이어서 읽고 싶을 때 가장 편합니다.