반응형
프로그래밍 언어에서 NULL or None 은 아래와 같은 의미로 사용된다
| 언어 | 표현 | 의미 |
| Python | None | 값이 없음 |
| C | NULL | 포인터가 가리키는 대상이 없음 |
| Java | null | 객체가 존재하지 않음 |
| JavaScript | null | 의도적으로 비어 있는 값 |
SQL 에서도 NULL 은 이와 유사하게 값이 없다 undefined 또는 알 수 없다 unknown 는 의미를 가지지만
SQL 의 NULL 은 다르게 동작하는 중요한 차이점이 하나 있다
⚠️ SQL 에서는 NULL 을 일반적인 값처럼 비교할 수 없다
예를 들어 Python 에서는 None 끼리 직접 비교가 가능하다
a = None
print(a == None) # 출력: True
하지만 SQL 에서는 아래처럼 비교할 경우, 절대 원하는 결과가 나오지 않는다
SELECT * FROM table WHERE col = NULL; -- ❌ 결과 없음
SQL 에서는 NULL = NULL 조차도 TRUE 가 아닌, UNKNOWN 으로 평가되기 때문이다
즉, SQL 에서의 NULL 은 기본적인 비교 연산자 (=, !=, <, >) 로는 절대 비교할 수 없다
✅ SQL 에서 NULL 을 비교하는 올바른 방법
1. SQL 표준 방식
SELECT * FROM table WHERE col IS NULL;
SQL 표준에서는 IS NULL 을 사용해 NULL 값을 비교한다
col 값이 NULL 인 행만 필터링한다
2. MySQL 전용 방식: <=> (NULL-safe Equal)
SELECT NULL = NULL; -- 결과: NULL (비교 불가)
SELECT NULL <=> NULL; -- 결과: TRUE (정확히 비교됨)
<=> 는 MySQL에서만 제공되는 특수한 비교 연산자로, NULL 값을 정확하게 비교할 수 있는 유일한 방법이다
일반적인 비교 연산자 = 를 사용할 경우 NULL = NULL 은 UNKNOWN 으로 평가되어 결과가 나오지 않지만
<=> 을 사용하면 NULL 값끼리도 동등한 값으로 인식하여 비교가 가능하다
SELECT * FROM table WHERE col <=> NULL;
col 에 NULL 이 있는 행을 찾고 싶을 때는 이렇게 사용하면 된다
NULL 비교 방식 정리
| 비교 방식 | 설명 | 결과 |
| col = NULL | ❌ SQL 표준에서 비교 불가 | 오류 없음, 결과 없음 |
| col IS NULL | ✅ SQL 표준, 가장 일반적인 방식 | col 이 NULL 인 행 조회 |
| col <=> NULL | ✅ MySQL 전용 연산자 (NULL-safe Equal) | col 이 NULL 인 행 조회 |
마무리 Tip
- 표준 SQL 을 사용하는 경우에는 IS NULL, IS NOT NULL 을 사용하면 된다
- MySQL 을 쓴다면 <=> 도 적극적으로 활용하면 좋다
특히 동적 비교나 조건문에서 NULL 이 변수로 들어올 수 있는 경우 유용하다
반응형
'TIL > 용어' 카테고리의 다른 글
| [TIL] Auto Scaling 개념과 SLA 간단 정리 (4) | 2025.07.02 |
|---|---|
| [TIL] 딥러닝과 스마트 인프라 (0) | 2025.06.26 |
| [TIL] Delete/ Truncate/ Drop 차이 w/ MySQL (1) | 2025.06.18 |
| [TIL] False Positive/ False Negative (1) | 2025.06.17 |
| Servlet 서블릿 (1) | 2025.02.13 |