当前位置:Gxlcms > 数据库问题 > Oracle中随机抽取N条记录

Oracle中随机抽取N条记录

时间:2021-07-01 10:21:17 帮助过:4人阅读

 

Sql代码  

1.  SQL> select dbms_random.value() from dual;  

2.     

3.  DBMS_RANDOM.VALUE()  

4.  -------------------  

5.    0.146123095968043  

6.     

7.  SQL> select dbms_random.value() from dual;  

8.     

9.  DBMS_RANDOM.VALUE()  

10.-------------------  

11.   0.90175764902345  

 

Sql代码  

1.  SQL> select dbms_random.value(1,10) from dual;  

2.     

3.  DBMS_RANDOM.VALUE(1,10)  

4.  -----------------------  

5.         9.86601968210438  

6.     

7.  SQL> select dbms_random.value(1,10) from dual;  

8.     

9.  DBMS_RANDOM.VALUE(1,10)  

10.-----------------------  

11.       3.43475105499398  

 

 3.2、举例说明

  

Sql代码  

1.  SQL> select * from (select object_name from zeeno order by dbms_random.random) where rownum<6;  

2.     

3.  OBJECT_NAME  

4.  --------------------------------------------------------------------------------  

5.  /6dd0fe0e_CertificateCertifica  

6.  /cf5224d7_SunJSSE_a4  

7.  KU$_PARSED_ITEMS  

8.  javax/swing/text/IconView  

9.  oracle/xml/jdwp/XSLJDWPString  

10.   

11.SQL> select * from (select object_name from zeeno order by dbms_random.random) where rownum<6;  

12.   

13.OBJECT_NAME  

14.--------------------------------------------------------------------------------  

15.java/io/ObjectOutputStream$1  

16.sun/security/krb5/KrbAsReq  

17./2d52a21c_Last  

18.SYS_YOID0000006594$  

19./308fbfa1_BeanContextServices  

 

Sql代码  

1.  SQL> select * from (select object_name from zeeno order by trunc(dbms_random.value(1,3))) where rownum<6;  

2.     

3.  OBJECT_NAME  

4.  --------------------------------------------------------------------------------  

5.  ICOL$  

6.  C_COBJ#  

7.  PROXY_ROLE_DATA$  

8.  I_OBJ#  

9.  UET$  

10.   

11.SQL> select * from (select object_name from zeeno order by trunc(dbms_random.value(1,3))) where rownum<6;  

12.   

13.OBJECT_NAME  

14.--------------------------------------------------------------------------------  

15.ICOL$  

16.UNDO$  

17.I_PROXY_ROLE_DATA$_1  

18.I_CDEF2  

19.UET$  

 

Sql代码  

1.  SQL> select trunc(dbms_random.value(0, 1000)) randomNum from dual; --(0-1000的整数)  

2.     

3.   RANDOMNUM  

4.  ----------  

5.         790  

6.     

7.  SQL> select dbms_random.value(0, 1000) randomNum from dual; --(0-1000的浮点数)  

8.     

9.   RANDOMNUM  

10.----------  

11.997.876726  

 

4、使用内部函数sys_guid()  

Sql代码  

1.  SQL>  select * from (select OBJECT_NAME from zeeno order by sys_guid()) where rownum < 6;   

2.     

3.  OBJECT_NAME  

4.  --------------------------------------------------------------------------------  

5.  /6bedadd5_KeyManagerFactory1  

6.  /ffd795c8_AddCRIF  

7.  TABLE_EXPORT_OBJECTS  

8.  /278cd3a4_CGParselet  

9.  KU$_REFCOL_T  

10.   

11.SQL>  select * from (select OBJECT_NAME from zeeno order by sys_guid()) where rownum < 6;  

12.   

13.OBJECT_NAME  

14.--------------------------------------------------------------------------------  

15.sun/awt/InputMethodSupport  

16.V_$RESTORE_POINT  

17.COLORSLIST  

18.java/util/WeakHashMap$Entry  

19.DBMSOUTPUT_LINESARRAY  

 

:

       在使用sys_guid() 这种方法时,有时会获取到相同的记录,即和前一次查询的结果集是一样的,查找相关资料,有些说是和操作系统有关,在windows平台下正常,获取到的数据是随机的,而在linux等平台下始终是相同不变的数据集,有些说是因为sys_guid()函数本身的问题,即sys_guid()会在查询上生成一个16字节的全局唯一标识符,这个标识符在绝大部分平台上由一个宿主标识符和进程或进程的线程标识符组成,这就是说,它很可能是随机的,但是并不表示一定是百分之百的这样。
      
       所以,为确保在不同的平台每次读取的数据都是随机的,我们大多采用使用sample函数或者DBMS_RANDOM包获得随机结果集,其中使用sample函数更常用,因为其查询时缩小了查询范围,在查询大表,且要提取数据不是很不多的情况下,会对查询速度上有明显的提高。


 

二、其他数据库随机取出n条记录:

1SqlServer中随机提取数据库记录

select top n * from 表 order by newid()

--------------------------------------------------------------------------------
select top 10 * from tablename order by NEWID()   
select top 10 * from tablename order by NEWID()

2mysql中随机提取数据库记录

Select * From 表 order By rand() Limit n

-------------------------------------------------------------------------------
select * from tablename order by rand() limit 10
select * from tablename order by rand() limit 10

3Access中随机提取数据库记录

Select top n * FROM 表 orDER BY Rnd(id)

-------------------------------------------------------------------------------
SELECT top 10 * FROM tablename ORDER BY Rnd(FId)   
SELECT top 10 * FROM tablename ORDER BY Rnd(FId)
FId:为你当前表的ID字段名




转载源  http://kb.cnblogs.com/a/1443619/
转载源  http://hpitcn.iteye.com/blog/676330

Oracle中随机抽取N条记录

标签:

人气教程排行