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

MySQL에서 특정 숫자가 포함된 모든 레코드를 조회하는 방법

MySQL에서 특정 숫자가 포함된 모든 레코드 조회하기

쉼표로 구분된 값이 저장된 컬럼에서 특정 숫자가 포함된 모든 레코드를 조회하려면 concat() 함수와 LIKE 연산자를 함께 사용하면 됩니다.

기본 문법은 다음과 같습니다.

select * from yourTableName where concat(',', yourColumnName, ',') like '%,yourValue,%';

핵심은 컬럼 값의 앞뒤에 쉼표를 붙여 검색 대상 숫자가 정확히 하나의 독립된 값으로 일치하는지 확인하는 것입니다. 이렇게 처리하면 '4'를 검색할 때 '14'나 '41'처럼 다른 숫자에 포함된 경우가 잘못 매칭되는 문제를 방지할 수 있습니다.

예제 테이블 생성

먼저 데모용 테이블을 만들어 보겠습니다.

mysql> create table demo49
-> (
-> id varchar(20),
-> first_name varchar(20)
-> );
Query OK, 0 rows affected (1.45 sec)

데이터 삽입

insert 명령어로 몇 개의 레코드를 추가합니다.

mysql> insert into demo49 values('4,5,6', 'Adam');
Query OK, 1 row affected (0.20 sec)

mysql> insert into demo49 values('5,3,2', 'Mike');
Query OK, 1 row affected (0.19 sec)

mysql> insert into demo49 values('3,4,9', 'Bob');
Query OK, 1 row affected (0.14 sec)

저장된 데이터 확인

select 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select *from demo49;

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

+-------+------------+
| id | first_name |
+-------+------------+
| 4,5,6 | Adam |
| 5,3,2 | Mike |
| 3,4,9 | Bob |
+-------+------------+
3 rows in set (0.00 sec)

특정 숫자가 포함된 레코드 조회

이제 '4'라는 숫자가 포함된 모든 레코드를 조회하는 쿼리입니다.

mysql> select *from demo49 where concat(',', id, ',') like '%,4,%';

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

+-------+------------+
| id | first_name |
+-------+------------+
| 4,5,6 | Adam |
| 3,4,9 | Bob |
+-------+------------+
2 rows in set (0.00 sec)

'4'가 포함된 두 개의 레코드만 정확하게 반환된 것을 확인할 수 있습니다.

참고: FIND_IN_SET() 함수 활용

MySQL에서는 FIND_IN_SET() 함수를 사용해도 동일한 결과를 얻을 수 있으며, 코드가 더 간결하고 가독성이 좋다는 장점이 있습니다.

select * from demo49 where find_in_set('4', id) > 0;

FIND_IN_SET은 쉼표로 구분된 문자열 목록에서 특정 값의 위치를 반환하므로, 값이 존재하는지 여부를 손쉽게 판단할 수 있습니다.

주의: 쉼표로 구분된 값을 하나의 컬럼에 저장하는 방식은 데이터베이스 정규화 원칙에 어긋나며 인덱스 활용에도 제약이 있습니다. 실무에서는 별도의 테이블로 분리하여 관계를 관리하는 것이 권장됩니다.