0과 NULL의 차이 정리

TJK·2025년 8월 22일
0

0과 NULL의 차이 정리

0NULL은 '값이 없는' 것처럼 보이지만, SQL에서는 완전히 다른 개념으로 취급됩니다. 0유효한 값이지만, NULL은 **값이 없음(Unknown)**을 의미합니다. 이 차이는 SQLD 시험에서 가장 기본적인 함정으로 자주 출제됩니다.


1. 개념 비교

구분0 (숫자)NULL
의미값이 존재함값이 없음 (Unknown)
데이터 타입숫자형 데이터모든 데이터 타입에 존재 가능
연산정상적으로 연산 가능NULL이 포함된 연산은 결과도 NULL
비교일반 비교 연산자(=) 사용IS NULL 또는 **IS NOT NULL**만 사용 가능
집계COUNT, SUM모든 집계 함수에 포함COUNT(컬럼), SUM 등에서 제외

2. SQLD 시험 핵심 포인트

1. 연산 및 비교 규칙 (★★★★★)

  • NULL과의 연산: NULL이 포함된 모든 연산의 결과는 NULL입니다.
    • 예시: NULL + 10 = NULL, NULL * 5 = NULL
  • NULL과의 비교: NULL은 다른 어떤 값과도 비교할 수 없습니다. 따라서 WHERE col = NULL은 항상 FALSE를 반환합니다.
    • 올바른 비교: WHERE col IS NULL, WHERE col IS NOT NULL

2. 집계 함수에서의 차이 (★★★★★)

  • COUNT(*): 테이블의 모든 행을 카운트합니다. NULL 행을 포함합니다.
  • COUNT(컬럼): 해당 컬럼에 NULL이 아닌 행만 카운트합니다. NULL 행을 제외합니다.
  • COUNT(0): 0은 유효한 값이므로 COUNT(0)모든 행을 카운트합니다.
  • COUNT(NULL): NULL은 값이 없으므로 **항상 0**을 반환합니다.
  • SUM/AVG: NULL 값은 무시하고, NULL이 아닌 값들만 합산/평균을 계산합니다.

3. 암기 팁

  • **0**은 있다, **NULL**은 없다.
  • **NULL**은 **모르는 값**이다. 모르는 값과 계산하면 결과도 모른다(NULL)!
  • **COUNT(별)**은 전체! **COUNT(컬럼)**은 NULL 빼고!

4. 실전 기출 문제 스타일

1. 다음 중 NULL에 대한 설명으로 옳지 않은 것은?
A. NULL은 값이 없는 상태를 의미한다.
B. NULL0과 동일하게 취급된다.
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

① ㄱ, ㄴ
② ㄱ, ㄴ, ㄹ
③ ㄷ, ㄹ
④ ㄱ, ㄴ, ㄷ, ㄹ


정답 및 해설

  • 문제 1 정답: B
    • 해설: NULL0과 다르게 '값이 없음'을 의미합니다. 0은 유효한 값입니다.
  • 문제 2 정답: ②
    • 해설:
      • COUNT(*)는 전체 행 수(5)를 셉니다.
      • COUNT(col)NULL을 제외한 col의 유효한 값 개수(3)를 셉니다.
      • COUNT(NULL)은 항상 0을 반환합니다.
  • 문제 3 정답: B
    • 해설: NULL과 연산하면 결과는 항상 NULL이 됩니다. C는 0으로 나누기 오류가 발생합니다.
  • 문제 4 정답: ②
    • 해설:
      • ㄱ: 0은 값이므로 = 연산자로 비교 가능합니다.
      • ㄴ, ㄹ: NULLIS NULL 또는 IS NOT NULL로만 비교해야 합니다.
      • ㄷ: != NULL은 올바르지 않은 구문입니다.
profile
Hello world!

0개의 댓글