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

MySQLテーブルからランダムな行を表示する方法(ORDER BY RAND()の使い方)

MySQLのテーブルからランダムに1行だけ取得して表示したい場合には、RAND()関数LIMIT句と組み合わせて使用します。今回は1行だけ取得したいので、「LIMIT 1」と指定します。

まずは動作確認用のサンプルテーブルを作成してみましょう。

サンプルテーブルの作成

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

次に、INSERT文を使ってテーブルにレコードを挿入します。

mysql> insert into DemoTable(Name,Quote) values('Chris','MySQL is a relational database');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(Name,Quote) values('Robert','Java is an Object Oriented Programming Language');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(Name,Quote) values('Mike','C is a Procedural Language');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Name,Quote) values('David','Hibernate and spring is a framework');
Query OK, 1 row affected (0.15 sec)

SELECT文ですべてのレコードを確認しておきましょう。

mysql> select *from DemoTable;

このクエリを実行すると、以下のような結果が出力されます。

+----+--------+-------------------------------------------------+
| Id | Name   | Quote                                           |
+----+--------+-------------------------------------------------+
|  1 | Chris  | MySQL is a relational database                  |
|  2 | Robert | Java is an Object Oriented Programming Language |
|  3 | Mike   | C is a Procedural Language                      |
|  4 | David  | Hibernate and spring is a framework             |
+----+--------+-------------------------------------------------+
4 rows in set (0.00 sec)

ランダムな1行を表示するクエリ

MySQLのテーブルからランダムに行を表示するには、以下のように「order by rand()」「limit 1」を組み合わせたクエリを使用します。

mysql> select Id,Name,Quote from DemoTable order by rand() limit 1;

このクエリを実行すると、以下のようにランダムに選ばれた1行が出力されます(実行するたびに結果が変わります)。

+----+------+----------------------------+
| Id | Name | Quote                      |
+----+------+----------------------------+
|  3 | Mike | C is a Procedural Language |
+----+------+----------------------------+
1 row in set (0.00 sec)

ポイント解説

order by rand()」は、すべての行に対して乱数値を生成し、その値をもとにソートを行います。そこに「limit 1」を付けることで、ソート結果の先頭、つまり完全にランダムに選ばれた1行だけを取得できるという仕組みです。

また、LIMITに指定する数値を変更すれば、ランダムに複数行を取得することも可能です。例えば「limit 3」とすれば、ランダムな3行が返されます。

なお、レコード数が非常に多い大規模なテーブルでは、ORDER BY RAND()はすべての行に対して乱数計算とソートを行うためパフォーマンスが低下しやすい点に注意してください。そのような場合は、IDの範囲からランダムな値を生成して抽出するなど、別の手法を検討するとよいでしょう。

  1. MySQLでテーブルからランダムな行を取得する方法【PREPAREステートメント活用】

    MySQLでテーブルからランダムな行を取得したい場合、PREPARE(プリペアドステートメント)を利用する方法が便利です。この手法では、乱数を使ってオフセット値を動的に生成し、それを組み込んだSQL文を準備・実行します。まずはサンプルとなるテーブルを作成しましょう。 mysql> create table DemoTable(     FirstName varchar(100),     CountryName varchar(100) ); Query OK, 0 rows affected (0.53

  2. MySQLのストアドプロシージャでテーブルのレコードを表示する方法

    MySQLでは、ストアドプロシージャ内にSELECT文を組み込むことで、テーブルのレコードを簡単に表示できます。ストアドプロシージャを活用すると、よく使うクエリを再利用可能な形で保存できるため、作業の効率化につながります。ここでは、実際の手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成します。mysql> create table DemoTable1933 ( ClientName varchar(20) ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERT