SQL 데이터 타입별 빈 값 정리

TJK·2025년 8월 22일
0

SQL 데이터 타입별 빈 값 정리

NULL, 빈 문자열, 공백, 그리고 숫자 0은 모두 '비어 있는' 것처럼 보일 수 있습니다. 하지만 SQL에서는 각각 다른 의미를 가지며, 처리 방식도 다릅니다. 이 차이를 정확히 이해하는 것이 매우 중요합니다.


1. NULL

핵심 개념 (★★★★★)

  • '값이 없음(No Value)' 또는 '미확정(Unknown)' 상태를 의미합니다.
  • 데이터가 존재하지 않는, 아예 기록되지 않은 상태를 나타냅니다.
  • 다른 어떤 값과도 동일하지 않습니다. 0, '', ' ' 와는 완전히 다른 개념입니다.

주요 특징

  • 데이터 타입: 모든 데이터 타입에 적용될 수 있습니다. (숫자, 문자, 날짜 등)
  • 비교: 일반적인 비교 연산자(=, <>)로 비교할 수 없습니다. 반드시 IS NULL 또는 **IS NOT NULL**을 사용해야 합니다.
  • 연산: NULL이 포함된 연산의 결과는 대부분 NULL이 됩니다.
  • 집계:
    • COUNT(*): NULL을 포함하여 모든 행을 셉니다.
    • COUNT(컬럼): NULL을 제외하고 셉니다.

2. 숫자 0

핵심 개념 (★★★★★)

  • '0'이라는 값이 존재하는 상태입니다.
  • 숫자 데이터 타입(INT, NUMBER, DECIMAL 등)에서 0하나의 유효한 값입니다.

주요 특징

  • 데이터 타입: 숫자 타입에만 해당됩니다.
  • 비교: 일반적인 비교 연산자(=, <>)로 비교할 수 있습니다.
    • WHERE col = 0
  • 연산: 일반적인 산술 연산 규칙에 따라 계산됩니다.
    • 10 + 0 = 10
  • 집계:
    • COUNT(컬럼): 0NULL이 아니므로 카운트에 포함됩니다.

3. 빈 문자열 ('')

핵심 개념 (★★★★☆)

  • **'길이가 0인 문자열'**로, 값이 존재합니다.
  • 문자열 데이터 타입(VARCHAR, CHAR 등)에 명시적으로 비어 있는 값을 삽입한 상태입니다.

주요 특징

  • 데이터 타입: 문자열 타입에만 해당됩니다.
  • 비교: 일반 비교 연산자(=, <>)를 사용하여 비교할 수 있습니다.
    • WHERE col = ''
  • 길이: LENGTH('')의 결과는 0입니다.
  • 집계:
    • COUNT(컬럼): ''NULL이 아니므로 카운트에 포함됩니다.

4. 공백 (' ')

핵심 개념 (★★★★☆)

  • **'공백 문자 1개'**를 값으로 가지는 상태입니다.
  • '' (빈 문자열)과는 다르게, 공백이라는 문자가 1개 존재하는 것입니다.

주요 특징

  • 데이터 타입: 문자열 타입에만 해당됩니다.
  • 비교: 일반 비교 연산자(=, <>)로 비교 가능합니다.
    • WHERE col = ' '
  • 길이: LENGTH(' ')의 결과는 1입니다.
  • 집계:
    • COUNT(컬럼): ' 'NULL이 아니므로 카운트에 포함됩니다.

헷갈리는 빈 값 비교표 (시험용)

구분NULL숫자 0빈 문자열 ('')공백 (' ')
정의값이 없음'0'이라는 값길이 0인 값공백 1개 값
비교 연산IS NULL= / <>= / <>= / <>
LENGTH()NULLN/A01
COUNT(컬럼)제외포함포함포함
NULL 여부NULLNOT NULLNOT NULLNOT NULL

SQLD 시험 단축 키 (시험 직전 필독!)

  • **값이 없다**는 개념은 NULL
  • **IS NULL**로만 비교할 수 있는 것은 **NULL**뿐
  • **COUNT(컬럼)**은 NULL만 제외하고, 나머지는 모두 카운트한다.
  • 0, '', ' '는 모두 NULL이 아니며, 값으로 취급된다.

실전 기출 문제 스타일

1. 다음 중 NULL에 대한 설명으로 가장 올바른 것은?
① 숫자 0과 동일한 개념이다.
② 빈 문자열('')과 동일한 개념이다.
③ 비교 연산자(=, \<>)로 다른 값과 비교할 수 있다.
④ 값이 존재하지 않는 미확정 상태를 의미한다.

2. USER 테이블의 age 컬럼에 NULL, 0, 20이 각각 1개씩 존재할 때, 다음 SQL의 결과는?

SELECT COUNT(age) FROM USER;

① 1
② 2
③ 3
④ NULL

3. 다음 중 user_name 컬럼에 빈 문자열('')을 가진 행을 찾기 위한 올바른 SQL 문은?
SELECT * FROM User WHERE user_name IS NULL;
SELECT * FROM User WHERE user_name = NULL;
SELECT * FROM User WHERE user_name = '';
SELECT * FROM User WHERE user_name IS NOT NULL;

4. USER 테이블의 email 컬럼에 NULL, ' '(공백), 'TEST' 가 각각 1개씩 존재할 때, 다음 SQL의 결과는?

SELECT COUNT(email) FROM USER;

① 1
② 2
③ 3
④ NULL


정답 및 해설

  • 문제 1 정답: ④
    • 해설: NULL은 값이 없는 상태를 나타내며, 숫자나 빈 문자열과 다르게 취급됩니다.
  • 문제 2 정답: ②
    • 해설: COUNT(컬럼)NULL을 제외하고 셉니다. 따라서 NULL을 제외한 020 두 개의 값만 카운트되어 결과는 2가 됩니다.
  • 문제 3 정답: ③
    • 해설: 빈 문자열은 값으로 취급되므로, 일반 비교 연산자인 =를 사용하여 찾을 수 있습니다.
  • 문제 4 정답: ②
    • 해설: COUNT(컬럼)NULL만 제외하고 카운트합니다. ' '(공백)은 유효한 값으로 간주되므로, ' ''TEST' 두 개가 카운트되어 결과는 2가 됩니다.
profile
Hello world!

0개의 댓글