Hàm RAND trong SQL
SQL có một hàm RAND được sử dụng để tạo một số ngẫu nhiên giữa 0 và 1.
SQL> SELECT RAND( ), RAND( ), RAND( ); +------------------+-----------------+------------------+ | RAND( ) | RAND( ) | RAND( ) | +------------------+-----------------+------------------+ | 0.45464584925645 | 0.1824410643265 | 0.54826780459682 | +------------------+-----------------+------------------+ 1 row in set (0.00 sec)
Khi được triệu hồi với một tham số nguyên, hàm RAND() sử dụng giá trị đó để cung cấp cho bộ tạo số ngẫu nhiên (Random Number Generator). Mỗi khi bạn cung cấp cho Generator với một giá trị đã cho, hàm RAND() sẽ tạo các dãy số lặp.
SQL> SELECT RAND(1), RAND( ), RAND( ); +------------------+------------------+------------------+ | RAND(1 ) | RAND( ) | RAND( ) | +------------------+------------------+------------------+ | 0.18109050223705 | 0.75023211143001 | 0.20788908117254 | +------------------+------------------+------------------+ 1 row in set (0.00 sec)
Bạn có thể sử dụng ORDER BY RAND() để ngẫu nhiên hóa một tập hợp các hàng hoặc giá trị như sau:
Để hiểu hàm ORDER BY RAND() này, bạn theo dõi bảng NHANVIEN có các bản ghi sau:
SQL> SELECT * FROM NHANVIEN; +------+------+------------+--------------------+ | ID | NAME | Ngay_Bat_Dau | So_Chiec | +------+------+------------+--------------------+ | 1 | Hoang | 2007-01-24 | 250 | | 2 | Nam | 2007-05-27 | 220 | | 3 | Viet | 2007-05-06 | 170 | | 3 | Viet | 2007-04-06 | 100 | | 4 | Huong | 2007-04-06 | 220 | | 5 | Xuan | 2007-06-06 | 300 | | 5 | Xuan | 2007-02-06 | 350 | +------+------+------------+--------------------+ 7 rows in set (0.00 sec)
Bây giờ bạn sử dụng các lệnh sau:
SQL> SELECT * FROM NHANVIEN ORDER BY RAND(); +------+------+------------+--------------------+ | ID | NAME | Ngay_Bat_Dau | So_Chiec | +------+------+------------+--------------------+ | 5 | Xuan | 2007-06-06 | 300 | | 3 | Viet | 2007-04-06 | 100 | | 3 | Viet | 2007-05-06 | 170 | | 2 | Nam | 2007-05-27 | 220 | | 4 | Huong | 2007-04-06 | 220 | | 5 | Xuan | 2007-02-06 | 350 | | 1 | Hoang | 2007-01-24 | 250 | +------+------+------------+--------------------+ 7 rows in set (0.01 sec) SQL> SELECT * FROM NHANVIEN ORDER BY RAND(); +------+------+------------+--------------------+ | ID | NAME | Ngay_Bat_Dau | So_Chiec | +------+------+------------+--------------------+ | 5 | Xuan | 2007-02-06 | 350 | | 2 | Nam | 2007-05-27 | 220 | | 3 | Viet | 2007-04-06 | 100 | | 1 | Hoang | 2007-01-24 | 250 | | 4 | Huong | 2007-04-06 | 220 | | 3 | Viet | 2007-05-06 | 170 | | 5 | Xuan | 2007-06-06 | 300 | +------+------+------------+--------------------+ 7 rows in set (0.00 sec)