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

MySQL에서 <> 연산자와 IS NOT NULL의 차이점 완벽 정리

MySQL에서 <>와 NULL 비교 시 주의할 점

MySQL에서 <> 연산자(같지 않음)를 사용하여 NULL 값과 비교하면 결과는 항상 NULL이 반환됩니다. 따라서 WHERE 절에서 이 조건을 사용하면 아무런 행도 조회되지 않습니다.

NULL은 '값이 없음'을 의미하는 특수한 상태이기 때문에, 일반적인 비교 연산자로는 비교 자체가 성립하지 않습니다. 이는 SQL 표준에서 정한 규칙으로, NULL과의 모든 비교 연산(<, >, =, <> 등)의 결과는 TRUE나 FALSE가 아닌 UNKNOWN(NULL)이 됩니다.

비교 예시

다음 예제들을 통해 확인해 보겠습니다.

mysql> select 10 <> NULL;
+------------+
| 10 <> NULL |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)

mysql> select NULL <> NULL;
+--------------+
| NULL <> NULL |
+--------------+
| NULL         |
+--------------+
1 row in set (0.00 sec)

mysql> select 'Chris' <> NULL;
+-----------------+
| 'Chris' <> NULL |
+-----------------+
| NULL            |
+-----------------+
1 row in set (0.00 sec)

mysql> select '' <> NULL;
+------------+
| '' <> NULL |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)

위 결과에서 볼 수 있듯이, 숫자든 문자열이든 빈 문자열('')이든 어떤 값이라도 NULL과 <>로 비교하면 항상 NULL이 반환됩니다.

실습으로 확인하기

1. 테이블 생성

먼저 테스트용 테이블을 생성합니다.

mysql> create table DemoTable846(Value int);
Query OK, 0 rows affected (0.93 sec)

2. 데이터 삽입

INSERT 명령어를 사용하여 NULL 값과 일반 값을 각각 저장합니다.

mysql> insert into DemoTable846 values(NULL);
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable846 values(10);
Query OK, 1 row affected (0.11 sec)

3. 전체 데이터 조회

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable846;

실행 결과는 다음과 같습니다.

+-------+
| Value |
+-------+
| NULL  |
| 10    |
+-------+
2 rows in set (0.00 sec)

IS NOT NULL vs <> 연산자 결과 비교

IS NOT NULL 사용 시

IS NOT NULL 연산자를 사용하면 NULL이 아닌 값만 정확하게 조회됩니다.

mysql> select *from DemoTable846 where Value IS NOT NULL;

결과:

+-------+
| Value |
+-------+
| 10    |
+-------+
1 row in set (0.00 sec)

<> 연산자 사용 시

반면 <> 연산자로 NULL과 비교하면, 앞서 설명했듯이 모든 비교 결과가 NULL(UNKNOWN)이 되어 조건을 만족하는 행이 하나도 없습니다.

mysql> select *from DemoTable846 where Value <> NULL;
Empty set (0.00 sec)

정리

  • <> NULL: 항상 NULL(UNKNOWN)을 반환하므로 WHERE 절에서 사용하면 아무 결과도 나오지 않습니다.
  • IS NOT NULL: NULL 여부를 판별하는 전용 연산자로, NULL이 아닌 행만 정확히 필터링합니다.

따라서 NULL 값을 제외하고 데이터를 조회하고 싶다면 반드시 IS NOT NULL을 사용해야 하며, <> NULL이나 != NULL 같은 표현은 절대 사용해서는 안 됩니다. 이것은 초급 개발자들이 자주 저지르는 실수 중 하나이므로 꼭 기억해 두세요.