MySQL에서 ORDER BY 절과 함께 RAND() 함수를 사용하면 결과 집합의 행들이 섞여서(shuffled) 반환됩니다. 즉, 조회 결과가 매번 실행할 때마다 무작위(random) 순서로 출력되는 것입니다.
예제 테이블 준비
동작 방식을 이해하기 위해 다음과 같은 데이터를 가진 'Employee' 테이블을 예로 들어 보겠습니다.
mysql> Select * from employee; +----+--------+--------+ | ID | Name | Salary | +----+--------+--------+ | 1 | Gaurav | 50000 | | 2 | Rahul | 20000 | | 3 | Advik | 25000 | | 4 | Aarav | 65000 | | 5 | Ram | 20000 | | 6 | Mohan | 30000 | | 7 | Aryan | NULL | | 8 | Vinay | NULL | +----+--------+--------+ 8 rows in set (0.00 sec)
ORDER BY RAND() 실행 결과
아래 쿼리처럼 ORDER BY RAND()를 적용하면 결과 집합의 행 순서가 무작위로 섞여 출력됩니다.
mysql> Select * from Employee ORDER BY RAND(); +----+--------+--------+ | ID | Name | Salary | +----+--------+--------+ | 4 | Aarav | 65000 | | 1 | Gaurav | 50000 | | 3 | Advik | 25000 | | 7 | Aryan | NULL | | 6 | Mohan | 30000 | | 8 | Vinay | NULL | | 5 | Ram | 20000 | | 2 | Rahul | 20000 | +----+--------+--------+ 8 rows in set (0.00 sec)
참고 사항
RAND() 함수는 쿼리를 실행할 때마다 새로운 난수를 생성하기 때문에, 동일한 쿼리를 다시 실행하면 행의 정렬 순서가 달라집니다. 따라서 퀴즈 문항 추천, 랜덤 배너 노출, 샘플 데이터 추출 등 무작위성이 필요한 기능을 구현할 때 유용하게 활용할 수 있습니다. 다만 테이블의 크기가 매우 큰 경우 전체 행에 대해 난수를 계산해야 하므로 성능 저하가 발생할 수 있으며, 이런 경우에는 별도의 랜덤 컬럼을 두거나 다른 최적화 기법을 고려하는 것이 좋습니다.