MySQL 저장 프로시저로 난수 5개 생성하기
MySQL에서 난수를 생성하려면 ORDER BY RAND() 함수를 활용하면 됩니다. 이번 글에서는 저장 프로시저 안에서 특정 범위의 값 중 5개를 무작위로 추출하는 방법을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable (Value int);
Query OK, 0 rows affected (0.76 sec)
2단계: 샘플 데이터 삽입
INSERT 명령어를 사용해 테이블에 여러 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(89);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values(98);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable values(78);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(75);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(76);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values(74);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(99);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(101);
Query OK, 1 row affected (0.15 sec)
3단계: 전체 데이터 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+
| Value |
+-------+
| 89 |
| 98 |
| 10 |
| 78 |
| 75 |
| 76 |
| 74 |
| 99 |
| 101 |
+-------+
9 rows in set (0.00 sec)
4단계: 저장 프로시저 생성
다음은 10 이상 100 이하 범위의 값 중에서 5개의 숫자를 무작위로 선택한 뒤, 오름차순으로 정렬하여 슬래시(/) 구분자로 연결해 출력하는 저장 프로시저입니다.
mysql> DELIMITER //
mysql> CREATE PROCEDURE generate_Random5Numbers()
BEGIN
SELECT GROUP_CONCAT(Value SEPARATOR '/')
FROM ( SELECT Value
FROM ( SELECT Value
FROM DemoTable
WHERE Value BETWEEN 10 AND 100
ORDER BY RAND()
LIMIT 5) Ascending_Order
ORDER BY Value) 5Values;
END
//
Query OK, 0 rows affected (0.31 sec)
mysql> DELIMITER ;
5단계: 저장 프로시저 호출
CALL 명령어를 사용해 생성한 저장 프로시저를 실행합니다.
mysql> call generate_Random5Numbers();
실행 결과는 다음과 같습니다.
+-----------------------------------+
| GROUP_CONCAT(Value SEPARATOR '/') |
+-----------------------------------+
| 89/74/78/99/10 |
+-----------------------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.02 sec)
동작 원리 정리
이 프로시저는 세 단계의 서브쿼리로 구성되어 있습니다. 가장 안쪽 쿼리는 BETWEEN 10 AND 100 조건으로 범위 내 값을 필터링하고, ORDER BY RAND()와 LIMIT 5를 통해 무작위로 5개의 행을 추출합니다. 중간 쿼리는 추출된 결과를 오름차순으로 정렬하며, 바깥쪽 쿼리는 GROUP_CONCAT 함수로 값을 하나의 문자열로 합쳐 출력합니다. 참고로 RAND() 함수의 특성상 프로시저를 실행할 때마다 결과 조합은 매번 달라집니다.