oracle随机取数据

***

针对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

有问题在公众号【清汤袭人】找我,时常冒出各种傻问题,然一通百通,其乐无穷,一起探讨


原文地址:https://www.cnblogs.com/qingmaple/p/4149253.html