MySQL에서 테이블의 데이터를 조회할 때 ORDER BY RAND() 절과 LIMIT를 함께 사용하면 임의의(랜덤한) 행을 손쉽게 선택할 수 있습니다. 이번 글에서는 예제를 통해 MySQL 데이터베이스에서 무작위 항목 하나를 가져오는 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName varchar(100),
ClientAge int
);
Query OK, 0 rows affected (0.92 sec)AUTO_INCREMENT로 설정된 Id 컬럼이 기본 키 역할을 하며, 고객 이름(ClientName)과 나이(ClientAge) 정보를 저장하는 구조입니다.
2. 샘플 데이터 삽입
INSERT 명령어를 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable(ClientName,ClientAge) values('Robert',45);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(ClientName,ClientAge) values('Mike',55);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(ClientName,ClientAge) values('Bob',42);
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable(ClientName,ClientAge) values('Sam',47);
Query OK, 1 row affected (0.11 sec)3. 전체 레코드 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+------------+-----------+ | Id | ClientName | ClientAge | +----+------------+-----------+ | 1 | Robert | 45 | | 2 | Mike | 55 | | 3 | Bob | 42 | | 4 | Sam | 47 | +----+------------+-----------+ 4 rows in set (0.00 sec)
총 4개의 레코드가 정상적으로 저장된 것을 확인할 수 있습니다.
4. 임의 항목 선택 쿼리
이제 MySQL 데이터베이스에서 무작위 항목 하나를 선택하는 핵심 쿼리입니다. ORDER BY RAND()로 결과를 랜덤하게 정렬한 뒤, LIMIT 1로 첫 번째 행만 가져오면 됩니다.
mysql> select *from DemoTable order by rand() limit 1;
실행 결과는 다음과 같습니다.
+----+------------+-----------+ | Id | ClientName | ClientAge | +----+------------+-----------+ | 3 | Bob | 42 | +----+------------+-----------+ 1 row in set (0.00 sec)
이 쿼리를 실행할 때마다 매번 다른 행이 무작위로 반환됩니다. 위 예제에서는 이번 실행에서 'Bob'이라는 레코드가 선택되었습니다.
참고 사항
ORDER BY RAND()는 간편하지만, 테이블의 모든 행을 읽은 후 정렬하기 때문에 데이터 양이 많은 대형 테이블에서는 성능 저하가 발생할 수 있습니다. 소규모 테이블에는 적합하며, 대용량 데이터에서는 랜덤 키 컬럼 활용 등 다른 최적화 기법을 고려하는 것이 좋습니다.