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

MySQLでランダムな行を2件取得する方法:RAND()とLIMITの使い方を解説

MySQLでランダムな行を取得する基本構文

MySQLデータベースからランダムな行を抽出したい場合は、RAND()関数LIMIT句を組み合わせるのが最もシンプルな方法です。以下のように、ORDER BY RAND()で行をランダムに並べ替え、LIMIT 2で先頭の2件だけを取得します。

SELECT * FROM テーブル名 ORDER BY RAND() LIMIT 2;

この構文では、RAND()が各行に対して0以上1未満の乱数を生成し、その値に基づいて結果セットがシャッフルされます。その後、LIMIT句によって指定した件数(ここでは2件)のみが返されます。

サンプルテーブルの作成

まず、動作確認用のテーブルを作成しましょう。IdカラムをAUTO_INCREMENTの主キーとし、顧客名を格納するClientFirstNameカラムを持つテーブルを定義します。

mysql> CREATE TABLE DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ClientFirstName varchar(20)
);
Query OK, 0 rows affected (0.64 sec)

テストデータの挿入

次に、INSERT文を使って複数のレコードを登録します。

mysql> INSERT INTO DemoTable(ClientFirstName) VALUES('Robert');
Query OK, 1 row affected (0.27 sec)
mysql> INSERT INTO DemoTable(ClientFirstName) VALUES('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable(ClientFirstName) VALUES('Jace');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable(ClientFirstName) VALUES('James');
Query OK, 1 row affected (0.32 sec)
mysql> INSERT INTO DemoTable(ClientFirstName) VALUES('David');
Query OK, 1 row affected (0.32 sec)
mysql> INSERT INTO DemoTable(ClientFirstName) VALUES('John');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable(ClientFirstName) VALUES('Mike');
Query OK, 1 row affected (0.14 sec)

登録済みレコードの確認

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

mysql> SELECT * FROM DemoTable;

実行すると、次のような結果が出力されます。

+----+-----------------+
| Id | ClientFirstName |
+----+-----------------+
| 1  | Robert          |
| 2  | Chris           |
| 3  | Jace            |
| 4  | James           |
| 5  | David           |
| 6  | John            |
| 7  | Mike            |
+----+-----------------+
7 rows in set (0.00 sec)

ランダムな行を2件選択するクエリ

それでは、本題である「ランダムな行を2件取得する」クエリを実行してみましょう。

mysql> SELECT * FROM DemoTable ORDER BY RAND() LIMIT 2;

実行結果は以下のとおりです。実行するたびに異なる組み合わせの行が返される点に注目してください。

+----+-----------------+
| Id | ClientFirstName |
+----+-----------------+
| 4  | James           |
| 2  | Chris           |
+----+-----------------+
2 rows in set (0.00 sec)

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

ORDER BY RAND()は非常に便利な一方、テーブル内のすべての行に対して乱数を計算し、並べ替えを行うため、大規模なテーブルではパフォーマンスが低下するというデメリットがあります。数百万件規模のテーブルで頻繁にランダム抽出を行う場合は、あらかじめ連番のIDカラムを用意し、アプリケーション側でランダムなIDを生成してWHERE句で絞り込むなどの代替手法を検討するとよいでしょう。

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

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

  2. MySQLで2つのキーを効率的に検索する方法(OR・UNION活用)

    MySQLでは、複数の条件でデータを検索したい場面が多くあります。本記事では、2つのキー(インデックス付きカラム)を使った検索を効率的に行う方法を解説します。OR演算子を使った基本的な検索方法2つのキーによる検索は、単一のキーに対して十分に最適化された「OR」演算子、または同じく最適化された「AND」演算子を利用することで実現できます。まず、「OR」演算子と組み合わせて2つの異なるキーを検索する方法を見てみましょう。SELECT field1_index, field2_index FROM tableName WHERE field1_index = 1 OR field2_index =