随机读取数据表记录的整理 [转]
来源:互联网 发布:傻瓜软件 编辑:程序博客网 时间:2024/05/16 03:49
ORACLE的写法
ORDER BY DBMS_RANDOM.VALUEdbms_random.value(100,200),dbms_random.string('A',10)
SELECT *
FROM (SELECT EMPNO, ENAME FROM SCOTT.EMP ORDER BY DBMS_RANDOM.VALUE)
WHERE ROWNUM <3> 注:dbms_random包需要手工安装,位于$ORACLE_HOME/rdbms/admin/dbmsrand.sql
dbms_random.value(100,200)可以产生100到200范围的随机数
取排序后的前3条记录:
SELECT *
FROM (SELECT EMPNO, ENAME, rownum rn FROM SCOTT.EMP ORDER BY 1)
WHERE rn 取排序后的第4-6条记录:
SELECT *
FROM (SELECT EMPNO, ENAME, rownum rn FROM SCOTT.EMP ORDER BY 1)
WHERE rn between 4 and 6;
11.13 随机产生N个字符串
select dbms_random.string('A',10) from dual;
--测试通过,随机取5条
select * from (select table.*,dbms_random.random num from table order
by num) where rownum<=5;
--取随机数10与36之间的数字
SELECT FLOOR(DBMS_RANDOM.VALUE(10,36)) into v_count FROM DUAL;
My sql 2000的写法
select top 1 * from yourtable order by newid()
方法二、
set rowcount 1
select * from run2k..fsjour order by newid()
set rowcount 0
ACCESS的写法
1。通过recordset游标可移动的特性,在已打开记录集里移动到随机位置读取记录。而且可以将就使用页面中已打开的RS对象。
2。将出现过的随机数保存到一个字符串中,通过instr函数来检查是否重复,重复则递归调用函数至不重复。
数据库打开查询若干,省略... ...
Set rs = Server.CreateObject("Adodb.RecordSet")
rs.open sql,conn,1,1
DIM Appeared
Call DisRndRecord(10,rs.recordCount)'调用函数该位置显示记录
'################SUBS################
'#DisRndRecord(DisNum,rsBound)
'#参数DisNum:显示数量
'#参数rsBound:随机数产生范围
Sub DisRndRecord(DisNum,rsBound)
DIM i,ThisRnd
If rsBound < DisNum Then DisNum = rsBound'记录总数小于要抽取记录条数的情况
For i = 0 To DisNum - 1
ThisRnd = GetRnd(rsBound)'取得一个不重复的随机数
rs.Move(ThisRnd)'游标移动到随机数位置数读取
Response.Write("<br>("&rs("id")&")"&rs("Title"))
rs.Move(-ThisRnd)
Next
End Sub
'# 函数GetRnd(bound)返回一个不重复的随机数字
'#参数bound:随机范围
Function GetRnd(bound)
DIM ranNum
Randomize()
ranNum=int(bound*rnd)
If Instr(Appeared,"["&ranNum&"]") Then'产生的随机数是否出现过
ranNum = getRnd(bound)
End If
Appeared = Appeared & "["&ranNum&"]"'记录已出现的随机数
GetRnd = ranNum
End Function
MySQL的写法
SELECT * FROM table_name ORDER BY rand() LIMIT 5;
rand在手册里是这么说的:
RAND()
RAND(N)
返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。
mysql> select RAND();
-> 0.5925
mysql> select RAND(20);
-> 0.1811
mysql> select RAND(20);
-> 0.1811
mysql> select RAND();
-> 0.2079
mysql> select RAND();
-> 0.7888
你不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000的集合的随机样本。注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。
试了一下,8千条记录的表,执行一次需要0.08 sec,.慢了些
请教了google,得到如下代码
SELECT * FROM table_name AS r1 JOIN ( SELECT ROUND(RAND() * (SELECT MAX(id) FROM table_name)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 5;
- 随机读取数据表记录的整理 [转]
- 读取随机记录的例子
- 定位指针随机定位到数据表的某一条记录
- 随机获取Mysql数据表的一条或多条记录
- 随机获取Mysql数据表的一条或多条记录
- 随机获取Mysql数据表的一条或多条记录
- 随机获取Mysql数据表的一条或多条记录
- 随机获得Mysql数据表的一条或多条记录
- 随机获取Mysql数据表的一条或多条记录
- 随机读取Access数据库记录(转)
- 随机读取数据库记录
- 数据库中随机读取和顺序读取记录的方法
- 随机读取N条数据从数据表
- asp随机读取数据库记录
- 随机读取Access数据库记录
- SqlServer中随机读取记录
- 随机读取Access数据库记录
- 如何随机读取数据库记录
- 三月的抉择
- Fedora 10 下载地址
- Fedora 10 安装指南
- 我也大话设计模式--装饰模式
- fedora10安装记录
- 随机读取数据表记录的整理 [转]
- 在Dell Mini 9小试了下Moblin系统
- 创建iptables NAT规则
- 经典推理题:《三个精灵》
- 关于可剥夺式进程调度方案,计算CPU利用率的题目
- 脑筋急转弯
- LINUX高级应用之IPTABLES 实例分析
- 试着推荐一本书,已经翻译为中文了,至于翻译的质量嘛,不清楚,我是看原版的不错。
- 学习使用 iptables