MySQL에서 IS NULL OR !=1 조건으로 레코드 조회하기
MySQL에서 특정 컬럼의 값이 NULL이거나 특정 값(예: 1)과 다른 레코드만 조회해야 하는 경우가 종종 있습니다. 이럴 때는 WHERE 절에서 IS NULL과 != 연산자를 OR로 결합하여 사용하면 됩니다.
여기서 주의할 점은, NULL 값은 일반적인 비교 연산(!=)으로 비교할 수 없다는 것입니다. NULL과의 비교 결과는 항상 UNKNOWN으로 평가되기 때문에, NULL인 행까지 조회하려면 반드시 IS NULL 조건을 함께 사용해야 합니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(100),
Score int
);
Query OK, 0 rows affected (1.10 sec)2. 레코드 삽입
insert 명령을 사용하여 테이블에 샘플 데이터를 삽입합니다. 이때 Score 컬럼에 의도적으로 NULL 값을 포함시킵니다.
mysql> insert into DemoTable(Name,Score) values('John',45);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Name,Score) values('Chris',null);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Name,Score) values('David',null);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(Name,Score) values('Bob',1);
Query OK, 1 row affected (0.11 sec)3. 전체 레코드 확인
select 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
다음과 같은 결과가 출력됩니다.
+----+-------+-------+ | Id | Name | Score | +----+-------+-------+ | 1 | John | 45 | | 2 | Chris | NULL | | 3 | David | NULL | | 4 | Bob | 1 | +----+-------+-------+ 4 rows in set (0.00 sec)
4. IS NULL OR !=1 조건으로 조회하기
다음은 Score 값이 NULL이거나 1이 아닌 레코드를 표시하는 쿼리입니다.
mysql> select *from DemoTable where Score IS NULL OR Score!=1;
실행 결과는 다음과 같습니다.
+----+-------+-------+ | Id | Name | Score | +----+-------+-------+ | 1 | John | 45 | | 2 | Chris | NULL | | 3 | David | NULL | +----+-------+-------+ 3 rows in set (0.00 sec)
위 결과를 보면 Score가 45인 John과 NULL인 Chris, David는 정상적으로 조회되었고, Score가 1인 Bob만 제외된 것을 확인할 수 있습니다.
만약 Score != 1 조건만 단독으로 사용했다면 어떻게 될까요? NULL은 어떤 값과도 같지 않으면서 동시에 다르지도 않기 때문에, Chris와 David처럼 NULL 값을 가진 행은 결과에 포함되지 않습니다. 따라서 NULL 데이터를 놓치지 않으려면 IS NULL 조건을 반드시 함께 사용해야 한다는 점을 기억하세요.