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

MySQLでクエリ結果をランダムに並べ替え、ランダムな行を選択する方法

MySQLでクエリの結果をランダムに並べ替えたい場合は、ORDER BY RAND() を使用します。WHERE句で絞り込んだ結果に対してランダムな順序を適用し、LIMIT句と組み合わせることで、指定した件数の行をランダムに取得できます。

基本構文

select * from DemoTable1559 where yourColumnName IN(yourValue1,yourValue2,....N) order by rand() limit yourLimitValue;

サンプルテーブルの作成

まずは動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable1559
-> (
-> EmployeeId int,
-> EmployeeName varchar(20),
-> EmployeeAge int
-> );
Query OK, 0 rows affected (1.22 sec)

レコードの挿入

insertコマンドを使って、いくつかのレコードを登録します。

mysql> insert into DemoTable1559 values(101,'Bob',28);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1559 values(102,'Robert',26);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1559 values(103,'Sam',25);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1559 values(104,'Mike',29);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1559 values(105,'John',34);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1559 values(106,'Carol',31);
Query OK, 1 row affected (0.19 sec)

テーブルの内容を確認する

select文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable1559;

以下のような出力が得られます。

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| 101 | Bob | 28 |
| 102 | Robert | 26 |
| 103 | Sam | 25 |
| 104 | Mike | 29 |
| 105 | John | 34 |
| 106 | Carol | 31 |
+------------+--------------+-------------+
6 rows in set (0.00 sec)

ランダムに行を選択するクエリ

以下のクエリでは、EmployeeIdが「101」「103」「106」の行を対象に、結果をランダムな順序で並べ替え、最大3件を取得しています。

mysql> select * from DemoTable1559 where EmployeeId IN(101,103,106) order by rand() limit 3;

実行すると、次のようにランダムな順序で結果が返されます。なお、実行するたびに表示される順序は変わります。

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| 101 | Bob | 28 |
| 103 | Sam | 25 |
| 106 | Carol | 31 |
+------------+--------------+-------------+
3 rows in set (0.00 sec)

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

ORDER BY RAND() は記述がシンプルで便利な一方、テーブル内のすべての行に対して乱数を計算し、その値をもとにソートを行うため、大規模なテーブルでは処理速度が低下しやすいという特徴があります。数百万件規模のテーブルからランダムにデータを抽出したい場合は、主キーの範囲からランダムな値を生成して取得する方法や、アプリケーション側でランダム化を行う方法なども併せて検討するとよいでしょう。

  1. MySQLで再帰的なSELECTクエリを実行する方法【初心者向けに具体例つきで解説】

    MySQLでは、ユーザー定義変数(セッション変数)を活用することで、再帰的なSELECTクエリを実現できます。本記事では、実際にテーブルを作成し、データを挿入したうえで、再帰的なSELECTの具体的な書き方を順を追って解説します。 1. サンプルテーブルの作成 まず、再帰的なSELECTを試すためのサンプルテーブルを作成します。テーブルの作成にはCREATEコマンドを使用します。 mysql> CREATE table tblSelectDemo - > ( - > id int, - > name varchar(100) - > );

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

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