0
과 NULL
은 '값이 없는' 것처럼 보이지만, SQL에서는 완전히 다른 개념으로 취급됩니다. 0
은 유효한 값이지만, NULL
은 **값이 없음(Unknown)**을 의미합니다. 이 차이는 SQLD 시험에서 가장 기본적인 함정으로 자주 출제됩니다.
구분 | 0 (숫자) | NULL |
---|---|---|
의미 | 값이 존재함 | 값이 없음 (Unknown) |
데이터 타입 | 숫자형 데이터 | 모든 데이터 타입에 존재 가능 |
연산 | 정상적으로 연산 가능 | NULL 이 포함된 연산은 결과도 NULL |
비교 | 일반 비교 연산자(= ) 사용 | IS NULL 또는 **IS NOT NULL **만 사용 가능 |
집계 | COUNT , SUM 등 모든 집계 함수에 포함 | COUNT(컬럼) , SUM 등에서 제외 |
NULL
이 포함된 모든 연산의 결과는 NULL
입니다.NULL + 10 = NULL
, NULL * 5 = NULL
NULL
은 다른 어떤 값과도 비교할 수 없습니다. 따라서 WHERE col = NULL
은 항상 FALSE
를 반환합니다.WHERE col IS NULL
, WHERE col IS NOT NULL
COUNT(*)
: 테이블의 모든 행을 카운트합니다. NULL
행을 포함합니다.COUNT(컬럼)
: 해당 컬럼에 NULL
이 아닌 행만 카운트합니다. NULL
행을 제외합니다.COUNT(0)
: 0
은 유효한 값이므로 COUNT(0)
은 모든 행을 카운트합니다.COUNT(NULL)
: NULL
은 값이 없으므로 **항상 0
**을 반환합니다.SUM/AVG
: NULL
값은 무시하고, NULL
이 아닌 값들만 합산/평균을 계산합니다.0
**은 있다
, **NULL
**은 없다
.NULL
**은 **모르는 값
**이다. 모르는 값
과 계산하면 결과도 모른다
(NULL
)!COUNT(별)
**은 전체
! **COUNT(컬럼)
**은 NULL 빼고
!1. 다음 중 NULL
에 대한 설명으로 옳지 않은 것은?
A. NULL
은 값이 없는 상태를 의미한다.
B. NULL
은 0
과 동일하게 취급된다.
C. NULL
을 비교하기 위해서는 IS NULL
을 사용해야 한다.
D. COUNT(컬럼)
함수는 NULL
값을 제외하고 개수를 센다.
2. 다음 SQL 실행 결과로 옳은 것은?
SELECT COUNT(*), COUNT(col), COUNT(NULL)
FROM Test;
(단, Test
테이블에는 총 5개의 행이 있으며, col
컬럼에는 3개의 유효한 값과 2개의 NULL
이 있다.)
① 5, 5, 0
② 5, 3, 0
③ 5, 3, 2
④ 3, 2, 0
3. 다음 중 실행 결과가 NULL
이 되는 것은?
A. SELECT 0 + 10;
B. SELECT NULL + 10;
C. SELECT 10 / 0;
(Oracle 기준)
D. SELECT COUNT(*) FROM Users;
4. 다음 중 옳은 비교 구문을 모두 고른 것은?
ㄱ. WHERE score = 0
ㄴ. WHERE score IS NULL
ㄷ. WHERE score != NULL
ㄹ. WHERE score IS NOT NULL
① ㄱ, ㄴ
② ㄱ, ㄴ, ㄹ
③ ㄷ, ㄹ
④ ㄱ, ㄴ, ㄷ, ㄹ
NULL
은 0
과 다르게 '값이 없음'을 의미합니다. 0
은 유효한 값입니다.COUNT(*)
는 전체 행 수(5)를 셉니다.COUNT(col)
은 NULL
을 제외한 col
의 유효한 값 개수(3)를 셉니다.COUNT(NULL)
은 항상 0
을 반환합니다.NULL
과 연산하면 결과는 항상 NULL
이 됩니다. C는 0으로 나누기 오류가 발생합니다.0
은 값이므로 =
연산자로 비교 가능합니다.NULL
은 IS NULL
또는 IS NOT NULL
로만 비교해야 합니다.!= NULL
은 올바르지 않은 구문입니다.