RAND() 함수로 무작위 데이터 조회하기
MySQL에서 RAND() 함수를 ORDER BY 절과 LIMIT 절과 함께 사용하면, 쿼리를 실행할 때마다 서로 다른 행(row) 또는 값 집합을 무작위로 반환받을 수 있습니다. RAND() 함수는 각 행에 대해 임의의 난수를 생성하고, ORDER BY 절이 이 난수를 기준으로 결과를 정렬한 뒤, LIMIT 절이 지정된 개수만큼만 잘라내어 반환하기 때문입니다.
이를 이해하기 위해 다음과 같은 레코드를 가진 '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)
실행할 때마다 다른 결과 얻기
아래 쿼리는 RAND() 함수를 ORDER BY 절과 LIMIT 절과 함께 사용하여, 실행할 때마다 무작위로 다른 행 집합을 반환합니다.
mysql> Select * from employee ORDER BY RAND() LIMIT 4; +----+-------+--------+ | ID | Name | Salary | +----+-------+--------+ | 5 | Ram | 20000 | | 4 | Aarav | 65000 | | 6 | Mohan | 30000 | | 8 | Vinay | NULL | +----+-------+--------+ 4 rows in set (0.00 sec) mysql> Select * from employee ORDER BY RAND() LIMIT 4; +----+--------+--------+ | ID | Name | Salary | +----+--------+--------+ | 6 | Mohan | 30000 | | 8 | Vinay | NULL | | 2 | Rahul | 20000 | | 1 | Gaurav | 50000 | +----+--------+--------+ 4 rows in set (0.03 sec) mysql> Select * from employee ORDER BY RAND() LIMIT 4; +----+-------+--------+ | ID | Name | Salary | +----+-------+--------+ | 3 | Advik | 25000 | | 8 | Vinay | NULL | | 7 | Aryan | NULL | | 5 | Ram | 20000 | +----+-------+--------+ 4 rows in set (0.00 sec)
위의 세 번의 실행 결과에서 확인할 수 있듯이, 동일한 쿼리를 실행할 때마다 매번 서로 다른 행 집합이 무작위로 반환됩니다. 이처럼 ORDER BY RAND() LIMIT n 패턴은 테이블에서 임의의 샘플 데이터를 추출할 때 유용하게 활용할 수 있습니다. 다만 테이블의 크기가 매우 큰 경우에는 모든 행에 대해 난수를 생성하고 정렬해야 하므로 성능 저하가 발생할 수 있다는 점을 유의해야 합니다.