MySQL에서 여러 개의 WHERE 조건을 처리하려면 IN() 연산자를 사용하는 것이 가장 효율적입니다. OR 조건을 여러 번 나열하는 대신, 조회하고 싶은 값들을 목록 형태로 전달하면 한 번의 쿼리로 손쉽게 처리할 수 있습니다.
기본 문법
select *from yourTableName where yourColumnName IN(yourValue1,yourValue2,...N);
위 문법처럼 컬럼명 뒤에 IN() 안에 원하는 값들을 쉼표로 구분하여 나열하면, 해당 값들과 일치하는 모든 행이 한 번에 조회됩니다.
1단계: 테이블 생성
먼저 예제로 사용할 테이블을 만들어 보겠습니다.
mysql> create table DemoTable
(
Id int,
Name varchar(100)
);
Query OK, 0 rows affected (0.61 sec)2단계: 데이터 삽입
insert 명령어를 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable values(10,'John'); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable values(59,'Carol'); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(20,'Sam'); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(45,'David'); Query OK, 1 row affected (0.73 sec)
3단계: 전체 레코드 확인
select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과:
+------+-------+ | Id | Name | +------+-------+ | 10 | John | | 59 | Carol | | 20 | Sam | | 45 | David | +------+-------+ 4 rows in set (0.00 sec)
4단계: IN()으로 여러 조건 조회
다음은 IN()을 사용해 여러 WHERE 조건을 구현한 쿼리입니다. Id가 59 또는 45인 레코드만 조회되는 것을 확인할 수 있습니다.
mysql> select *from DemoTable where Id IN(59,45);
출력 결과:
+------+-------+ | Id | Name | +------+-------+ | 59 | Carol | | 45 | David | +------+-------+ 2 rows in set (0.14 sec)
참고 사항
IN()은 내부적으로 OR 조건과 동일하게 동작하지만, 코드가 훨씬 간결하고 가독성이 뛰어납니다. 예를 들어 위 쿼리는 아래와 같이 작성할 수도 있습니다.
select *from DemoTable where Id = 59 OR Id = 45;
또한 NOT IN()을 사용하면 지정한 값들을 제외한 나머지 레코드를 조회할 수 있어, 특정 데이터를 필터링해야 할 때도 유용하게 활용할 수 있습니다.