MySQL에서 여러 조건을 검색할 때 OR 문을 반복해서 사용하면 쿼리가 길어지고 가독성이 떨어지며, 유지보수도 어려워집니다. 이런 경우 IN() 연산자를 사용하면 훨씬 간결하고 효율적인 쿼리를 작성할 수 있습니다.
실제 예제를 통해 살펴보겠습니다. 먼저 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(40)
);
Query OK, 0 rows affected (0.89 sec)샘플 데이터 삽입
insert 명령을 사용하여 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable(Name) values('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Name) values('Robert');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(Name) values('Mike');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(Name) values('Sam');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable(Name) values('David');
Query OK, 1 row affected (0.14 sec)전체 레코드 조회
select 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+--------+ | Id | Name | +----+--------+ | 1 | Chris | | 2 | Robert | | 3 | Mike | | 4 | Sam | | 5 | David | +----+--------+ 5 rows in set (0.00 sec)
IN()을 사용한 간결한 쿼리
만약 Id가 1, 3, 5인 레코드를 조회하고 싶다면, 일반적으로 다음과 같이 OR 문을 여러 번 사용해야 합니다.
select *from DemoTable where Id = 1 OR Id = 3 OR Id = 5;
하지만 IN()을 사용하면 아래처럼 한 줄로 깔끔하게 작성할 수 있습니다.
mysql> select *from DemoTable where Id IN(1,3,5);
실행 결과는 다음과 같습니다.
+----+-------+ | Id | Name | +----+-------+ | 1 | Chris | | 3 | Mike | | 5 | David | +----+-------+ 3 rows in set (0.00 sec)
정리
IN() 연산자는 지정된 값 목록 중 하나라도 일치하면 해당 행을 반환합니다. OR 문을 반복해서 나열하는 것보다 코드가 짧아지고 읽기 쉬우며, 조건이 많아질수록 그 장점이 더욱 커집니다. 또한 NOT IN()을 활용하면 특정 값을 제외한 조회도 손쉽게 처리할 수 있습니다.