MySQL에서 IN() 함수를 활용하면 특정 레코드 하나를 제외한 나머지 모든 레코드를 손쉽게 조회할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int,
FirstName varchar(20)
);
Query OK, 0 rows affected (0.57 sec)2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(100,'Larry'); Query OK, 1 row affected (0.31 sec) mysql> insert into DemoTable values(10,'Chris'); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(110,'Robert'); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(90,'David'); Query OK, 1 row affected (0.20 sec)
3. 전체 레코드 확인하기
SELECT 문을 사용해 테이블의 모든 레코드를 먼저 확인해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------+-----------+ | Id | FirstName | +------+-----------+ | 100 | Larry | | 10 | Chris | | 110 | Robert | | 90 | David | +------+-----------+ 4 rows in set (0.00 sec)
4. 특정 레코드 하나 제외하고 조회하기
이제 IN()을 사용하여 특정 레코드(여기서는 Id가 10인 'Chris')를 제외한 나머지 레코드만 조회해 보겠습니다. 제외하려는 값을 뺀 나머지 Id 값들을 IN() 안에 나열하면 됩니다.
mysql> select *from DemoTable where Id IN(110,90,100);
실행 결과는 다음과 같습니다.
+------+-----------+ | Id | FirstName | +------+-----------+ | 100 | Larry | | 110 | Robert | | 90 | David | +------+-----------+ 3 rows in set (0.00 sec)
참고: NOT IN()을 사용한 더 간단한 방법
레코드 수가 많은 경우에는 NOT IN() 연산자를 사용하는 것이 더 효율적입니다. 제외할 값만 지정하면 되기 때문입니다.
mysql> select *from DemoTable where Id NOT IN(10);
이 방법은 동일한 결과를 반환하지만, 대상 테이블의 레코드가 많아도 제외할 값만 명시하면 되므로 코드가 훨씬 간결해집니다.