Функция RAND в SQL может быть вызвана, чтобы произвести случайные числа между 0 и 1
SQL> SELECT RAND( ), RAND( ), RAND( ); +------------------+-----------------+------------------+ | RAND( ) | RAND( ) | RAND( ) | +------------------+-----------------+------------------+ | 0.45464584925645 | 0.1824410643265 | 0.54826780459682 | +------------------+-----------------+------------------+ 1 row in set (0.00 sec)
При вызове с целочисленным аргументом, RAND() использует это значение для инициализации генератора случайных чисел. Каждый раз, когда вы инициализируете генератор с заданным значением, RAND() будет производить повторяющуюся последовательность чисел:
SQL> SELECT RAND(1), RAND( ), RAND( ); +------------------+------------------+------------------+ | RAND(1 ) | RAND( ) | RAND( ) | +------------------+------------------+------------------+ | 0.18109050223705 | 0.75023211143001 | 0.20788908117254 | +------------------+------------------+------------------+ 1 row in set (0.00 sec)
Вы можете использовать ORDER BY RAND() для рандомизации набора строк или значений.
Чтобы понять, функцию ORDER BY RAND(), рассмотрим таблицу EMPLOYEE_TBL, которая содержит следующие записи:
SQL> SELECT * FROM employee_tbl; +----+----------+------------+--------------------+ | id | name | work_date | daily_typing_book | +----+----------+------------+--------------------+ | 1 | Dima | 2017-02-01 | 250 | | 2 | Ruslan | 2017-03-02 | 220 | | 3 | AndreyEx | 2017-01-11 | 170 | | 3 | AndreyEx | 2017-02-02 | 100 | | 4 | Masha | 2017-03-12 | 220 | | 5 | Roma | 2017-06-23 | 300 | | 5 | Roma | 2017-03-12 | 350 | +----+----------+------------+--------------------+ 7 rows in set (0.00 sec)
Теперь, используйте следующие команды:
SQL> SELECT * FROM employee_tbl ORDER BY RAND(); +----+----------+------------+--------------------+ | id | name | work_date | daily_typing_book | +----+----------+------------+--------------------+ | 5 | Roma | 2017-03-12 | 350 | | 2 | Ruslan | 2017-03-02 | 220 | | 3 | AndreyEx | 2017-01-11 | 170 | | 1 | Dima | 2017-02-01 | 250 | | 5 | Roma | 2017-06-23 | 300 | | 3 | AndreyEx | 2017-02-02 | 100 | | 4 | Masha | 2017-03-12 | 220 | +----+----------+------------+--------------------+ 7 rows in set (0.01 sec)
SQL> SELECT * FROM employee_tbl ORDER BY RAND(); +----+----------+------------+--------------------+ | id | name | work_date | daily_typing_book | +----+----------+------------+--------------------+ | 4 | Masha | 2017-03-12 | 220 | | 2 | Ruslan | 2017-03-02 | 220 | | 5 | Roma | 2017-03-12 | 350 | | 1 | Dima | 2017-02-01 | 250 | | 3 | AndreyEx | 2017-02-02 | 100 | | 3 | AndreyEx | 2017-01-11 | 170 | | 5 | Roma | 2017-06-23 | 300 | +----+----------+------------+--------------------+ 7 rows in set (0.00 sec)