问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何从sql数据库里随机取20条记录

发布网友 发布时间:2022-05-04 01:20

我来回答

3个回答

懂视网 时间:2022-05-04 05:41

SqlServer本身并没有提供随机读取记录的功能,但我们可以通过一些方法来实现这个目的。本文介绍了其中几种方法并比较了各自的优劣。 方法一: 直接通过Sql语句实现,如: select top n * from tableA order by newid () 这是最简单的方法,通过调用SqlServer

SqlServer本身并没有提供随机读取记录的功能,但我们可以通过一些方法来实现这个目的。本文介绍了其中几种方法并比较了各自的优劣。

方法一:
直接通过Sql语句实现,如:

select top n *
from tableA
order by newid()

这是最简单的方法,通过调用SqlServer的newid()函数(产生GUID—全局唯一标志符)来产生随机记录。
采用这种方法时,需要将表中所有记录与newid()生成的值进行比较从而进行排序。因此,如果表中的记录较多,操作会非常缓慢。

方法二:
假设表中有一个自增长主键,增量为1。这时我们可以这样处理,取出主键的边界值(最大值和最小值),然后通过一个算法得到介于(包括)两个边界之间的随机值,最后按照这个值取出对应记录。下面是C#的例子:

//生成随机数
Random rand = new Random();
int num = rand.Next(MinVal,MaxVal + 1); //MinVal为主键的最小值,MaxVal为主键的最大值

//读取记录的Sql字符串
string SqlStr = "select * from tableA where PK = " + num;


这种方法较前一种方法的操作速度有了较大提高(特别是在大数据量的情况下)。但只有当主键值是连续的,中间没有断开的情况,并且增量为1时才能用这种方法。那么,如何才能解决这个问题呢?请继续往下看。

方法三:
对方法二进行了改进。主要思路是,将表中所有的主键值读进一个数组,从数组中随机读出一个值,按照这个值取出对应记录。下面是C#的例子:

//将主键值读进ArrayList
ArrayList DataIndex = new ArrayList();
while (sdr.Read()) //sdr为存放所有主键值的SqlDataReader
{
DataIndex.Add(sdr[0]); //存入ArrayList
}

//从ArrayList中随机读取数据项
Random rand = new Random();
int num = Convert.ToInt32(DataIndex[rand.Next(DataIndex.Length)]);

//读取记录的Sql字符串
string SqlStr = "select * from tableA where PK = " + num;


这样不管主键是否为自增长字段,也不管数值是否连续,都能够应付自如了。经过笔者的测试,在数据量为50万的情况下代码运行速度几乎没有受到什么影响,可见ArrayList的操作性能是可以信赖的。

热心网友 时间:2022-05-04 02:49

Select Top 5 * From 表名 Order By NEWID() , newid 产生的新的值是不固定的 。 在Select表里的数据的NEWID() 函数时候 随即选出N条记录 。希望能够帮助你 。

热心网友 时间:2022-05-04 04:07

数据库的随机查询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
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑lol突然很卡怎么办啊电脑玩lolfps低怎么解决 危化品仓库有什么设备 香港中文大学2021-2022在河北,重庆最低录取分数线 ChaCheer 洽洽 南瓜子 盐焗味 500g-适用对象 老闫家小粒香南瓜子-适用对象 洽洽盐焗味南瓜子-适用对象 盐焗南瓜子里有添加明矾吗 老街口盐焗味南瓜子500g*2袋量大优惠休闲零食 一天走多少步可以减肥每天走多少步可以减肥 肉炖土豆需要炖多久时间 鲫鱼豆腐汤咸菜的做法 看图,这块希捷硬盘怎么设置主从盘,详解。谢谢。 我已经怀孕38天了,可为什么还是肚子疼胸胀 小天才手表充电24小时会爆炸吗 小天才电话手表充电充了一夜会坏吗 微信里的免单群实质上是干嘛的?产品质量可信吗?商家的目的是什么? 咸菜和豆腐还有鱼怎么做成汤才好吃 咸菜豆腐鱼的做法,咸菜豆腐鱼怎么做好吃,咸菜 对优衣库尺码问题 网上买的优衣库能在实体店绞边么? 苹果qq微信消息不通知 OPPO手机能同时登陆两个吗? 求一只猥琐的熊猫表情包 雅阁七代2.0原车cd能加装usb插口吗 汽车CD如何加USB线 06款天籁六碟CD可以加装usb插口吗 请问粤式牛仔粒的酱汁怎么调配? 猴年春节联欢晚会(作文)700字 观看2017春晚作文 罗圈腿适合什么鞋 怎么样设置一根数据线上的两块希捷并口硬盘的主盘和从盘跳线? 什么网站是专门抢免单的 希捷硬盘主从盘设置?? 小天才电话手表,充电充一晚上为什么还是充不满?拔掉电源插座却显示满电了? 小天才充电超了4个小时 会有损坏吗? 吉林属于哪个省市 希捷ST3160815AS 和西数蓝盘 WD5000AAKX 怎样装双硬盘?怎样设置主从盘...... 2011年安徽理工大学*高考专升本录取分数线是多少?报的是会计专业,考了204分,能被录取么? 请问海渗,三文鱼,金枪鱼还有豆腐鱼的做 水豆腐闷鱼怎么做 今年报考成考专升本,考了150,报的是安徽理工大学医学类,求安徽理工大学的录取分数线 安徽理工大学医学类专升本分数 2008年成人高考专升本140分能考上安徽理工大学的采矿工程吗? 2011年成人高考专升本190分能考上安徽理工大学的采矿工程吗? 拉筋有什么好的效果? 相机、电脑、相片打印机连接在一起,拍了相片,可以立刻直接打印出来,是怎么做到的呢? 写给中考朋友一封信 企业收入600万一年要缴纳哪些税 NBA的税率是多少?姚明的年薪是600万,他要交多少税? 每月工资600万要上税多少