针对oracle
1,方法一,所有记录随机排序,然后选择5条记录
select * from ( select * from t_base_menu order by dbms_random.value) where rownum<=5
区别于下面这样,选择了5条记录,然后随机排序,所以一直是相同的5条记录
select * from t_base_menu where rownum<=5 order by dbms_random.value
取出前10条记录的后5条,顺序不变
select * from (select t.menu_name,rownum as myrow from t_base_menu t where rownum<=10 order by rownum desc) a where rownum<=5 order by a.myrow asc
下面介绍一下dbms.random:
dbms.random是oracle提供的一个随机函数包
测试一:随机生成一个数
dbms_random.value用法:
生成一个大于等于0,小于等于1的38位小数
select dbms_random.value from dual;
输出:0.395461555239436
测试二:指定范围
select dbms_random.value(100,0) from dual;
输出:54.4656475243638
select dbms_random.value(0,8) from dual;
输出:7.5896620684203
下面介绍rownum:
oracle对查询出来的结果集,加上的序列号就是rownum,总是从1开始
—rownum>1得不到任何数据,因为第一条记录的rownum=1,不符合条件,所以删除,这样使得下一条记录的rownum又是1,
这样下去,所以的记录都不满足条件,自然得不到结果,而rownum>=1,或者rownum>0可以得到所有记录,
同理,between 0 and 10,between 1 and 10可以得到10条记录
而between 2 and 10没有结果
2,方法二
****
参考地址:http://yisean.iteye.com/blog/608581