Oracle中随机抽取N条记录(二)

2014-11-24 08:49:00 · 作者: · 浏览: 2
e rownum<6;
OBJECT_NAME
--------------------------------------------------------------------------------
/6dd0fe0e_CertificateCertifica
/cf5224d7_SunJSSE_a4
KU$_PARSED_ITEMS
javax/swing/text/IconView
oracle/xml/jdwp/XSLJDWPString
SQL> select * from (select object_name from zeeno order by dbms_random.random) where rownum<6;
OBJECT_NAME
--------------------------------------------------------------------------------
java/io/ObjectOutputStream$1
sun/security/krb5/KrbAsReq
/2d52a21c_Last
SYS_YOID0000006594$
/308fbfa1_BeanContextServices
Sql代码
SQL> select * from (select object_name from zeeno order by trunc(dbms_random.value(1,3))) where rownum<6;
OBJECT_NAME
--------------------------------------------------------------------------------
ICOL$
C_COBJ#
PROXY_ROLE_DATA$
I_OBJ#
UET$
www.2cto.com
SQL> select * from (select object_name from zeeno order by trunc(dbms_random.value(1,3))) where rownum<6;
OBJECT_NAME
--------------------------------------------------------------------------------
ICOL$
UNDO$
I_PROXY_ROLE_DATA$_1
I_CDEF2
UET$
Sql代码
SQL> select trunc(dbms_random.value(0, 1000)) randomNum from dual; --(0-1000的整数)
RANDOMNUM
----------
790
SQL> select dbms_random.value(0, 1000) randomNum from dual; --(0-1000的浮点数)
RANDOMNUM
----------
997.876726
4、使用内部函数sys_guid()
Sql代码
SQL> select * from (select OBJECT_NAME from zeeno order by sys_guid()) where rownum < 6;
OBJECT_NAME
--------------------------------------------------------------------------------
/6bedadd5_KeyManagerFactory1
/ffd795c8_AddCRIF
TABLE_EXPORT_OBJECTS
/278cd3a4_CGParselet
KU$_REFCOL_T
www.2cto.com
SQL> select * from (select OBJECT_NAME from zeeno order by sys_guid()) where rownum < 6;
OBJECT_NAME
--------------------------------------------------------------------------------
sun/awt/InputMethodSupport
V_$RESTORE_POINT
COLORSLIST
java/util/WeakHashMap$Entry
DBMSOUTPUT_LINESARRAY
注:
在使用sys_guid() 这种方法时,有时会获取到相同的记录,即和前一次查询的结果集是一样的,查找相关资料,有些说是和操作系统有关,在windows平台下正常,获取到的数据是随机的,而在linux等平台下始终是相同不变的数据集,有些说是因为sys_guid()函数本身的问题,即sys_guid()会在查询上生成一个16字节的全局唯一标识符,这个标识符在绝大部分平台上由一个宿主标识符和进程或进程的线程标识符组成,这就是说,它很可能是随机的,但是并不表示一定是百分之百的这样。
所以,为确保在不同的平台每次读取的数据都是随机的,我们大多采用使用sample函数或者DBMS_RANDOM包获得随机结果集,其中使用sample函数更常用,因为其查询时缩小了查询范围,在查询大表,且要提取数据不是很不多的情况下,会对查询速度上有明显的提高。
二、其他 数据库随机取出n条记录:
1、SqlServer中随机提取数据库记录
select top n * from 表 order by newid()
--------------------------------------------------------------------------------
select top 10 * from tablename order by NEWID()
select top 10 * from tablename order by NEWID()
2、 mysql中随机提取数据库记录 www.2cto.com
Select * From 表 order By rand() Limit n
-------------------------------------------------------------------------------
select * from tablename order by rand() limit 10
select * from tablename order by rand() limit 10
3、Access中随机提取数据库记录
Select top