Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL NULL 안전 등호 연산자(<=>)란? 일반 비교 연산자(=)와의 차이점 완벽 정리

MySQL NULL 안전 등호 연산자(<=>)란?

MySQL의 NULL 안전 등호 연산자(NULL-safe equal operator)는 기호 <=>로 표현되며, 표준 SQL의 IS NOT DISTINCT FROM 연산자와 동일한 역할을 합니다. 이 연산자는 = 연산자처럼 두 값이 같은지 비교하지만, 피연산자에 NULL이 포함된 경우 일반 비교 연산자와 전혀 다른 결과를 반환한다는 점이 가장 큰 특징입니다.

NULL 안전 등호 연산자의 동작 방식

<=> 연산자는 NULL을 하나의 비교 가능한 값으로 취급합니다. 따라서 결과는 다음과 같습니다.

  • 두 피연산자가 모두 NULL이면 1(TRUE)을 반환합니다.
  • 피연산자 중 하나만 NULL이면 0(FALSE)을 반환합니다.
  • 둘 다 NULL이 아니면 일반 등호(=) 비교와 동일하게 동작합니다.

일반 비교 연산자(=)와의 차이점

반면 = 연산자는 SQL에서 NULL을 '알 수 없는 값(unknown)'으로 간주하기 때문에, 피연산자 중 하나라도 NULL이면 비교 결과 자체가 NULL이 됩니다. 아래 예제를 통해 두 연산자의 차이를 직접 확인해 보겠습니다.

mysql> Select 50 <=> 50, NULL <=> NULL, 100 <=> NULL;
+-----------+---------------+--------------+
| 50 <=> 50 | NULL <=> NULL | 100 <=> NULL |
+-----------+---------------+--------------+
|         1 |             1 |            0 |
+-----------+---------------+--------------+
1 row in set (0.00 sec)

mysql> Select 50 = 50, NULL = NULL, 100 = NULL;
+---------+-------------+------------+
| 50 = 50 | NULL = NULL | 100 = NULL |
+---------+-------------+------------+
|       1 |        NULL |       NULL |
+---------+-------------+------------+
1 row in set (0.00 sec)

결과 해석

  • 50 <=> 501 : 두 값이 같으므로 참
  • NULL <=> NULL1 : 양쪽 모두 NULL이므로 참 (일반 =에서는 NULL 반환)
  • 100 <=> NULL0 : 한쪽만 NULL이므로 거짓 (일반 =에서는 NULL 반환)

정리 및 활용 팁

<=> 연산자는 NULL이 포함된 비교에서도 항상 명확한 TRUE(1) 또는 FALSE(0)를 보장합니다. 따라서 조인 조건이나 WHERE 절에서 NULL 값까지 정확히 비교해야 할 때, IS NULLOR을 조합한 복잡한 조건문 대신 <=> 하나로 코드를 훨씬 간결하고 안전하게 작성할 수 있습니다.