概要:このチュートリアルでは、MySQL でデータベース テーブルからランダムなレコードを選択するさまざまなテクニックを学習します。
MySQL は ORDER BY RAND() を使ってランダムにレコードを選択する
MySQL にはテーブルからランダム行を選択する組み込みステートメントはない。
次のクエリは、データベース テーブルからランダムな行を選択します:
Code language: SQL (Structured Query Language) (sql)
クエリを詳しく調べてみましょう。
ORDER BY
句は、RAND()
関数が生成した乱数によってテーブルのすべての行をソートします。LIMIT
句は、ランダムにソートされた結果セットの最初の行をピックします。データベーステーブルからN
ランダムレコードを選択したい場合、LIMIT
句を次のように変更する必要があります:
Code language: SQL (Structured Query Language) (sql)
サンプルデータベースから次のcustomers
テーブルをご覧ください。
次の例では、customers
テーブルから 5 つのランダムな顧客を選択します。
Code language: SQL (Structured Query Language) (sql)
Try It Out
ランダムなので、異なる結果セットを取得できることに注意してください。 しかし、MySQL はランダムなものを選択するためにテーブル全体をソートしなければならないため、大きなテーブルでは遅くなります。
クエリの速度は、テーブル内の行数にも依存します。 テーブルの行数が多ければ多いほど、各行の乱数を生成するのに時間がかかります。
MySQL select random records using INNER JOIN clause
This technique requires that the table has an auto increment primary key field and there is no gap in the sequence.
次のクエリは、主キー列に基づいて乱数を生成します。
Code language: SQL (Structured Query Language) (sql)
上記のクエリが返す結果セットを使用して、次のようにテーブルを結合できます:
Code language: SQL (Structured Query Language) (sql)
この手法を使用すると、制限を増やすとクエリはランダムに選択した行から始まる連続行のみを取得するので、複数のランダム行を取得するにはクエリを複数回実行する必要があります。
次のクエリは、customers
テーブルからランダムな顧客を返します。
Code language: SQL (Structured Query Language) (sql)
Try It Out
MySQL select random records using variables
テーブルに id
列があり、値が範囲 1..N
内で、範囲に隙間がない場合、次の手法を使用できます:
- 最初に、範囲 1 で乱数選択を行います。.N.
- 次に、乱数に基づいてレコードを選択します。
次のステートメントは、これを達成するのに役立ちます:
Code language: SQL (Structured Query Language) (sql)
ユーザー定義変数は、接続固有であることに注意してください。 これは、このテクニックがコネクションプーリングでは使用できないことを意味します。 さらに、主キーは整数型でなければならず、その値はギャップなしのシーケンスでなければなりません。
このチュートリアルでは、テーブルからランダムにレコードを選択するいくつかのテクニックを紹介しました。
このチュートリアルは役に立ちましたか。