MySQL에서 NULL 레코드를 조회하려면 IS NULL을 사용하고, 특정 값을 제외하려면 != 연산자를 사용하면 됩니다. !=는 <> 연산자의 별칭(alias)으로, 두 연산자는 완전히 동일하게 동작합니다.
테이블 생성하기
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
PlayerName varchar(40)
);
Query OK, 0 rows affected (0.50 sec)데이터 삽입하기
INSERT 명령을 사용하여 테이블에 여러 레코드를 삽입합니다. 이때 의도적으로 NULL 값도 함께 넣어 두겠습니다.
mysql> insert into DemoTable(PlayerName) values('Adam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(PlayerName) values(NULL);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(PlayerName) values('Sam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(PlayerName) values('Mike');
Query OK, 1 row affected (0.08 sec)전체 레코드 확인하기
SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+------------+ | Id | PlayerName | +----+------------+ | 1 | Adam | | 2 | NULL | | 3 | Sam | | 4 | Mike | +----+------------+ 4 rows in set (0.00 sec)
특정 값 하나를 제외한 NULL 및 NOT NULL 레코드 조회하기
'Sam'이라는 단일 레코드는 제외하면서 나머지 NULL 및 NOT NULL 레코드를 모두 표시하는 쿼리는 다음과 같습니다.
mysql> select *from DemoTable
where PlayerName!='Sam'
or PlayerName IS NULL;실행 결과는 아래와 같습니다.
+----+------------+ | Id | PlayerName | +----+------------+ | 1 | Adam | | 2 | NULL | | 4 | Mike | +----+------------+ 3 rows in set (0.00 sec)
핵심 포인트 정리
여기서 주목할 점은 WHERE 조건에 OR PlayerName IS NULL을 반드시 함께 작성해야 한다는 것입니다. SQL에서 NULL은 비교 연산자(=, !=)로 비교할 수 없기 때문에, PlayerName != 'Sam' 조건만 사용하면 NULL인 행은 결과에서 자동으로 제외됩니다. 따라서 NULL 레코드까지 포함하여 조회하려면 IS NULL 조건을 OR로 결합해 주어야 원하는 결과를 얻을 수 있습니다.