MySQL에서 특정 열의 값이 NULL인지 NOT NULL인지 확인하려면 IS NOT NULL 연산자를 사용하면 됩니다. 이 연산자는 조건식처럼 동작하며, 값이 NULL이 아니면 1(참), NULL이면 0(거짓)을 반환합니다.
기본 문법
SELECT yourColumnName IS NOT NULL FROM yourTableName;
예제: 테이블 생성
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> CREATE TABLE DemoTable1408
-> (
-> FirstName VARCHAR(30)
-> );
Query OK, 0 rows affected (0.54 sec)데이터 삽입
INSERT 문을 사용해 일반 문자열, 빈 문자열(''), 그리고 NULL 값을 포함한 레코드를 삽입합니다.
mysql> INSERT INTO DemoTable1408 VALUES('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable1408 VALUES('');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable1408 VALUES(NULL);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable1408 VALUES('David');
Query OK, 1 row affected (0.10 sec)전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> SELECT * FROM DemoTable1408;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-----------+ | FirstName | +-----------+ | Chris | | | | NULL | | David | +-----------+ 4 rows in set (0.00 sec)
NULL 여부 확인하기
이제 IS NOT NULL을 사용하여 각 행의 NULL 여부를 확인하는 쿼리입니다.
mysql> SELECT FirstName IS NOT NULL FROM DemoTable1408;
실행 결과는 다음과 같습니다.
+-----------------------+ | FirstName IS NOT NULL | +-----------------------+ | 1 | | 1 | | 0 | | 1 | +-----------------------+ 4 rows in set (0.00 sec)
결과 해석
'Chris', ''(빈 문자열), 'David'는 모두 NULL이 아니므로 1이 반환되었고, 세 번째 행의 NULL 값만 0이 반환된 것을 확인할 수 있습니다.
여기서 주목할 점은 빈 문자열('')은 NULL과 다르다는 것입니다. 빈 문자열은 실제로 값이 존재하는 상태이므로 IS NOT NULL 검사에서 참(1)으로 평가됩니다.
응용: WHERE 절과 함께 사용하기
실무에서는 WHERE 절과 결합하여 NULL이 아닌 행만 조회하는 경우가 많습니다.
-- NULL이 아닌 행만 조회 mysql> SELECT * FROM DemoTable1408 WHERE FirstName IS NOT NULL; -- NULL인 행만 조회 mysql> SELECT * FROM DemoTable1408 WHERE FirstName IS NULL;
이처럼 IS NOT NULL은 SELECT 목록에서 단순히 참/거짓 값을 반환할 수도 있고, WHERE 절에서 데이터를 필터링하는 조건으로도 활용할 수 있습니다.