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句で絞り込む方法なども検討するとよいでしょう。
-
MySQLのストアドプロシージャでテーブルのレコードを表示する方法
MySQLでは、ストアドプロシージャ内にSELECT文を組み込むことで、テーブルのレコードを簡単に表示できます。ストアドプロシージャを活用すると、よく使うクエリを再利用可能な形で保存できるため、作業の効率化につながります。ここでは、実際の手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成します。mysql> create table DemoTable1933 ( ClientName varchar(20) ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERT
-
MySQLでカンマ区切りの値から特定の数値を含むレコードをすべて選択する方法
MySQLで特定の数値を含むレコードを抽出するには?カンマ区切りで保存された値の中に、特定の数値が含まれているレコードをすべて取得したい場合は、concat() 関数と LIKE 演算子を組み合わせて使用します。基本の構文は以下のとおりです。select *from yourTableName where concat(,, yourColumnName, ,) like %,yourValue,%;この方法のポイント単純に LIKE %4% とすると、「14」や「40」など意図しない数値までマッチしてしまう可能性があります。そこで、列の値の前後を concat() でカンマで囲むことで、「4