MySQL에서 쉼표로 구분된 값의 레코드 조회하기
컬럼에 'AUS,UK'처럼 쉼표로 구분된 여러 값이 하나의 문자열로 저장되어 있을 때는 MySQL의 IN() 대신 FIND_IN_SET() 함수를 사용해야 합니다. IN()은 개별 값들의 목록과 비교하는 용도이므로, 하나의 문자열 내부에 포함된 특정 값을 찾는 데는 적합하지 않습니다. 반면 FIND_IN_SET()은 쉼표로 구분된 문자열 안에서 원하는 값의 위치를 찾아주기 때문에 이런 경우에 정확한 결과를 얻을 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1423
-> (
-> CountryName varchar(100)
-> );
Query OK, 0 rows affected (0.51 sec)
샘플 데이터 삽입
insert 문을 사용하여 테이블에 레코드를 몇 개 추가합니다.
mysql> insert into DemoTable1423 values('AUS,UK');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable1423 values('US');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1423 values('AUS,UK,US');
Query OK, 1 row affected (0.13 sec)저장된 데이터 확인
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1423;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-------------+
| CountryName |
+-------------+
| AUS,UK |
| US |
| AUS,UK,US |
+-------------+
3 rows in set (0.00 sec)
FIND_IN_SET()으로 레코드 조회
이제 FIND_IN_SET()을 사용하여 'US'가 포함된 레코드를 가져오는 쿼리입니다.
mysql> select * from DemoTable1423 where find_in_set('US',CountryName);실행 결과는 다음과 같습니다.
+-------------+
| CountryName |
+-------------+
| US |
| AUS,UK,US |
+-------------+
2 rows in set (0.00 sec)
결과를 보면 'US'만 저장된 행과 'AUS,UK,US'처럼 쉼표로 구분된 값 중 일부로 'US'를 포함하는 행이 모두 정상적으로 조회된 것을 확인할 수 있습니다. 이처럼 FIND_IN_SET()은 쉼표로 구분된 문자열 데이터에서 특정 값을 검색할 때 유용하게 활용됩니다.