MySQL 리스트 체크

stone tiger·2025년 2월 5일

MySQL

목록 보기
4/11

MySQL에서 리스트(List) 안에 특정 값이 있는지 확인하는 방법은 여러 가지가 있어.
주로 IN(), FIND_IN_SET(), LIKE, JSON_CONTAINS() 등을 사용할 수 있어.


1. IN() 사용 (컬럼 값이 리스트 안에 있는지 확인)

IN()은 특정 값이 여러 값 중 하나와 일치하는지 확인할 때 사용해.

✅ 예제 1: 특정 값이 있는지 확인

SELECT * FROM employees WHERE department IN ('HR', 'IT', 'Finance');
  • department 값이 'HR', 'IT', 'Finance' 중 하나와 일치하면 결과 반환.

2. FIND_IN_SET() 사용 (쉼표(,)로 구분된 문자열에서 특정 값 찾기)

만약 컬럼 값이 쉼표로 구분된 리스트('1,2,3,4') 형태로 저장되어 있다면 FIND_IN_SET()을 사용하면 돼.

✅ 예제 2: 쉼표로 구분된 문자열 안에서 특정 값 찾기

SELECT * FROM users WHERE FIND_IN_SET('admin', roles);
  • roles 컬럼 값이 'user,admin,editor' 같은 경우 admin이 포함되어 있어서 해당 행이 반환됨.

📌 주의할 점:
FIND_IN_SET()인덱스를 사용할 수 없어서 속도가 느릴 수 있음.
데이터가 많다면 JSON 또는 정규화된 테이블 구조를 고려하는 게 좋아.


3. LIKE 사용 (부분 문자열 검색)

리스트 값이 하나의 문자열 안에 존재하는지 확인할 때 LIKE을 사용할 수도 있어.

✅ 예제 3: 특정 값 포함 여부 확인

SELECT * FROM products WHERE tags LIKE '%electronics%';
  • tags 컬럼이 'laptop,electronics,gadgets' 같은 경우 electronics가 포함되어 있어 결과 반환.

📌 주의:

  • LIKE '%값%'문자열 검색이지만 인덱스를 사용할 수 없어 대량 데이터에서 속도가 느릴 수 있음.

4. JSON_CONTAINS() 사용 (JSON 배열에서 특정 값 찾기)

MySQL 5.7 이상에서는 JSON 데이터 타입을 사용해서 JSON_CONTAINS()로 값을 찾을 수 있어.

✅ 예제 4: JSON 배열 안에 특정 값이 있는지 확인

SELECT * FROM orders WHERE JSON_CONTAINS(items, '3', '$');
  • items 컬럼이 ['1', '2', '3', '4'] 같은 JSON 배열일 때 3이 포함되어 있는 행을 반환.

📌 장점:

  • JSON을 사용하면 정규화된 구조를 유지하면서 빠르게 검색 가능.
  • FIND_IN_SET()보다 성능이 더 좋음.

📌 정리

방법사용 예장점단점
IN()col IN ('a', 'b', 'c')빠름, 인덱스 사용 가능정적인 리스트만 가능
FIND_IN_SET()FIND_IN_SET('x', col)간단하게 쉼표(,) 구분 리스트 검색 가능인덱스 사용 불가, 속도 느림
LIKEcol LIKE '%word%'간단한 문자열 검색전체 문자열 검색 시 느림
JSON_CONTAINS()JSON_CONTAINS(col, 'x', '$')JSON 데이터에 적합, 성능 좋음MySQL 5.7 이상 필요

❓ 어떤 상황에서 사용하려고 해?

  • 컬럼 값이 정해진 리스트 안에 있는지 확인? → IN()
  • 쉼표(,)로 구분된 문자열 안에 특정 값이 있는지 확인? → FIND_IN_SET()
  • 특정 단어가 포함된 문자열 검색? → LIKE
  • JSON 형식의 배열에서 특정 값 포함 여부 확인? → JSON_CONTAINS()

0개의 댓글