Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL IN() 연산자를 활용해 여러 개의 선택된 행 조회하기

MySQL IN()으로 여러 행 한 번에 조회하기

MySQL에서 특정 조건에 맞는 여러 행을 동시에 조회하고 싶다면 IN() 연산자를 활용하면 됩니다. IN()은 단일 컬럼뿐만 아니라 여러 컬럼을 묶은 튜플 형태로도 비교할 수 있어, 복합 조건 검색에 매우 유용합니다.

이번 글에서는 실제 예제를 통해 IN() 연산자로 원하는 여러 행을 선택적으로 출력하는 방법을 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다. AUTO_INCREMENT 시작 값을 100으로 지정했습니다.

mysql> create table DemoTable1045
(
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   FirstName varchar(100)
)AUTO_INCREMENT=100;
Query OK, 0 rows affected (0.62 sec)

2단계: 데이터 삽입

INSERT 명령어를 사용해 테이블에 샘플 레코드를 추가합니다.

mysql> insert into DemoTable1045(FirstName) values('John');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1045(FirstName) values('Chris');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable1045(FirstName) values('Robert');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1045(FirstName) values('Mike');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1045(FirstName) values('Adam');
Query OK, 1 row affected (0.08 sec)

3단계: 전체 레코드 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable1045;

실행 결과는 다음과 같습니다.

+-----+-----------+
| Id  | FirstName |
+-----+-----------+
| 100 | John      |
| 101 | Chris     |
| 102 | Robert    |
| 103 | Mike      |
| 104 | Adam      |
+-----+-----------+
5 rows in set (0.00 sec)

4단계: IN()으로 선택한 여러 행 조회

이제 핵심인 IN() 쿼리입니다. 아래처럼 (Id, FirstName) 튜플 쌍을 괄호로 묶어 나열하면, 해당 조건과 정확히 일치하는 여러 행을 한 번에 가져올 수 있습니다.

mysql> select *from DemoTable1045 tbl where(tbl.Id, tbl.FirstName) IN ((101, 'Chris'), (102, 'Robert'), (104,'Adam'));

실행 결과는 다음과 같습니다.

+-----+-----------+
| Id  | FirstName |
+-----+-----------+
| 101 | Chris     |
| 102 | Robert    |
| 104 | Adam      |
+-----+-----------+
3 rows in set (0.05 sec)

정리 및 참고 사항

위 결과에서 볼 수 있듯이, Id가 101, 102, 104이면서 동시에 이름이 각각 일치하는 3개의 행만 정확히 반환되었습니다. 만약 Id와 FirstName 중 하나라도 일치하지 않으면 해당 행은 결과에서 제외됩니다.

이 방식은 OR 조건을 여러 번 나열하는 것보다 코드가 간결하고 가독성이 좋으며, 두 개 이상의 컬럼 값을 동시에 비교해야 하는 경우 특히 유용합니다. 다만 대량의 값 목록을 IN()에 넣을 경우 성능에 영향을 줄 수 있으므로, 필요한 값의 개수가 많다면 임시 테이블과 JOIN을 활용하는 방법도 고려해 보세요.