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

MySQL에서 열 값을 무작위로 섞는 방법 – ORDER BY RAND() 완벽 가이드

MySQL에서 테이블의 레코드(열 값)를 무작위로 섞으려면 ORDER BY RAND()를 사용하면 됩니다. 이 함수는 각 행에 임의의 난수를 부여한 뒤 그 숫자를 기준으로 정렬하기 때문에, 쿼리를 실행할 때마다 결과 순서가 달라집니다.

1. 샘플 테이블 생성

먼저 실습에 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable1557
-> (
-> SubjectId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> SubjectName varchar(20)
-> );
Query OK, 0 rows affected (0.91 sec)

2. 데이터 삽입

INSERT 명령을 사용해 몇 개의 과목 데이터를 추가합니다.

mysql> insert into DemoTable1557(SubjectName) values('MySQL');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1557(SubjectName) values('MongoDB');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1557(SubjectName) values('Java');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1557(SubjectName) values('C');
Query OK, 1 row affected (0.13 sec)

3. 전체 레코드 조회

SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.

mysql> select * from DemoTable1557;

실행 결과는 다음과 같습니다.

+-----------+-------------+
| SubjectId | SubjectName |
+-----------+-------------+
| 1 | MySQL |
| 2 | MongoDB |
| 3 | Java |
| 4 | C |
+-----------+-------------+
4 rows in set (0.00 sec)

4. ORDER BY RAND()로 레코드 섞기

이제 MySQL에서 레코드를 무작위로 섞는 쿼리를 실행해 보겠습니다.

mysql> select * from DemoTable1557 order by rand();

실행 결과는 다음과 같습니다.

+-----------+-------------+
| SubjectId | SubjectName |
+-----------+-------------+
| 1 | MySQL |
| 3 | Java |
| 2 | MongoDB |
| 4 | C |
+-----------+-------------+
4 rows in set (0.00 sec)

위 결과를 보면 원래 삽입 순서였던 1 → 2 → 3 → 4가 아닌, 1 → 3 → 2 → 4 순서로 출력된 것을 확인할 수 있습니다.

참고 사항

  • RAND()는 쿼리가 실행될 때마다 새로운 난수를 생성하므로, 같은 쿼리를 반복 실행하면 매번 다른 순서의 결과를 얻게 됩니다.
  • 레코드 수가 적은 테이블에는 성능상 문제가 없지만, 대용량 테이블에서는 전체 행을 스캔하고 정렬해야 하므로 속도가 느려질 수 있습니다. 이 경우 인덱스 기반의 대체 방안을 고려하는 것이 좋습니다.
  • 무작위로 섞은 결과 중 일부만 가져오고 싶다면 LIMIT 절과 함께 사용하면 됩니다. 예: SELECT * FROM 테이블명 ORDER BY RAND() LIMIT 3;