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 값 문제" 를 참조하십시오.