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

MySQLでテーブルの値からランダムに2件のレコードを取得する方法

MySQLでランダムにレコードを抽出するには、ORDER BY RAND()を使用します。さらに、取得する件数を2件に限定したい場合は、LIMIT 2を組み合わせることで実現できます。

この記事では、実際にテーブルを作成し、ランダムに2つの値を取得する手順を具体的な例とともに解説します。

サンプルテーブルの作成

まず、質問文を格納するテーブルを作成しましょう。

mysql> create table DemoTable1815
    (
    Question text
    );
Query OK, 0 rows affected (0.00 sec)

テストデータの挿入

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

mysql> insert into DemoTable1815 values('What is your name?');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1815 values('What is your college name?');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1815 values('What is your nick name?');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1815 values('What is your enemy name?');
Query OK, 1 row affected (0.00 sec)

登録データの確認

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

mysql> select * from DemoTable1815;

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

+----------------------------+
| Question                   |
+----------------------------+
| What is your name?         |
| What is your college name? |
| What is your nick name?    |
| What is your enemy name?   |
+----------------------------+
4 rows in set (0.00 sec)

ランダムに2件だけ取得するクエリ

いよいよ本題です。レコードをランダムに並べ替え、その中から2件のみを取得するには、以下のようにORDER BY RAND()LIMIT 2を組み合わせます。

mysql> select * from DemoTable1815 order by rand() limit 2;

実行結果は以下のとおりです。実行するたびに選ばれるレコードが変わります。

+----------------------------+
| Question                   |
+----------------------------+
| What is your college name? |
| What is your enemy name?   |
+----------------------------+
2 rows in set (0.00 sec)

ポイント解説

  • ORDER BY RAND(): 各行に対してランダムな値を生成し、その値をもとにソートを行います。これにより、行の順序が毎回ランダムになります。
  • LIMIT 2: ソート後の結果セットから先頭の2件だけを返します。数値を変更すれば、任意の件数を取得できます。

なお、ORDER BY RAND()は全行に対してソート処理を行うため、非常に大きなテーブルではパフォーマンスが低下する場合があります。小規模〜中規模のテーブルでの利用に適しています。

  1. MySQLでテーブルの重複を除いたレコードから平均値を取得するクエリの書き方

    MySQLで平均値を求めるには AVG() 関数を使用します。さらに DISTINCT と組み合わせることで、重複しているレコードを除外した状態で平均を計算することができます。この記事では、実際にサンプルテーブルを作成しながら、個別(ユニーク)なレコードから平均値を取得する方法を解説します。サンプルテーブルの作成まず、以下のクエリでテーブルを作成します。mysql> create table DemoTable1934 ( StudentName varchar(20), StudentMarks int ); Query OK, 0 rows affec

  2. MySQLで値が「0」の場合に別の列から値を取得する方法

    MySQLで値が「0」の場合に別の列から値を取得する方法MySQLでは、IF()関数を使用することで、特定の列の値が「0」だった場合に、別の列の値を代わりに取得できます。条件分岐を1つのクエリ内で簡単に実現できる便利な関数です。IF()関数の基本構文select IF(yourColumnName1=0,yourColumnName2,yourColumnName1) as anyAliasName from yourTableName;この構文では、最初の列の値が「0」であれば2番目の列の値を返し、「0」以外であれば最初の列の値をそのまま返します。サンプルテーブルの作成まず、動作確認用のテー