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

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

MySQLデータベースからランダムにレコードを1件(または複数件)取得したい場合、ORDER BY RAND()LIMIT を組み合わせるのが最もシンプルな方法です。この記事では、実際のテーブル作成からランダム抽出までの手順を、実行例とともにわかりやすく解説します。

1. サンプルテーブルを作成する

まずは動作確認用のテーブルを作成しましょう。ここでは学生情報を管理するテーブルを定義します。

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

StudentId は自動採番(AUTO_INCREMENT)の主キー、StudentName は学生名を格納する可変長文字列カラムです。

2. テーブルにレコードを挿入する

次に、INSERT文を使ってサンプルデータを登録します。

mysql> insert into DemoTable1581(StudentName) values('Chris');
Query OK, 1 row affected (0.41 sec)
mysql> insert into DemoTable1581(StudentName) values('Bob');
Query OK, 1 row affected (1.58 sec)
mysql> insert into DemoTable1581(StudentName) values('Sam');
Query OK, 1 row affected (2.11 sec)
mysql> insert into DemoTable1581(StudentName) values('Mike');
Query OK, 1 row affected (0.55 sec)
mysql> insert into DemoTable1581(StudentName) values('Carol');
Query OK, 1 row affected (0.16 sec)

3. 登録されたレコードを確認する

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

mysql> select * from DemoTable1581;

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

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

4. ランダムなレコードを1件取得するクエリ

いよいよ本題です。MySQLからランダムなレコードを選択するには、以下のように ORDER BY RAND() で行をシャッフルし、LIMIT 1 で先頭の1件だけを取得します。

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

実行結果の例は次の通りです。実行するたびに異なるレコードが返されます。

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|         4 | Mike        |
+-----------+-------------+
1 row in set (0.07 sec)

補足:複数件のランダム取得とパフォーマンスについて

LIMIT 1 の数値を変更すれば、ランダムなレコードを複数件取得することも可能です。例えば LIMIT 3 と指定すると、ランダムに選ばれた3件が返されます。

ただし注意点として、ORDER BY RAND() はテーブル内の全行に対して乱数を生成してソートするため、レコード数が非常に多いテーブルではパフォーマンスが低下します。大規模なテーブルの場合は、あらかじめIDの最大値・最小値を取得してアプリケーション側で乱数を生成する方法や、ランダムなオフセットを利用する方法なども検討すると良いでしょう。

  1. MySQLであるデータベースから別のデータベースへテーブルをコピーする方法

    MySQLでは、INSERT INTO ... SELECT構文を使うことで、あるデータベースのテーブルデータを別のデータベースへ簡単にコピーできます。 テーブルをコピーする基本構文 別のデータベースへテーブルをコピーする際の基本的な構文は以下の通りです。 INSERT INTO コピー先データベース名.テーブル名 SELECT * FROM コピー元データベース名.テーブル名; それでは、実際のコマンド例を使いながら手順を詳しく見ていきましょう。 ステップ1:コピー元のテーブルを作成する まず、CREATEコマンドを使って「business」データベース内に新しいテーブルを作成します。

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected