MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでランダムなレコードを取得する方法:RAND()関数の使い方を徹底解説

MySQLのテーブルからランダムなレコードを取得したい場合、rand()関数を使うのが最も簡単な方法です。ORDER BY rand()LIMITを組み合わせることで、テーブル内の行をランダムに並べ替え、その中から任意の件数だけ抽出できます。

基本構文

ランダムな結果を1件だけ取得する場合の基本構文は以下の通りです。

select *from yourTableName order by rand() limit 1;

この構文では、まずrand()関数によって全行がランダムな順序で並べ替えられ、その後limit 1によって先頭の1行だけが返されます。limitの数値を変更すれば、複数件のランダムなレコードを取得することも可能です。

動作確認用テーブルの作成

それでは、実際に構文を理解するためにテーブルを作成してみましょう。テーブル作成のクエリは次の通りです。

mysql> create table selectRandomRecord
    -> (
    -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentName varchar(20)
    -> );
Query OK, 0 rows affected (0.53 sec)

このテーブルには、自動採番される「StudentId」と学生名を格納する「StudentName」の2つのカラムがあります。

テストデータの挿入

次に、insertコマンドを使っていくつかのレコードを挿入します。

mysql> insert into selectRandomRecord(StudentName) values('John');
Query OK, 1 row affected (0.17 sec)
mysql> insert into selectRandomRecord(StudentName) values('Carol');
Query OK, 1 row affected (0.14 sec)
mysql> insert into selectRandomRecord(StudentName) values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into selectRandomRecord(StudentName) values('Sam');
Query OK, 1 row affected (0.15 sec)
mysql> insert into selectRandomRecord(StudentName) values('Mike');
Query OK, 1 row affected (0.16 sec)
mysql> insert into selectRandomRecord(StudentName) values('Robert');
Query OK, 1 row affected (0.20 sec)

登録データの確認

select文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。

mysql> select *from selectRandomRecord;

実行結果は以下の通りです。

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1         | John        |
| 2         | Carol       |
| 3         | Bob         |
| 4         | Sam         |
| 5         | Mike        |
| 6         | Robert      |
+-----------+-------------+
6 rows in set (0.00 sec)

6件のレコードが正しく登録されていることがわかります。

RAND()関数でランダムなレコードを取得する

ここからが本題です。MySQLからランダムな結果を取得するクエリは以下の通りです。

mysql> select *from selectRandomRecord order by rand() limit 1;

実行結果は以下のようになります。

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 3         | Bob         |
+-----------+-------------+
1 row in set (0.00 sec)

今回は「Bob」のレコードがランダムに選ばれました。

同じクエリを再実行すると結果は変わる

同じクエリをもう一度実行すると、別のランダムな値が返されることを確認できます。

mysql> select *from selectRandomRecord order by rand() limit 1;

実行結果:

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 5         | Mike        |
+-----------+-------------+
1 row in set (0.00 sec)

今度は「Mike」が選ばれました。このように、実行するたびに異なるレコードが返されるのがorder by rand()の特徴です。

注意点:パフォーマンスについて

order by rand()は手軽で便利な一方、大きなテーブルに対しては注意が必要です。この方法では全行に対して乱数を計算し、すべての行を並べ替えてから結果を返すため、レコード数が多いテーブルでは処理が遅くなる傾向があります。小規模〜中規模のテーブルであれば問題ありませんが、大量のデータを扱う場合は、事前に最大IDを取得してランダムなIDを生成するなど、別の手法を検討するとよいでしょう。

  1. MySQLでランダムなレコードを取得する方法|ORDER BY RAND()の使い方を解説

    MySQLデータベースからランダムにレコードを1件(または複数件)取得したい場合、ORDER BY RAND() と LIMIT を組み合わせるのが最もシンプルな方法です。この記事では、実際のテーブル作成からランダム抽出までの手順を、実行例とともにわかりやすく解説します。1. サンプルテーブルを作成するまずは動作確認用のテーブルを作成しましょう。ここでは学生情報を管理するテーブルを定義します。mysql> create table DemoTable1581    -> (    -> Stude

  2. ソースコードからMySQLをインストールする方法

    本記事では、MySQLをソースコードからインストールする方法について詳しく解説します。 MySQLはソースコードからビルドすることが可能です。この方法の最大の利点は、ビルドパラメータ、コンパイラの最適化設定、インストール先の場所などをユーザーが自由にカスタマイズできる点にあります。 MySQLが動作する対応システムの一覧は、以下の公式ページで確認できます。 https://www.mysql.com/support/supportedplatforms/database.html ソースからインストールする前に確認すべきこと ソースからのインストール作業を始める前に、まずOracleが対象プ