공든탑앱 열기

NULL 속성의 이해

SQLD (SQL 개발자) · 데이터 모델과 SQL · 약 9분

쉽게 말하면

NULL은 '값이 비어 있음, 모름'이라는 뜻이에요. 0이나 빈칸 글자와는 달라요. 모르는 값에 10을 더해도 여전히 모르는 값이라서, NULL이 섞인 계산 결과는 NULL이 돼요. 그래서 NULL인지 확인할 때는 = 대신 IS NULL을 써요.

시험용 정의

NULL은 값이 없거나, 아직 정해지지 않았거나, 모르는 상태를 뜻한다. 숫자 0이나 공백 문자와 다르다. NULL이 들어간 산술 연산은 NULL, NULL과의 비교는 알 수 없음(UNKNOWN)이 되고, 집계 함수는 NULL을 빼고 계산한다. 모델링할 때 속성이 NULL을 허용할지 정해야 한다.

비유로 이해하기

설문지에서 '나이' 칸을 비워 둔 것과 같다. 0살이라고 쓴 게 아니라 안 쓴 것이다. 그 사람 나이에 10을 더해도 여전히 모른다.

자세히

먼저 알아 둘 말

말뜻
UNKNOWN참도 거짓도 아닌 '알 수 없음'. NULL과 비교하면 나온다. WHERE는 참인 행만 남기므로 UNKNOWN인 행은 빠진다
집계 함수여러 행을 모아 값 하나를 내는 함수. COUNT, SUM, AVG, MAX, MIN
NOT NULL열에 NULL을 허용하지 않는 제약조건
DEFAULT값을 주지 않았을 때 대신 들어갈 기본값

NULL의 동작

상황결과예
산술 연산NULL3000 + NULL = NULL
비교 (=, <>, >)UNKNOWN → WHERE에서 걸러짐COMM = NULL은 어떤 행도 고르지 못한다
NULL 확인IS NULL / IS NOT NULL만 쓴다COMM IS NULL
집계 함수NULL을 빼고 계산SUM(COMM), AVG(COMM), COUNT(COMM)
COUNT(*)NULL 여부와 상관없이 행 수COUNT(*) = 12, COUNT(COMM) = 3
문자 연결(Oracle ||)NULL은 빈 문자열처럼 취급'A' || NULL = 'A'

AVG 함정

COMM이 (500, 0, 300, NULL)인 4명에서 AVG(COMM)은 NULL을 뺀 3명 평균 = 266.67이다. 4명 전체로 나눈 평균을 원하면 AVG(NVL(COMM, 0)) = 200 또는 SUM(COMM) / COUNT(*)를 쓴다. 시험에 자주 나오는 차이다.

모델링에서 NULL

  • 반드시 있어야 하는 값(이름, 주문일)은 NOT NULL로 정한다. 주식별자는 존재성 때문에 NULL이 될 수 없다
  • NULL이 많이 생기는 속성이 몰려 있다면 엔터티를 나누는 것(서브타입 분리)을 고려한다
  • '값 없음'을 0이나 '없음' 같은 특정 값으로 대신하고 싶다면 DEFAULT를 정한다
  • Oracle은 빈 문자열('')을 NULL로 저장한다. SQL Server는 ''와 NULL을 구분한다

시험에 이렇게 나와요

출제 범위·공식 안내 기반

확인 문제

Q1. SAL 값이 3000이고 COMM 값이 NULL인 사원의 SAL + COMM 결과는?

  1. 3000
  2. NULL
  3. 오류
  4. 0
정답 보기

2번 NULL

NULL이 들어간 산술 연산의 결과는 NULL이다. NULL은 0이 아니라 '값을 모름'이라서 더해도 모르는 값이 된다. 0으로 보려면 SAL + NVL(COMM, 0)처럼 바꿔야 한다.

Q2. COMM 값이 (NULL, 100, NULL, 200)인 4행에서 COUNT(COMM), COUNT(*), AVG(COMM)을 차례로 쓴 것은?

  1. 2, 4, 150
  2. 4, 4, 75
  3. 2, 2, 75
  4. 4, 2, 150
정답 보기

1번 2, 4, 150

COUNT(COMM)은 NULL 제외 2, COUNT(*)는 행 수 4, AVG는 (100+200)/2 = 150.

Q3. A, B 열이 (1, NULL), (2, 3), (NULL, 4)인 3행에서 SUM(A + B)의 결과는?

  1. 10
  2. NULL
  3. 5
  4. 6
정답 보기

3번 5

행마다 먼저 더한다: NULL, 5, NULL. NULL을 빼고 합하면 5. SUM(A)+SUM(B) = 3+7 = 10과 다르다.

Q4. COMM이 NULL인 행을 찾는 올바른 조건은?

  1. COMM <> NULL
  2. COMM IS NULL
  3. COMM = NULL
  4. COMM = ''
정답 보기

2번 COMM IS NULL

NULL은 = 로 비교할 수 없다. IS NULL을 쓴다.

Q5. NULL + 10 의 결과는?

  1. NULL
  2. 10
  3. 0
  4. 오류
정답 보기

1번 NULL

NULL과의 산술 연산은 NULL이다.

Q6. Oracle에서 ORDER BY comm ASC 를 하면 COMM이 NULL인 행은?

  1. 결과에서 빠진다
  2. 오류
  3. 맨 앞
  4. 맨 뒤
정답 보기

4번 맨 뒤

Oracle은 NULL을 가장 큰 값으로 봐서 오름차순에서 맨 뒤다. SQL Server는 반대로 맨 앞.

헷갈리기 쉬운 O·X

NULL은 숫자 0과 같은 값이다.

정답 보기

X NULL은 값이 없거나 모르는 상태다. 0은 엄연한 값이다.

집계 함수 SUM, AVG, MAX는 NULL을 무시하고 계산한다.

정답 보기

O COUNT(*)만 NULL과 무관하게 행을 센다.

WHERE COMM <> 0 조건은 COMM이 NULL인 행도 결과에 포함한다.

정답 보기

X NULL과의 비교는 UNKNOWN이라 걸러진다.

함께 보면 좋은 개념