MySQL에서 하나의 쿼리만으로 특정 조건에 맞는 여러 행(row)을 동시에 조회하고 싶다면 IN 연산자를 활용하면 됩니다. IN 연산자는 WHERE 절에서 여러 값을 지정할 수 있게 해주어, OR 조건을 여러 번 나열하는 것보다 훨씬 간결하고 가독성이 좋습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int,
Name varchar(100)
);
Query OK, 0 rows affected (0.60 sec)2. 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 샘플 레코드를 추가합니다.
mysql> insert into DemoTable values(100,'Chris'); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(110,'David'); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(120,'Robert'); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable values(130,'Mike'); Query OK, 1 row affected (0.13 sec)
3. 전체 데이터 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------+--------+ | Id | Name | +------+--------+ | 100 | Chris | | 110 | David | | 120 | Robert | | 130 | Mike | +------+--------+ 4 rows in set (0.00 sec)
4. IN 연산자로 여러 행 조회하기
단일 쿼리에서 원하는 여러 행을 한 번에 가져오려면 WHERE 절에 IN 연산자를 사용합니다. 아래 예제에서는 Id가 100, 120, 130인 행만 조회합니다.
mysql> select *from DemoTable where Id IN(100,120,130);
실행 결과는 다음과 같습니다.
+------+--------+ | Id | Name | +------+--------+ | 100 | Chris | | 120 | Robert | | 130 | Mike | +------+--------+ 3 rows in set (0.02 sec)
정리
IN 연산자를 사용하면 WHERE Id = 100 OR Id = 120 OR Id = 130처럼 조건을 반복해서 작성할 필요 없이, 괄호 안에 원하는 값들을 쉼표로 나열하기만 하면 됩니다. 이 방식은 코드가 짧아질 뿐만 아니라 실행 계획 최적화에도 유리하여 대량의 데이터를 조회할 때 특히 효과적입니다. 참고로 NOT IN을 사용하면 지정한 값들을 제외한 나머지 행을 조회할 수도 있습니다.