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を生成するなど、別の手法を検討するとよいでしょう。
-
MySQLでランダムなレコードを取得する方法|ORDER BY RAND()の使い方を解説
MySQLデータベースからランダムにレコードを1件(または複数件)取得したい場合、ORDER BY RAND() と LIMIT を組み合わせるのが最もシンプルな方法です。この記事では、実際のテーブル作成からランダム抽出までの手順を、実行例とともにわかりやすく解説します。1. サンプルテーブルを作成するまずは動作確認用のテーブルを作成しましょう。ここでは学生情報を管理するテーブルを定義します。mysql> create table DemoTable1581 -> ( -> Stude
-
ソースコードからMySQLをインストールする方法
本記事では、MySQLをソースコードからインストールする方法について詳しく解説します。 MySQLはソースコードからビルドすることが可能です。この方法の最大の利点は、ビルドパラメータ、コンパイラの最適化設定、インストール先の場所などをユーザーが自由にカスタマイズできる点にあります。 MySQLが動作する対応システムの一覧は、以下の公式ページで確認できます。 https://www.mysql.com/support/supportedplatforms/database.html ソースからインストールする前に確認すべきこと ソースからのインストール作業を始める前に、まずOracleが対象プ