Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 특정 레코드를 제외하면서 NULL 값까지 한 번에 조회하는 쿼리 작성법

MySQL에서 NULL인 레코드를 확인하려면 IS NULL 연산자를 사용하고, 특정 레코드를 제외하려면 NOT IN 절을 사용합니다. 흥미로운 점은 이 두 조건을 하나의 쿼리에서 함께 조합할 수 있다는 것입니다.

NOT IN만 단독으로 사용하면 NULL 값이 포함된 행은 비교 결과가 UNKNOWN이 되어 자동으로 제외되어 버립니다. 따라서 NULL 데이터도 함께 조회하려면 OR StudentName IS NULL 조건을 반드시 추가해야 합니다.

예제로 살펴보기

1단계: 테이블 생성

먼저 테이블을 생성합니다.

mysql> create table DemoTable793 (
   StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   StudentName varchar(100)
);
Query OK, 0 rows affected (0.81 sec)

2단계: 데이터 삽입

insert 명령을 사용해 샘플 레코드를 삽입합니다. 여기서는 의도적으로 NULL 값도 하나 넣어 보겠습니다.

mysql> insert into DemoTable793(StudentName) values('Adam');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable793(StudentName) values('Bob');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable793(StudentName) values(null);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable793(StudentName) values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable793(StudentName) values('Robert');
Query OK, 1 row affected (1.03 sec)

3단계: 전체 데이터 확인

select 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable793;

실행 결과는 다음과 같습니다.

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1         | Adam        |
| 2         | Bob         |
| 3         | NULL        |
| 4         | Chris       |
| 5         | Robert      |
+-----------+-------------+
5 rows in set (0.00 sec)

4단계: 특정 레코드를 제외하면서 NULL 값 조회하기

'Chris'라는 레코드는 제외하되, NULL 값은 그대로 표시하는 쿼리입니다. 핵심은 NOT INIS NULLOR로 연결한 부분입니다.

mysql> select *from DemoTable793 where StudentName NOT IN('Chris') OR StudentName IS NULL;

실행 결과는 다음과 같습니다.

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1         | Adam        |
| 2         | Bob         |
| 3         | NULL        |
| 5         | Robert      |
+-----------+-------------+
4 rows in set (0.00 sec)

정리

위 결과를 보면 'Chris'(StudentId 4)는 제외되었지만, NULL 값(StudentId 3)은 정상적으로 조회된 것을 확인할 수 있습니다. 이처럼 NOT IN 절과 IS NULL 조건을 OR 연산자로 결합하면, 원하는 레코드를 걸러내는 동시에 NULL 데이터도 놓치지 않고 한 번의 쿼리로 처리할 수 있습니다.