3.3.4.6 NULL 값 조작
NULL
값에 익숙해 질 때까지 놀랄지도 모릅니다. 개념적으로, NULL
은 "존재하지 않는 알 수없는 값"을 의미하고 다른 값과 약간 다르게 처리됩니다.
NULL
을 조사하기 위해 다음과 같이 IS NULL
및 IS NOT NULL
연산자를 사용합니다.
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+
=
, <
또는 <>
등의 산술 비교 연산자를 사용하여 NULL
을 테스트 할 수 없습니다. 이를 직접 확인하기 위해 다음의 쿼리를 실행하려고합니다.
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
NULL
대한 산술 비교 결과도 모두 NULL
이되기 때문에 이러한 비교에서 의미있는 결과를 얻을 수 없습니다.
MySQL은 0
이나 NULL
false를 의미하고 나머지는 모두 true를 의미합니다. boolean 연산의 기본 진리 값은 1
입니다.
NULL
이 이렇게 특별한 방법으로 처리 되었기 때문에 이전 섹션에서 어떤 동물이 더 이상 살아 있지 않은 것인지를 판단하기 위해 death <> NULL
이 아닌 death IS NOT NULL
을 사용하는 것이 필요 이었습니다.
GROUP BY
는 2 개의 NULL
값은 동일한 것으로 간주됩니다.
ORDER BY
를 수행하는 경우 NULL
값은 ORDER BY ... ASC
는 먼저 나타나고 ORDER BY ... DESC
에서는 마지막에 표시됩니다.
NULL
을 작업 할 때 일반적인 실수는 NOT NULL
로 정의 된 컬럼은 0 또는 빈 문자열을 삽입 할 수 없다고 가정하는 것입니다. 이들은 실제로 값이지만 한편 NULL
은 "값이없는"것을 의미합니다. 이것은 다음과 같이 IS [NOT] NULL
을 사용하여 매우 쉽게 테스트 할 수 있습니다.
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 |
+-----------+---------------+------------+----------------+
이와 같이, 0 또는 빈 문자열은 실제로 NOT NULL
이기 때문에 NOT NULL
컬럼에 삽입 할 수 있습니다. 섹션 B.5.5.3 "NULL 값 문제" 를 참조하십시오.