MySQL에서 사용되는 <=> 연산자의 용도와 특징을 자세히 살펴보겠습니다.
1. 일반적인 값 비교 (= 연산자와 유사)
<=> 연산자는 = 연산자와 마찬가지로 두 값이 서로 같으면 참(1), 다르면 거짓(0)을 반환합니다. 즉, NULL이 포함되지 않은 일반적인 값 비교에서는 = 연산자와 <=> 연산자가 동일하게 작동합니다.
2. NULL 값 비교 시 나타나는 차이점
두 연산자의 결정적인 차이는 NULL을 처리하는 방식에 있습니다.
- <=> 연산자: 어떤 값과 NULL을 비교하면 0을 반환하고,
NULL <=> NULL처럼 NULL과 NULL을 비교하면 1을 반환합니다. - = 연산자: 어떤 값과 NULL을 비교하면 결과가 항상 NULL이 되며,
NULL = NULL역시 1이 아닌 NULL을 반환합니다.
<=> 연산자 예제
위에서 설명한 두 가지 경우를 확인할 수 있는 쿼리는 다음과 같습니다.
mysql> SELECT 10 <=> 10, NULL <=> NULL, 10 <=> NULL;
실행 결과는 다음과 같습니다.
+-----------+---------------+-------------+ | 10 <=> 10 | NULL <=> NULL | 10 <=> NULL | +-----------+---------------+-------------+ | 1 | 1| 0| +-----------+---------------+-------------+ 1 row in set (0.00 sec)
위 출력 결과를 보면 NULL <=> NULL이 NULL이 아닌 1을 반환하는 것을 확인할 수 있습니다.
= 연산자 예제
이번에는 = 연산자를 사용한 예제입니다. 쿼리는 다음과 같습니다.
mysql> SELECT 10 = 10, NULL = NULL, 10 = NULL;
실행 결과는 다음과 같습니다.
+---------+-------------+-----------+ | 10 = 10 | NULL = NULL | 10 = NULL | +---------+-------------+-----------+ | 1 | NULL | NULL | +---------+-------------+-----------+ 1 row in set (0.00 sec)
반면 = 연산자를 사용한 경우에는 NULL = NULL이 1이 아니라 NULL을 반환하는 것을 볼 수 있습니다.
마무리 정리
<=> 연산자는 흔히 'NULL 안전 동등 연산자(NULL-safe equal operator)'라고 불리며, SQL 표준의 IS NOT DISTINCT FROM과 유사한 기능을 제공합니다. NULL 값이 포함된 데이터를 비교할 때 예측 가능한 결과를 얻고 싶다면 <=> 연산자를 활용하는 것이 좋습니다.