Coding With Fun
Home Docker Django Node.js Articles Python pip guide FAQ Policy

SQL RAND() function


May 16, 2021 SQL


Table of contents


SQL RAND function


SQL has a RAND function that produces random numbers between 0 and 1:

    SQL>  SELECT RAND( ), RAND( ), RAND( );
    +------------------+-----------------+------------------+
    | RAND( )          | RAND( )         | RAND( )          |
    +------------------+-----------------+------------------+
    | 0.45464584925645 | 0.1824410643265 | 0.54826780459682 |
    +------------------+-----------------+------------------+
    1 row in set (0.00 sec)

Rand() takes an integer value as the seed of a random number generator when it is called as an argument. For each given seed, the RAND() function produces a list of numbers that can be re-recurred:

    SQL>  SELECT RAND(1), RAND( ), RAND( );
    +------------------+------------------+------------------+
    | RAND(1 )         | RAND( )          | RAND( )          |
    +------------------+------------------+------------------+
    | 0.18109050223705 | 0.75023211143001 | 0.20788908117254 |
    +------------------+------------------+------------------+
    1 row in set (0.00 sec)

You can use ORDER BY RAND() to randomize a set of records, as follows:

    SQL> SELECT * FROM employee_tbl;
    +------+------+------------+--------------------+
    | id   | name | work_date  | daily_typing_pages |
    +------+------+------------+--------------------+
    |    1 | John | 2007-01-24 |                250 |
    |    2 | Ram  | 2007-05-27 |                220 |
    |    3 | Jack | 2007-05-06 |                170 |
    |    3 | Jack | 2007-04-06 |                100 |
    |    4 | Jill | 2007-04-06 |                220 |
    |    5 | Zara | 2007-06-06 |                300 |
    |    5 | Zara | 2007-02-06 |                350 |
    +------+------+------------+--------------------+
    7 rows in set (0.00 sec)

Now, try the following command:

    SQL> SELECT * FROM employee_tbl ORDER BY RAND();
    +------+------+------------+--------------------+
    | id   | name | work_date  | daily_typing_pages |
    +------+------+------------+--------------------+
    |    5 | Zara | 2007-06-06 |                300 |
    |    3 | Jack | 2007-04-06 |                100 |
    |    3 | Jack | 2007-05-06 |                170 |
    |    2 | Ram  | 2007-05-27 |                220 |
    |    4 | Jill | 2007-04-06 |                220 |
    |    5 | Zara | 2007-02-06 |                350 |
    |    1 | John | 2007-01-24 |                250 |
    +------+------+------------+--------------------+
    7 rows in set (0.01 sec)

    SQL> SELECT * FROM employee_tbl ORDER BY RAND();
    +------+------+------------+--------------------+
    | id   | name | work_date  | daily_typing_pages |
    +------+------+------------+--------------------+
    |    5 | Zara | 2007-02-06 |                350 |
    |    2 | Ram  | 2007-05-27 |                220 |
    |    3 | Jack | 2007-04-06 |                100 |
    |    1 | John | 2007-01-24 |                250 |
    |    4 | Jill | 2007-04-06 |                220 |
    |    3 | Jack | 2007-05-06 |                170 |
    |    5 | Zara | 2007-06-06 |                300 |
    +------+------+------------+--------------------+
    7 rows in set (0.00 sec)