Search
moon
sun

06.NULL 속성의 이해

•
NULL이 0도 아니고 공백도 아니라는 것을 예로 들어 설명할 수 있다.
•
산술 · 문자열 결합 · 비교 연산에서 NULL이 어떻게 동작하는지 구분할 수 있다.
•
= NULL 이 왜 안 되고 IS NULL 을 써야 하는지 설명할 수 있다.
•
모델의 선택 속성 · NOT NULL · DEFAULT 가 NULL과 어떻게 연결되는지 안다.

1. NULL이란 무엇인가

1) 정의

NULL = "값이 존재하지 않음" (Unknown, 미지의 값)
•
아직 정해지지 않았거나, 해당 사항이 없거나, 입력되지 않은 상태
•
⚠️ 0이 아니고, 공백도 아니고, 빈 문자열도 아닙니다.

2) NULL이 생기는 세 가지 이유

이유
설명
실습 스키마 예시
미확정
아직 값이 정해지지 않음
신입 선수의 POSITION
해당 없음
그 대상에게는 존재하지 않는 값
사장 KING 의 MGR(관리자)
미입력
값은 있지만 아직 입력 안 됨
선수의 NICKNAME

3) NULL vs 0 vs 공백 — 완전히 다른 세 가지 ⭐⭐

NULL
0
공백 ' '
의미
값이 없음
숫자 영(零)
공백 문자 한 칸
저장 공간
차지하지 않음
차지함
차지함
산술 연산
결과가 NULL
정상 계산
(숫자 아님)
길이(LENGTH)
NULL
1
1
비교 가능?
❌ 불가
✅ 가능
✅ 가능
구체적인 예로 보면
상황
값
의미
시험을 결시했다
NULL
점수 자체가 존재하지 않음
시험을 봤는데 다 틀렸다
0
0점이라는 값이 존재함
⭐ 이 둘을 같게 취급하면 평균 점수가 완전히 달라집니다. (결시자를 0점으로 계산하면 평균이 낮아짐)

4) ⚠️ Oracle의 특이점 — 빈 문자열은 NULL이다

입력한 값
Oracle에서의 취급
'' (빈 문자열)
NULL ⚠️
' ' (공백 한 칸)
공백 문자 (NULL 아님)
다른 DBMS(MySQL, SQL Server)에서는 '' 과 NULL을 구분합니다. Oracle만의 특징이므로 시험에서 주의하세요.

2. NULL 연산 규칙 ⭐⭐⭐

🔥 핵심입니다. 이 표 하나만 확실히 외우면 됩니다.

1) 세 가지 연산의 결과가 서로 다르다

연산 종류
NULL이 끼면
결과
산술 연산 (+ - * /)
전체가 무너짐
NULL
문자열 결합 (||)
NULL을 무시함
나머지 문자열 ⭐
비교 연산 (= > <)
참도 거짓도 아님
UNKNOWN (알 수 없음)
⚠️ 가장 헷갈리는 지점 산술 연산은 NULL에 전염되는데, 문자열 결합은 NULL을 없는 셈 친다는 것. 이 차이가 시험에 자주 나옵니다.

2) 산술 연산 — NULL이 하나라도 있으면 결과는 NULL

식
결과
100 + NULL
NULL
100 - NULL
NULL
100 * NULL
NULL
100 / NULL
NULL
NULL + NULL
NULL
0 + NULL
NULL (0이 아님! ⚠️)
실습 데이터로 확인 — EMP 의 급여 + 커미션
SELECT ENAME, SAL, COMM, SAL + COMM AS 합계 FROM EMP;
SQL
복사
사원명
급여
커미션
급여 + 커미션
ALLEN
1600
300
1900 ✅
SMITH
800
(NULL)
(NULL) ⚠️
KING
5000
(NULL)
(NULL) ⚠️
⭐ 급여가 분명히 있는데 합계가 NULL이 됩니다. "급여를 못 받은 게 아니라, 계산이 불가능한 것" 입니다.

3) 문자열 결합 — NULL은 무시된다 ⭐

식
결과
'ABC' || NULL
'ABC' (NULL이 무시됨)
NULL || 'ABC'
'ABC'
'A' || NULL || 'B'
'AB'
NULL || NULL
NULL
실습 데이터로 확인 — 선수명과 별명 붙이기
선수명
별명
선수명 || '(' || 별명 || ')'
김철수
슈퍼맨
김철수(슈퍼맨) ✅
이영희
(NULL)
이영희() ⚠️ — 별명만 빠지고 괄호는 남는다
⚠️ 별명이 NULL이면 괄호만 덩그러니 남습니다. 산술 연산처럼 전체가 NULL이 되지는 않습니다.

4) 비교 연산 — NULL은 참도 거짓도 아니다 ⭐⭐

식
결과
설명
NULL = NULL
UNKNOWN
"모르는 값"과 "모르는 값"이 같은지 알 수 없음
NULL <> NULL
UNKNOWN
다른지도 알 수 없음
NULL = 100
UNKNOWN
비교 자체가 불가능
NULL > 100
UNKNOWN
⭐ 핵심: WHERE 절은 결과가 TRUE인 행만 통과시킵니다. UNKNOWN은 TRUE가 아니므로 모든 행이 걸러집니다.

3. NULL은 IS NULL 로 확인한다

1) 올바른 문법

목적
❌ 틀린 문법
✅ 올바른 문법
NULL인 행 찾기
WHERE COMM = NULL
WHERE COMM IS NULL
NULL이 아닌 행 찾기
WHERE COMM <> NULL
WHERE COMM IS NOT NULL
-- ❌ 0건 조회됨 (UNKNOWN 이므로 아무 행도 통과 못 함) SELECT ENAME FROM EMP WHERE COMM = NULL; -- ✅ 커미션이 없는 사원이 정상 조회됨 SELECT ENAME FROM EMP WHERE COMM IS NULL;
SQL
복사
결과 비교
조회
결과 건수
WHERE COMM = NULL
0건 ⚠️ (오류는 안 나지만 아무것도 안 나옴)
WHERE COMM IS NULL
10건 ✅
WHERE COMM IS NOT NULL
4건 ✅
⚠️ 가장 무서운 점: = NULL 은 에러가 나지 않습니다. 그냥 조용히 0건을 반환하므로 버그를 알아채기 어렵습니다.

6. 확인 문제

Q1. NULL에 대한 설명으로 옳지 않은 것은? ① 값이 존재하지 않음을 의미한다 ② 숫자 0과 같은 의미이다 ③ 공백 문자와는 다르다 ④ Oracle에서 빈 문자열('')은 NULL로 취급된다
정답 보기
Q2. 다음 연산의 결과를 각각 쓰시오.
#
식
결과
①
100 + NULL
?
②
'ABC' || NULL
?
③
NULL = NULL
?
정답 보기
Q3. 아래 SQL을 실행했을 때 결과는?
SELECT ENAME FROM EMP WHERE COMM = NULL;
SQL
복사
정답 보기