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() 함수를 사용해 쉼표로 구분된 문자열 내 특정 값을 더 안전하게 검색하는 방법도 고려해 볼 수 있습니다.