NULL 조회에 비교 연산자(=)를 사용할 수 없는 이유
MySQL에서 =(비교 연산자)를 사용해 NULL 값을 조회할 수 없는 이유는, NULL은 값(value)이 아니기 때문입니다. NULL은 '값이 존재하지 않음' 또는 '알 수 없음'을 의미하는 특수한 상태일 뿐, 실제 데이터 값이 아닙니다. 따라서 일반적인 값 비교 방식으로는 NULL과 비교할 수 없습니다.
테이블에서 NULL이 포함된 행을 가져오려면 반드시 IS NULL 연산자를 사용해야 합니다. 아래 예제는 'employee' 테이블의 데이터를 통해 이를 보여줍니다.
예제: IS NULL 연산자 사용
mysql> Select * from Employee WHERE Salary IS NULL; +----+-------+--------+ | ID | Name | Salary | +----+-------+--------+ | 7 | Aryan | NULL | | 8 | Vinay | NULL | +----+-------+--------+ 2 rows in set (0.00 sec)
위 쿼리는 IS NULL 연산자를 사용하여 Salary 열이 NULL인 행들을 정상적으로 반환합니다.
예제: 비교 연산자(=) 사용 시 문제점
mysql> Select * from employee where salary = NULL; Empty set (0.00 sec)
반면 위 쿼리는 = 비교 연산자를 사용했기 때문에 결과가 없는 빈 집합(Empty set)을 반환합니다. 그 이유는 앞서 설명했듯이 NULL은 값이 아니므로 등호(=)로 비교할 수 없기 때문입니다.
정리
NULL 여부를 확인할 때는 다음 규칙을 기억하세요:
- IS NULL: 값이 NULL인 행을 조회할 때 사용
- IS NOT NULL: 값이 NULL이 아닌 행을 조회할 때 사용
- = NULL 또는 != NULL: 항상 빈 결과를 반환하므로 절대 사용 금지