Home [MySQL] == NULL 값 조회 안되는 이슈
Post
Cancel

[MySQL] == NULL 값 조회 안되는 이슈

[MySQL] == NULL 값 조회 안되는 이슈

MySQL 쿼리문을 작성할 때 필드 값이 NULL인 Row를 조회하고 싶을 때가 있다.

근데 아무 생각 없이

1
SELECT * FROM your_table WHERE your_field = NULL

이라고 썼더니 조회가 안된다.

결론부터 이야기하자면

1
SELECT * FROM your_table WHERE your_field IS NULL

NULL은 요런식으로 IS 혹은 IS NOT 문을 사용해서 조회해야한다.

이제부터 그 이유를 알아보자.

MySQL에서 NULL의 의미

NULL은 놓친 알 수 없는 값을 의미한다. 그리고 NULL은 다른 값들과는 다르게 대우된다.

NULL을 테스트 해보기 위해서 IS NULLIS NOT NULL을 아래와 같이 실행해보면

1
2
3
4
5
6
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
|         0 |             1 |
+-----------+---------------+

이렇게 나온다.

아래의 테스트에서 볼 수 있듯이 수학적인 기호 (=, <, <>) 이런 것들은 쓸 수가 없다.

<> 는 not equal을 의미한다.

1
2
3
4
5
6
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
|     NULL |      NULL |     NULL |     NULL |
+----------+-----------+----------+----------+

왜 NULL에는 수학적 기호를 사용하지 못할까?

왜나하면 NULL의 수학적 비교 값은 여전히 NULL이기 때문이다.
이러한 비교를 통해서는 여전히 어떠한 의미있는 값을 얻을 수가 없다.

MySQL에서는 0 혹은 NULL은 false를 의미하고 다른 값들은 true를 의미한다.
boolean 연산에서 기본적인 true 값은 1이다.

일반적인 에러는 NOT NULL인 칼럼에 0 혹은 빈 문자열 ''이 못들어간다고 생각하는데 그렇지 않다. NULL은 값이 없다 라는 의미이긴 하지만 사실 값은 값이다…

1
2
3
4
5
6
mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
|         0 |             1 |          0 |              1 |
+-----------+---------------+------------+----------------+

-> 조금 말이 어렵긴한데,,,(NULL에 대해서는 꽤 많은 문제점들이 시사되고 있다.) 어쨌든 NULL에다가 수학적 비교를 하게 되면 그 값 또한 NULL이 되기 때문에 WHERE 문에서 적용이 안된다. 따라서 IS NULL 혹은 IS NOT NULL 과 같은 구체적인 비교 구문으로 값을 찾아야한다.

원문 참조 : https://dev.mysql.com/doc/refman/8.0/en/working-with-null.html

This post is licensed under CC BY 4.0 by the author.