MySQL에서 IN 연산자처럼 쉼표로 구분된 인수를 다뤄야 할 때는 FIND_IN_SET() 함수를 사용하면 됩니다. 일반적인 IN 연산자는 개별 값을 인수로 받지만, FIND_IN_SET()은 하나의 문자열 안에 쉼표로 구분된 여러 값을 담아 검색할 수 있다는 점이 특징입니다.
이 글에서는 실제 예제를 통해 FIND_IN_SET() 함수의 사용법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable604 (Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Title varchar(100));
Query OK, 0 rows affected (0.51 sec)
2. 레코드 삽입하기
INSERT 명령어를 사용해 테이블에 샘플 데이터를 추가합니다.
mysql> insert into DemoTable604(Title) values('MySQL');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable604(Title) values('C++');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable604(Title) values('MongoDB');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable604(Title) values('Java');
Query OK, 1 row affected (0.14 sec)3. 전체 레코드 조회하기
SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select *from DemoTable604;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+----+---------+
| Id | Title |
+----+---------+
| 1 | MySQL |
| 2 | C++ |
| 3 | MongoDB |
| 4 | Java |
+----+---------+
4 rows in set (0.00 sec)
4. FIND_IN_SET()으로 쉼표 구분 인수 검색하기
이제 FIND_IN_SET() 함수를 활용해 쉼표로 구분된 값 목록에서 조건에 맞는 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable604 where find_in_set(Title,'C++,MongoDB');
실행 결과는 다음과 같습니다.
+----+---------+
| Id | Title |
+----+---------+
| 2 | C++ |
| 3 | MongoDB |
+----+---------+
2 rows in set (0.00 sec)
FIND_IN_SET() 함수의 동작 원리
FIND_IN_SET(문자열, 문자열목록) 형태로 사용하며, 두 번째 인수로 전달된 쉼표 구분 문자열 목록에서 첫 번째 인수가 몇 번째 위치에 있는지 반환합니다. 값이 존재하면 해당 위치(1부터 시작), 존재하지 않으면 0을 반환합니다. 위 예제에서는 'C++'과 'MongoDB'가 목록에 포함되어 있으므로 해당 행만 필터링되어 출력된 것입니다.
이처럼 FIND_IN_SET()을 활용하면 IN 연산자와 유사한 방식으로 쉼표로 구분된 문자열 인수를 손쉽게 처리할 수 있습니다.