topic★★★★★난이도 · 약 15분
NULL 처리
NULL은 '알 수 없음'이며 비교 연산 결과는 항상 UNKNOWN. `IS NULL`로만 판별.
#NULL#집계#실기핵심
왜 배우는가
COUNT(*) vs COUNT(col) 의 차이, NVL/COALESCE/NULLIF 함수 사용, 집계 함수의 NULL 무시가 시험 단골.
는 SQL의 핵심이자 함정이다. `col = NULL` 같은 직접 비교는 절대 참이 될 수 없으므로 WHERE 절에서 사라진다.
sql
-- 잘못된 방식 (결과 없음)
SELECT * FROM emp WHERE mgr = NULL;
-- 올바른 방식
SELECT * FROM emp WHERE mgr IS NULL;
-- NULL 대체 함수
SELECT NVL(comm, 0) FROM emp; -- Oracle
SELECT COALESCE(comm, 0) FROM emp; -- ANSI 표준, 다수 DB
SELECT NULLIF(a, b) FROM t; -- a=b이면 NULL, 아니면 aNVL은 Oracle 전용, COALESCE는 ANSI 표준으로 여러 인자를 받아 NULL이 아닌 첫 값을 반환한다.
집계 함수의 NULL 무시 — `SUM`, `AVG`, `COUNT(col)`, `MAX`, `MIN`은 모두 NULL을 제외하고 계산한다. 단 `COUNT(*)`는 모든 행을 센다 (NULL 포함).
| 함수 | 설명 | NULL 처리 |
|---|---|---|
| `COUNT(*)` | 전체 행 수 | 포함 |
| `COUNT(col)` | col이 NULL 아닌 행 수 | 제외 |
| `COUNT(DISTINCT col)` | 중복 제거 후 개수 | 제외 |
| `SUM(col)` | col의 합 | 무시 |
| `AVG(col)` | col의 평균 | 무시 (분모에서도 제외) |
실기 드릴 3문항
code실기 드릴 · 코드 추적
emp 테이블에 5개 행이 있고 그 중 2개의 comm 컬럼이 NULL이다. 다음 두 쿼리의 결과는?
sql
SELECT COUNT(*) FROM emp;
SELECT COUNT(comm) FROM emp;edit실기 드릴 · 단답형
NULL을 0으로 대체하는 ANSI 표준 함수는?
check_circle실기 드릴 · OX
`WHERE col = NULL` 구문은 col이 NULL인 행을 반환한다.