DB

[DB] 데이터베이스 관점에서 NULL

개바리여리 2025. 6. 19. 23:45

데이터베이스에서 NULL은 "값이 없다" 또는 **"알려지지 않았다"**는 의미를 가집니다.
즉, 0도 아니고, 빈 문자열도 아니며, 그냥 "모름" 또는 **"정의되지 않음"**을 의미

 

영희의 나이값이 NULL 이다

 

이것은 영희의 나이값이 없는것인데 0살이거나 "" 빈값이 아니라는 의미이다.

즉, 나이는 존재하지만 기록되지 않거나 아직 모르는 상태이다.

 

NULL의 특징

  1. 비교 불가
    • NULL = NULL은 true가 아니라 **false 혹은 UNKNOWN**이에요.
    • NULL은 "모름"이기 때문에 서로 비교할 수 없음.
    • 비교하려면 반드시 IS NULL 또는 IS NOT NULL을 써야 해요.

2. 산술 연산 시 NULL

  • 어떤 값에 NULL을 더하거나 곱하면 결과도 NULL이에요.
  • 예: 100 + NULL → NULL

 

 

NULL이 성능이나 설계에 끼치는 영향

 

1. NULL은 인덱스에서 주의해야 함

  • 일반적으로 B-Tree 인덱스는 NULL 값을 인덱싱하지만,
    일부 DB에서는 NULL 값이 WHERE 조건에 따라 무시되기도 함.
SELECT * FROM users WHERE phone IS NULL;

 

위에 쿼리는 인덱스 적용이 안될 수도 있음.

 

2. NOT IN과 NULL

  • NOT IN 조건에서 NULL이 있으면 전체 결과가 아예 비어버릴 수 있음.
SELECT * FROM users WHERE id NOT IN (SELECT user_id FROM orders);

 

만약 orders.user_id에 NULL이 포함되어 있으면 → 결과가 0건 나올 수도 있음
(왜냐면 NULL이 있으면 비교가 불확실하다고 판단됨)

 

아래 쿼리가 안전하게 치환한 것이다.

SELECT * FROM users u
WHERE NOT EXISTS (
  SELECT 1 FROM orders o WHERE o.user_id = u.id
);

 

 

3. NULL은 3값 논리 (Three-valued logic)


TRUE AND NULL UNKNOWN
FALSE OR NULL UNKNOWN
NULL = NULL UNKNOWN

 

3-1. and 연산자

A B A AND B
TRUE TRUE TRUE
TRUE FALSE FALSE
TRUE NULL UNKNOWN
FALSE TRUE FALSE
FALSE FALSE FALSE
FALSE NULL FALSE
NULL TRUE UNKNOWN
NULL FALSE FALSE
NULL NULL UNKNOWN

 

 

3-2. OR 연산자

A B A OR B
TRUE TRUE TRUE
TRUE FALSE TRUE
TRUE NULL TRUE
FALSE TRUE TRUE
FALSE FALSE FALSE
FALSE NULL UNKNOWN
NULL TRUE TRUE
NULL FALSE UNKNOWN
NULL NULL UNKNOWN

 

 

3-3 NOT 연산

A NOT A
TRUE FALSE
FALSE TRUE
NULL NULL