MySQL에서 하나의 매개변수에 여러 개의 ID 또는 값을 전달하려면 FIND_IN_SET() 함수를 사용하면 됩니다. 이 함수는 첫 번째 인자로 전달된 값이 두 번째 인자로 전달된 쉼표로 구분된 문자열 목록에 포함되어 있는지 확인하여, 포함되어 있다면 해당 위치 인덱스를 반환합니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1817
(
EmployeeName varchar(20),
CountryName varchar(20)
);
Query OK, 0 rows affected (0.00 sec)
2. 레코드 삽입
INSERT 명령을 사용하여 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable1817 values('Chris','AUS');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1817 values('David','UK');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1817 values('Bob','US');
Query OK, 1 row affected (0.00 sec)3. 전체 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select * from DemoTable1817;
실행 결과는 다음과 같습니다.
+--------------+-------------+
| EmployeeName | CountryName |
+--------------+-------------+
| Chris | AUS |
| David | UK |
| Bob | US |
+--------------+-------------+
3 rows in set (0.00 sec)
4. 단일 매개변수에 여러 값 전달하기
다음은 FIND_IN_SET()을 활용하여 하나의 조건에 여러 값을 전달하는 쿼리입니다. 국가명이 'US' 또는 'UK'에 해당하는 행만 조회됩니다.
mysql> select * from DemoTable1817
where find_in_set(CountryName,'US,UK');
실행 결과는 다음과 같습니다.
+--------------+-------------+
| EmployeeName | CountryName |
+--------------+-------------+
| David | UK |
| Bob | US |
+--------------+-------------+
2 rows in set (0.00 sec)
FIND_IN_SET() 함수 핵심 정리
FIND_IN_SET(str, strlist) 형태로 사용하며, str이 쉼표로 구분된 문자열 목록 strlist 안에 존재하면 1부터 시작하는 위치를 반환하고, 존재하지 않으면 0을 반환합니다. WHERE 절에서 활용하면 IN 연산자와 유사하게 여러 값을 한 번에 필터링할 수 있습니다. 다만 FIND_IN_SET은 일반적으로 인덱스를 제대로 활용하지 못할 수 있으므로, 대량의 데이터를 다룰 때는 성능 저하 여부를 반드시 확인하는 것이 좋습니다.