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

MySQL NOT IN() 연산자로 테이블에서 특정 값 제외하기

MySQL에서 테이블의 데이터를 조회할 때 특정 값을 제외하고 싶다면 NOT IN() 연산자를 사용하면 됩니다. NOT IN()은 WHERE 절과 함께 사용되어 지정한 값 목록에 포함되지 않는 행만 반환합니다.

예제 테이블 생성

먼저 예제로 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable791 (
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   FirstName varchar(100)
);
Query OK, 0 rows affected (0.61 sec)

데이터 삽입

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable791(FirstName) values('Chris');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable791(FirstName) values('Robert');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable791(FirstName) values('David');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable791(FirstName) values('Mike');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable791(FirstName) values('Bob');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable791(FirstName) values('Carol');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable791(FirstName) values('Adam');
Query OK, 1 row affected (0.09 sec)

전체 레코드 확인

SELECT 문을 사용해 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable791;

위 쿼리는 다음과 같은 결과를 출력합니다.

+----+-----------+
| Id | FirstName |
+----+-----------+
| 1  | Chris     |
| 2  | Robert    |
| 3  | David     |
| 4  | Mike      |
| 5  | Bob       |
| 6  | Carol     |
| 7  | Adam      |
+----+-----------+
7 rows in set (0.00 sec)

NOT IN()으로 특정 값 제외하기

이제 NOT IN()을 사용하여 Id가 4, 5, 6인 레코드(Mike, Bob, Carol)를 제외한 나머지 데이터만 조회하는 쿼리입니다.

mysql> select *from DemoTable791 where Id NOT IN(4,5,6);

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

+----+-----------+
| Id | FirstName |
+----+-----------+
| 1  | Chris     |
| 2  | Robert    |
| 3  | David     |
| 7  | Adam      |
+----+-----------+
4 rows in set (0.00 sec)

결과를 보면 Id가 4, 5, 6인 세 개의 레코드가 제외되고 나머지 4개의 레코드만 반환된 것을 확인할 수 있습니다.

참고 사항

NOT IN()은 편리하지만 몇 가지 주의할 점이 있습니다. 제외 목록에 NULL 값이 포함되면 비교 결과가 항상 UNKNOWN이 되어 어떤 행도 반환되지 않을 수 있습니다. 또한 대량의 데이터에서 성능이 중요하다면 LEFT JOIN ... IS NULL 방식이나 NOT EXISTS 서브쿼리를 대안으로 고려하는 것이 좋습니다.