MySQL에서 여러 개의 성(LastName) 값을 한 번에 조건으로 지정해 레코드를 조회하려면 IN() 연산자를 사용하는 것이 가장 효율적입니다. IN()은 여러 개의 OR 조건을 간결하게 표현할 수 있어 가독성과 유지보수 측면에서 매우 유용합니다.
이번 글에서는 예제 테이블을 만들고, IN() 연산자를 활용해 특정 성에 해당하는 레코드만 가져오는 과정을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 FirstName과 LastName 컬럼을 가진 테이블을 생성합니다.
mysql> create table DemoTable
(
FirstName varchar(100),
LastName varchar(100)
);
Query OK, 0 rows affected (0.83 sec)2. 샘플 데이터 삽입
INSERT 명령을 사용해 테이블에 여러 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('Adam','Smith');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('John','Doe');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('John','Smith');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Chris','Brown');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('Robert','Brown');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('David','Miller');
Query OK, 1 row affected (0.11 sec)3. 전체 레코드 확인
SELECT 문으로 테이블의 모든 데이터를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-----------+----------+ | FirstName | LastName | +-----------+----------+ | Adam | Smith | | John | Doe | | John | Smith | | Chris | Brown | | Robert | Brown | | David | Miller | +-----------+----------+ 6 rows in set (0.00 sec)
4. IN() 연산자로 조건 조회하기
이제 IN() 연산자를 사용하여 LastName이 'Smith', 'Brown', 'Miller' 중 하나에 해당하는 레코드만 조회해 보겠습니다.
mysql> select *from DemoTable where LastName IN('Smith','Brown','Miller');위 쿼리는 아래와 같은 결과를 반환합니다.
+-----------+----------+ | FirstName | LastName | +-----------+----------+ | Adam | Smith | | John | Smith | | Chris | Brown | | Robert | Brown | | David | Miller | +-----------+----------+ 5 rows in set (0.00 sec)
정리
조회 결과에서 LastName이 'Doe'인 레코드 하나가 제외되고, 나머지 5개의 레코드가 정상적으로 반환된 것을 확인할 수 있습니다. 이처럼 IN() 연산자를 사용하면 WHERE LastName = 'Smith' OR LastName = 'Brown' OR LastName = 'Miller'와 같이 길어질 수 있는 OR 조건문을 한 줄로 간단하게 작성할 수 있습니다.
또한 IN() 내부에는 서브쿼리도 사용할 수 있어, 동적인 조건 목록이 필요한 경우에도 유연하게 활용 가능합니다. 대량의 조건값을 처리할 때는 인덱스와 함께 사용하면 쿼리 성능을 더욱 향상시킬 수 있습니다.