MySQL에서 목록에 포함된 일부 ID 레코드를 제외한 나머지 데이터만 조회하려면 NOT IN() 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 NOT IN()의 사용법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 간단한 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int
);
Query OK, 0 rows affected (0.64 sec)2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 테이블에 여러 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(1); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(2); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(3); Query OK, 1 row affected (0.22 sec) mysql> insert into DemoTable values(4); Query OK, 1 row affected (0.41 sec) mysql> insert into DemoTable values(5); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable values(6); Query OK, 1 row affected (0.12 sec)
3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------+ | Id | +------+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | +------+ 6 rows in set (0.00 sec)
4. NOT IN()으로 특정 레코드 제외하기
이제 NOT IN() 연산자를 사용하여 ID가 1, 3, 4, 6인 레코드를 제외한 나머지 데이터만 조회해 보겠습니다.
mysql> select *from DemoTable where Id NOT IN(1,4,6,3);
실행 결과는 다음과 같습니다.
+------+ | Id | +------+ | 2 | | 5 | +------+ 2 rows in set (0.00 sec)
결과를 보면 지정한 ID(1, 3, 4, 6)에 해당하는 레코드는 제외되고, ID 2와 5인 레코드만 반환된 것을 확인할 수 있습니다.
참고 사항
NOT IN()은 제외할 값의 목록이 명확할 때 유용하지만, 목록에 NULL 값이 포함되면 의도치 않게 빈 결과를 반환할 수 있으므로 주의해야 합니다. 또한 대량의 데이터를 다룰 때는 NOT EXISTS나 LEFT JOIN 방식이 더 나은 성능을 제공할 수 있습니다.