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, 아니면 a

NVL은 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인 행을 반환한다.