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

MySQLテーブルからランダムなレコードを指定した件数だけ取得する方法

MySQLでテーブルからランダムなレコードを取得したい場合は、RAND()関数を使用します。さらに、取得するレコードの件数を指定するには、LIMIT句を組み合わせます。

SELECT * FROM テーブル名 ORDER BY RAND() LIMIT 取得件数;

サンプルテーブルの作成

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

mysql> CREATE TABLE DemoTable
    -> (
    -> LastName VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.51 sec)

レコードの挿入

INSERT文を使って、テーブルにいくつかのレコードを挿入します。

mysql> INSERT INTO DemoTable VALUES('Brown');
Query OK, 1 row affected (0.20 sec)

mysql> INSERT INTO DemoTable VALUES('Smith');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO DemoTable VALUES('Taylor');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT INTO DemoTable VALUES('Miller');
Query OK, 1 row affected (0.15 sec)

mysql> INSERT INTO DemoTable VALUES('Johnson');
Query OK, 1 row affected (0.20 sec)

登録済みレコードの確認

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

mysql> SELECT * FROM DemoTable;

出力結果

上記のクエリを実行すると、次のような出力が得られます。

+----------+
| LastName |
+----------+
| Brown    |
| Smith    |
| Taylor   |
| Miller   |
| Johnson  |
+----------+
5 rows in set (0.00 sec)

ランダムに4件のレコードを取得するクエリ

以下が、固定数(この例では4件)のランダムなレコードを選択するクエリです。ORDER BY RAND()によって行の並び順がランダム化され、LIMIT 4により先頭の4件だけが返されます。

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

出力結果

このクエリは実行するたびに異なる組み合わせのレコードを返します。以下はその一例です。

+----------+
| LastName |
+----------+
| Brown    |
| Miller   |
| Johnson  |
| Taylor   |
+----------+
4 rows in set (0.03 sec)

補足:パフォーマンスに関する注意点

ORDER BY RAND()はシンプルで便利な方法ですが、テーブル内のすべての行に対して乱数を生成しソートを行うため、大規模なテーブルではパフォーマンスが低下する可能性があります。レコード数が数十万件を超えるようなケースでは、主キーの最大値・最小値から乱数を生成して該当行を取得する方法や、アプリケーション側でランダムなIDのリストを作成してからIN句で絞り込む方法なども検討するとよいでしょう。

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

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

  2. MySQLでカンマ区切りの値から特定の数値を含むレコードをすべて選択する方法

    MySQLで特定の数値を含むレコードを抽出するには?カンマ区切りで保存された値の中に、特定の数値が含まれているレコードをすべて取得したい場合は、concat() 関数と LIKE 演算子を組み合わせて使用します。基本の構文は以下のとおりです。select *from yourTableName where concat(,, yourColumnName, ,) like %,yourValue,%;この方法のポイント単純に LIKE %4% とすると、「14」や「40」など意図しない数値までマッチしてしまう可能性があります。そこで、列の値の前後を concat() でカンマで囲むことで、「4