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

MySQL에서 쉼표로 구분된 값으로 랜덤 행을 가져오는 방법

MySQL에서 무작위(랜덤)로 행을 조회하려면 ORDER BY RAND() 절을 사용하면 됩니다. 아래 예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 쉼표로 구분된 ID 목록을 저장할 테이블을 만듭니다.

mysql> create table DemoTable1835
    (
    ListOfIds varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

2. 샘플 데이터 삽입

INSERT 문을 사용하여 쉼표로 구분된 값 형태의 레코드를 여러 개 추가합니다.

mysql> insert into DemoTable1835 values('10,20,30');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1835 values('70,80,90');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1835 values('45,67,89');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1835 values('98,96,49');
Query OK, 1 row affected (0.00 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1835;

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

+-----------+
| ListOfIds |
+-----------+
| 10,20,30  |
| 70,80,90  |
| 45,67,89  |
| 98,96,49  |
+-----------+
4 rows in set (0.00 sec)

4. 랜덤 행 조회 쿼리 실행

이제 ORDER BY RAND()를 사용해 행의 순서를 무작위로 섞고, LIMIT로 원하는 개수만큼만 가져오겠습니다. 또한 NOT IN 조건을 추가하여 특정 값이 포함된 행은 제외합니다.

mysql> select * from DemoTable1835
    where ListOfIds NOT IN(10,20,70) order by rand()
    limit 2;

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

+-----------+
| ListOfIds |
+-----------+
| 98,96,49  |
| 45,67,89  |
+-----------+
2 rows in set, 4 warnings (0.00 sec)

핵심 정리

  • ORDER BY RAND(): 결과 집합의 행 순서를 매번 무작위로 섞어 줍니다.
  • LIMIT n: 무작위로 섞인 결과 중 상위 n개의 행만 반환합니다.
  • NOT IN (...): 지정한 값에 해당하는 행을 조회 대상에서 제외합니다.

참고로 ListOfIds 열은 VARCHAR 타입이므로 숫자 목록과 비교하는 과정에서 암시적 형 변환이 발생하며, 이때 위 출력 결과처럼 경고(warnings)가 함께 표시될 수 있습니다. 실무에서는 FIND_IN_SET() 함수를 사용해 쉼표로 구분된 문자열 내 특정 값을 더 안전하게 검색하는 방법도 고려해 볼 수 있습니다.