
摘要:在本教學中,您將學習如何使用 SQL RAND
函數在執行階段產生偽隨機數。
SQL RAND 函數介紹
RAND
函數會產生介於 0 和 1 (含) 之間的偽隨機浮點數。以下說明 RAND
數字的語法:
RAND(seed);
Code language: SQL (Structured Query Language) (sql)
RAND
函數接受一個可選的種子 (seed) 參數,其資料類型為整數。如果您在同一個會話中以相同的種子值呼叫 RAND
函數,該函數將會傳回完全相同的值。若要取得不同的隨機數,您必須指定不同的種子值,或使用不同的會話。
如果您省略種子參數,RAND
函數會在每次函數呼叫時傳回不同的浮點數隨機數。
請注意,某些資料庫系統,例如 PostgreSQL,提供一個名為 RANDOM
的函數,其功能與 RAND
函數相同。
SQL RAND 函數範例
以下範例示範如何產生介於 0 和 1 之間的隨機數。
SELECT RAND();
Code language: SQL (Structured Query Language) (sql)
如果您多次執行此陳述式,將會看到不同的隨機數。
如果您多次執行以下陳述式,它將會產生完全相同的值,因為 RAND
函數使用了相同的種子值。
SELECT RAND(100);
Code language: SQL (Structured Query Language) (sql)
產生指定範圍之間的隨機整數
若要產生範圍 (n, m) 內的隨機整數 R,其中 n <= R < m,您可以結合 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)
以隨機順序查詢資料列
您可以在 ORDER
BY
子句中使用 RAND
函數,以隨機順序擷取資料列,如下所示:
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
表格

以下陳述式會擷取 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
函數,以在執行階段的查詢中產生偽隨機數。