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

MySQL 테이블에서 매번 무작위로 다른 행(값) 집합을 조회하는 방법

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 패턴은 테이블에서 임의의 샘플 데이터를 추출할 때 유용하게 활용할 수 있습니다. 다만 테이블의 크기가 매우 큰 경우에는 모든 행에 대해 난수를 생성하고 정렬해야 하므로 성능 저하가 발생할 수 있다는 점을 유의해야 합니다.