MySQL에서 NULL의 길이는 0입니다. 즉, NULL은 빈 문자열('')과 달리 어떠한 값도 가지지 않는 특수한 상태이며, LENGTH()나 COUNT() 같은 함수를 적용하면 0 또는 집계되지 않는 결과를 얻게 됩니다. 이번 글에서는 SELECT 문에서 NULL을 다루는 방법을 단계별 예제와 함께 살펴보겠습니다.
1. 테이블 생성하기
먼저 CREATE 명령어를 사용하여 테스트용 테이블을 생성합니다.
mysql> CREATE table NullWIthSelect
-> (
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.62 sec)
테이블이 성공적으로 생성되었습니다.
2. 레코드 삽입하기
이제 INSERT 명령어를 사용해 여러 개의 레코드를 삽입합니다. 일부 레코드에는 아무 값도 넣지 않아(NULL) NULL이 저장되도록 하고, 하나는 빈 문자열('')을 입력합니다.
mysql> INSERT into NullWIthSelect values('John');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT into NullWIthSelect values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT into NullWIthSelect values();
Query OK, 1 row affected (0.18 sec)
mysql> INSERT into NullWIthSelect values('Carol');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT into NullWIthSelect values('');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT into NullWIthSelect values('David');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT into NullWIthSelect values();
Query OK, 1 row affected (0.08 sec)위 예제에서 총 7개의 레코드를 삽입했습니다. 이 중 하나는 빈 문자열(''), 두 개는 NULL 값이며, 나머지 네 개는 실제 이름 값이 들어 있습니다.
3. 전체 레코드 조회하기
SELECT 명령어로 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * from NullWIthSelect;
실행 결과는 다음과 같습니다.
+-------+
| Name |
+-------+
| John |
| Bob |
| NULL |
| Carol |
| |
| David |
| NULL |
+-------+
7 rows in set (0.00 sec)
결과를 보면 세 번째 행과 마지막 행에 NULL이 표시되고, 다섯 번째 행은 빈 문자열임을 알 수 있습니다. 화면상으로는 비슷해 보이지만 NULL과 빈 문자열은 완전히 다른 의미를 가진다는 점에 유의해야 합니다.
4. IS NULL로 NULL 값 조회하기
NULL은 '=' 연산자로 비교할 수 없으므로, 반드시 IS NULL 연산자를 사용해야 합니다. 기본 문법은 다음과 같습니다.
SELECT * from yourTableName where column_name is NULL;
이 쿼리를 적용해 Name 컬럼이 NULL인 레코드를 조회해 보겠습니다.
mysql> SELECT * from NullWIthSelect where Name is NULL;
실행 결과:
+------+
| Name |
+------+
| NULL |
| NULL |
+------+
2 rows in set (0.00 sec)
Name 컬럼이 NULL인 2개의 레코드만 정확히 조회된 것을 확인할 수 있습니다.
5. NULL의 길이 확인하기
앞서 언급했듯이 MySQL에서 NULL의 길이는 0입니다. COUNT() 함수를 사용하면 NULL 값이 집계에 포함되지 않는다는 사실을 직접 확인할 수 있습니다.
mysql> SELECT count(Name) from NullWIthSelect where Name is NULL;
실행 결과:
+-------------+
| count(Name) |
+-------------+
| 0 |
+-------------+
1 row in set (0.04 sec)
COUNT() 함수는 NULL 값을 계산하지 않기 때문에 결과가 0으로 반환됩니다. 만약 빈 문자열('')까지 포함한 개수를 구하고 싶다면 WHERE 절의 조건을 조정하면 됩니다.
마무리
정리하면, MySQL에서 NULL은 '값이 없음'을 의미하는 특수한 상태이며 그 길이는 0입니다. NULL을 조회할 때는 '=' 대신 IS NULL(또는 IS NOT NULL)을 사용해야 하고, COUNT() 같은 집계 함수에서는 NULL이 자동으로 제외된다는 점을 기억하면 데이터 조회 시 혼란을 피할 수 있습니다.