利用sql语句随机抽取记录

发布时间:2025-08-20 点击:2
数据库的随机查询sql
1. oracle,随机查询20条
select * from
(
select * from 表名
order by dbms_random.value
)
where rownum <= 20;
2.ms sql server,随机查询20条
select top 20 * from 表名order by newid()
3.my sql:,随机查询20条
select * from 表名 order by rand() limit 20
随机查询指定人员的一条未读消息
帮助消息表 s_msg_hint
帮助消息id smh_id number(20) pk
帮助消息内容 smh_text varchar2(200)
人员帮助消息表 s_hintpeople
人员id shp_uid varchar2(20) pk
当前帮助消息id smh_id number(20) pk fk
如果为已读消息会在 人员帮助消息表里面生成记录
select
*
from
(select
smh.*,
nvl2( shp.smh_id,1,0) as status --0:未读 1:已读
from
s_msg_hint smh
left join s_hintpeople shp
on smh.smh_id = shp.smh_id
and shp.shp_uid = 'p_chencc'
order by
dbms_random.value --随机数值排序
)
where
status = 0 and --未读消息
rownum <= 1 --取一条
########################################################################
我们经常想在一个数据表中随机地选取出数据来,比如随机生成考试试卷等。
利用 sql server 的 newid() 方法就可以很轻松地达到这个目的。
newid() 方法返回一个 guid,如:ee95a489-b721-4e8a-8171-3ca8cb6ad9e4
在 select 表的时候,再增加一列为 newid() 就可以了。
sql 语句:select *, newid() from table
这样每条记录后就会有一个随机的 guid 值,我们再按这个 guid 排一下序就可以达到乱序的效果。
sql 语句:select *, newid() as random from table order by random
我们要想随机取出 10 条数据,只要加上 top 10 就行了:
sql 语句:select top 10 *, newid() as random from table order by random
筛选唯一记录
select * from tablename order by newid()
这个方法只适用于 sql server。
select top 4 * from 表 order by rnd(id)
这句适用于access的,大家能参考
select * from table_name order by rand() [limit num];
mysql的随机查询语句。
sql随机选取记录
今天在动易的论坛上看到有人问如何随机选取记录的问题,上网查了一下资料,网上的资料比较散,所以整理了一下,权当做个笔记,将来做考试系统的时候肯定是要用到的。
sql server:
sql server数据库有个newid函数,可以很方便的用sql语句得到数据表中的随机数据。
select top n * from table order by newid()
access:
access数据库虽然有个rnd,可以通过“select top 10 * from tb order by rnd(id)”得到随机数据,vba环境下使用没有问题,可惜在vb中使用,产生的随机序列是一样的,每次调用返回的数据相同。
有人说在程序中加上randomize初始化随机种子,那么这只说对了一半,在程序中简单的加上randomize,是没作用的,道理很简单,randomize不可能影响sql语句中的rnd,这个rnd只不过是个字符串,sql语句是通过数据库引擎去执行的,正因为如此,无法初始化种子,致使每次应用产生的随机序列是一样的。
由此可见,解决问题的关键就是如何初始化随机种子。rnd函数语法是rnd(number),它有一个特性,就是如果使用了负参数的number,那么就会产生一个固定的随机序列。利用这个特性,我们的问题就迎刃而解了,这就是每次调用rnd函数时,使用一个负的不同的number,从而达到产生不同随机序列的目的。经过测试,问题解决。示例代码如下:
’......
dim sql as string
dim r as single
randomize
r = rnd
sql = 'select top 1 * from tb order by rnd(' & r & '-id)'
’......
代码说明:sql语句中的rnd的参数是一个数值表达式,必须包含表中的一个字段(最好是主键),因为变量r返回的是一个随机的0到1之间的single,(一般情况下表中的id值都是大于1的),从而使参数的值是个小于0的随机数,由此产生了不同的随机序列。
补充一点,有一种提议用time来解决这个问题,就是'select top 10 * from tb order by rnd(' & time & '- id) '。在某些情况下是可以的,但是,如果你需要快速连续的查询信息,比如一些摇号程序需要连续滚动地显示信息,这种情况下,就会出现连续几次返回重复的信息。究其原因,就是time在做数值运算的时候,会转换为一个小于1的double,而rnd返回的是一个single,显然,rnd返回的结果有可能会截去time-id运算后的尾数,在time变化很小的情况下,使rnd返回的值与前次相同,从而返回的查询结果相同。
mysql:
select * from table order by rand() limit 10


电子商务网站建设也能做北京网站优化吗?
什么是有效的网站优化
如何将企业网站转换为一个营销工具!
如何在网站建设中不被外包公司忽悠?
三大策略决定网站SEO优化成败
通州网站优化:如何提高网站的点击率和转化率呢?
导航类关键词
营销型网站设计制作要注意哪些方面