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

MySQL 테이블에서 중복 없이 무작위로 행 선택하기

MySQL 테이블에서 중복 없이 무작위로 행 선택하기

MySQL 테이블에서 행을 무작위로 선택하려면 ORDER BY RAND()LIMIT을 함께 사용하면 됩니다. 여기에 중복을 제거한 고유한 값만 가져오고 싶다면 DISTINCT 키워드를 추가하면 됩니다.
먼저 예제를 통해 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name varchar(40)
);
Query OK, 0 rows affected (0.54 sec)

1. 샘플 데이터 삽입하기

INSERT 명령으로 테이블에 레코드를 삽입합니다. 이후 DISTINCT의 효과를 확인하기 위해 의도적으로 중복된 이름도 함께 넣겠습니다.

mysql> insert into DemoTable(Name) values('John Doe');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Name) values('Chris Brown');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(Name) values('Adam Smith');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable(Name) values('John Doe');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable(Name) values('John Doe');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable(Name) values('Chris Brown');
Query OK, 1 row affected (0.53 sec)
mysql> insert into DemoTable(Name) values('Adam Smith');
Query OK, 1 row affected (0.12 sec)

2. 전체 레코드 조회하기

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

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

+----+-------------+
| Id | Name |
+----+-------------+
| 1 | John Doe |
| 2 | Chris Brown |
| 3 | Adam Smith |
| 4 | John Doe |
| 5 | John Doe |
| 6 | Chris Brown |
| 7 | Adam Smith |
+----+-------------+
7 rows in set (0.00 sec)

결과를 보면 'John Doe', 'Chris Brown', 'Adam Smith'가 각각 중복되어 저장되어 있는 것을 확인할 수 있습니다.

3. 무작위로 고유한 행 선택하기

테이블에서 중복을 제거하고 고유한 이름을 무작위로 선택하는 쿼리는 다음과 같습니다.

mysql> select distinct Name from DemoTable order by rand() limit 3;

쿼리를 실행할 때마다 결과 순서는 달라지며, 출력 예시는 다음과 같습니다.

+-------------+
| Name |
+-------------+
| Chris Brown |
| John Doe |
| Adam Smith |
+-------------+
3 rows in set (0.00 sec)

핵심 정리

  • DISTINCT : 중복 값을 제거하고 고유한 값만 반환합니다.
  • ORDER BY RAND() : 결과 집합을 무작위 순서로 정렬합니다.
  • LIMIT n : 반환할 행의 개수를 제한합니다.

참고로 ORDER BY RAND()는 전체 테이블을 스캔한 뒤 정렬하기 때문에 대용량 테이블에서는 성능이 저하될 수 있습니다. 따라서 이 방식은 소규모 데이터나 간단한 용도에 적합하며, 대량의 데이터를 다룰 때는 임의의 ID를 생성한 후 조인하는 등의 다른 기법을 고려하는 것이 좋습니다.