SQL 공부 - null

정민주·2026년 2월 26일

SQL

목록 보기
3/3

1. NULL이란 무엇인가?

NULL은 다음을 의미한다.

  • 값이 없음
  • 값이 아직 정해지지 않음
  • 값이 존재하지 않음

중요한 점은

NULL ≠ 0
NULL ≠ '' (빈 문자열)

NULL은 아예 값 자체가 존재하지 않는 상태다.


2. NULL 비교는 = 로 하면 안 된다

가장 많이 하는 실수.

SELECT *
FROM DOCTOR
WHERE TLNO = NULL;

이 조건은 항상 참이 되지 않는다.

NULL은 값이 없기 때문에 = 비교 자체가 성립하지 않는다.

올바른 방법

SELECT *
FROM DOCTOR
WHERE TLNO IS NULL;

NULL이 아닌 경우:

SELECT *
FROM DOCTOR
WHERE TLNO IS NOT NULL;

3. NULL과 연산

NULL이 포함된 연산은 대부분 결과가 NULL이 된다.

SELECT 10 + NULL;   -- 결과: NULL
SELECT NULL * 5;    -- 결과: NULL

값이 없는데 계산할 수 없기 때문이다.


4. 집계 함수와 NULL

집계 함수는 NULL을 자동으로 제외한다.

예시 데이터:

score
100
90
NULL
SELECT AVG(score)
FROM exam;

결과는 95이다.
NULL은 계산에서 제외된다.

COUNT의 차이

SELECT COUNT(*), COUNT(score)
FROM exam;
  • COUNT(*) → 전체 행 개수
  • COUNT(score) → NULL 제외 개수

5. NULL 처리 함수

① IFNULL (MySQL)

SELECT IFNULL(TLNO, '번호없음')
FROM DOCTOR;

NULL이면 '번호없음'으로 바꿔준다.


② COALESCE (표준 SQL)

SELECT COALESCE(TLNO, '번호없음')
FROM DOCTOR;
  • TLNO가 있으면 → 그대로 출력
  • TLNO가 NULL이면 → '전화번호없음' 출력
  • 인자가 여러개여도, 왼쪽 -> 오른쪽 순으로 대체재를 마련해주는 것
SELECT COALESCE(NULL, NULL, 'A', 'B');
-- 결과: A
  • 여러 값 중 NULL이 아닌 첫 번째 값을 반환한다.

6. WHERE 절에서 NULL이 함정인 이유

SELECT *
FROM EMP
WHERE salary > 3000;

salary가 NULL인 행은 비교 자체가 불가능하다.
TRUE도 FALSE도 아닌 UNKNOWN이 된다.

SQL은 3값 논리를 사용한다.

  • TRUE
  • FALSE
  • UNKNOWN

WHERE 절은 TRUE만 통과한다.


7. 정렬에서 NULL

DBMS마다 다르지만, MySQL 기준:

  • ASC → NULL 먼저
  • DESC → NULL 나중

명시적으로 제어하는 방법 (Oracle 등):

SELECT *
FROM EMP
ORDER BY salary DESC NULLS LAST;

8. JOIN에서 NULL 활용

LEFT JOIN에서 자주 발생한다.

SELECT *
FROM A
LEFT JOIN B ON A.id = B.id;

매칭되지 않는 B의 컬럼은 NULL이 된다.

이때 다음 조건을 사용하면:

SELECT *
FROM A
LEFT JOIN B ON A.id = B.id
WHERE B.id IS NULL;

→ A에는 존재하지만 B에는 없는 데이터만 조회할 수 있다.

실무에서 매우 자주 쓰이는 패턴이다.


9. 자주 틀리는 패턴

❌ 잘못된 예

WHERE TLNO <> NULL;

✅ 올바른 예

WHERE TLNO IS NOT NULL;

10. 핵심 요약

  • NULL은 값이 아니다.
  • = 비교 불가 → 반드시 IS NULL 사용.
  • 연산 결과는 대부분 NULL.
  • 집계 함수는 NULL 제외.
  • WHERE는 TRUE만 통과.
  • JOIN에서 NULL은 중요한 필터 조건이 된다.

0개의 댓글