SQL RAND: 実行時にランダムな数値を生成する

SQL RAND function

要約: このチュートリアルでは、実行時に疑似乱数を生成するために SQL RAND 関数を使用する方法を学習します。

SQL RAND 関数の概要

RAND 関数は、0 と 1 (包括的) の間の疑似乱数浮動小数点数を生成します。次に、RAND 関数の構文を示します。

RAND(seed);Code language: SQL (Structured Query Language) (sql)

RAND 関数は、整数のデータ型を使用したオプションの seed 引数を受け付けます。RAND 関数を同じセッション内で同じ seed 値でコールした場合、関数は全く同じ値を返します。異なるランダムな数値を得るには、異なる seed 値を指定するか、別のセッションを使用する必要があります。

seed 引数を省略すると、RAND 関数は関数コール間で浮動小数点ランダム数値を返します。

PostgreSQL などのデータベースシステムでは、RAND 関数と同等の RANDOM という名前の関数が提供されていることに注意してください。

SQL RAND 関数の例

次の例は、0 と 1 の間のランダムな数値を生成する方法を示しています。

SELECT RAND();Code language: SQL (Structured Query Language) (sql)

ステートメントを複数回実行すると、さまざまなランダムな数値が表示されます。

次のステートメントを複数回実行すると、RAND 関数が同じ seed 値を使用するため、全く同じ値が生成されます。

SELECT RAND(100);Code language: SQL (Structured Query Language) (sql)

範囲内のランダムな整数を生成する

範囲 (n,m) で n <= R < m のランダムな整数 R を生成するには、RAND 関数を ROUND 関数と組み合わせて次のように使用します。

ROUND(n + RAND() * (m − n))Code language: SQL (Structured Query Language) (sql)

たとえば、1 と 100 の間のランダムな数値を取得するには、次のステートメントを使用します。

SELECT ROUND(1 + (RAND() * 99)) AS RAND_1_100;Code language: SQL (Structured Query Language) (sql)

ランダムな順序で行を照会する

RAND 関数を ORDER BY 句で使用して、次のようにランダムな順序で行を取得できます。

SELECT * FROM table_name
ORDER BY RAND();Code language: SQL (Structured Query Language) (sql)

行のセットからランダムなサンプルを選択するには、上記のステートメントに LIMIT 句を追加します。次のステートメントは、テーブル内の N 個のランダムな行を取得します。

SELECT * FROM table_name
ORDER BY RAND()
LIMIT N;Code language: SQL (Structured Query Language) (sql)

サンプルデータベースの employees テーブルを見てみましょう。サンプルデータベース

employees_table

次のステートメントは、5 人のランダムな従業員を取得します。

SELECT employee_id, first_name, last_name
FROM employees
ORDER BY RAND()
LIMIT 5;Code language: SQL (Structured Query Language) (sql)
 employee_id | first_name | last_name
-------------+------------+-----------
         113 | Luis       | Popp
         204 | Hermann    | Baer
         179 | Charles    | Johnson
         110 | John       | Chen
         111 | Ismael     | Sciarra
(5 rows)Code language: SQL (Structured Query Language) (sql)

データセットが小さいテーブルからランダムな行を取得するには、この方法を使用する必要があることに注意してください。大きなテーブルの場合は、遅くなります。

このチュートリアルでは、SQL RAND 関数を使用して、実行時にクエリで疑似乱数を生成する方法について学習しました。

このチュートリアルは役に立ちましたか?