sql随机

想从MySQL数据库中随机取一条或者N条记录时,最好把RAND()生成随机数放在JOIN子查询中以提高效率。

SELECT id FROM table ORDER BY RAND() LIMIT n;

改造成下面这个:

SELECT id FROM table t1 JOIN (SELECT RAND() * (SELECT MAX(id) FROM table) AS nid) t2 ON t1.id > t2.nid LIMIT n;

如果想要达到完全随机,还可以改成下面这种写法:

SELECT id FROM table t1 JOIN (SELECT round(RAND() * (SELECT MAX(id) FROM table)) AS nid FROM table LIMIT n) t2 ON t1.id = t2.nid;

就可以享受在SQL中直接取得随机数了,不用再在程序中构造一串随机数去检索了。查询结果可能不全

时间: 2024-08-24 09:22:15

sql随机的相关文章

【SQL Server 学习系列】-- sql 随机生成中文名字

原文:[SQL Server 学习系列]-- sql 随机生成中文名字 1 DECLARE @fName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20)) -- 姓氏 2 DECLARE @lName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20)) -- 名字 3 4 INSERT @fName VALUES 5 ('赵'),('钱'),('孙'),('李')

sql随机查询数据语句(NewID(),Rnd,Rand(),random())

SQL Server: 代码如下 复制代码 Select TOP N * From TABLE Order By NewID() NewID()函数将创建一个 uniqueidentifier 类型的唯一值.上面的语句实现效果是从Table中随机读取N条记录. Access: 代码如下 复制代码 Select TOP N * From TABLE Order By Rnd(ID) Rnd(ID) 其中的ID是自动编号字段,可以利用其他任何数值来完成,比如用姓名字段(UserName) Se(ww

sql随机抽取数据

Mysql:select * from [tablename] order by rand() limit 10 Sql Server:select top 5 * from [tablename] order by NEWID() Access:select top 5 * from [tablename] order by rnd(id),其中id是自动编号的字段.在vb+access可以随机,但在asp里却没法得到随机的结果.可能是asp有缓存的结果吧,因此,需要修改一下这条语句,改为下面

sql 随机获得一条记录

My SQL:,随机查询语句 1 条 select  *  from  表名 order by rand() limit 1; SQL Server,随机查询语句1条 select top 1  * from  表名order by newid(); Oracle,随机查询查询语句1条 select * from(  select  *  from 表名 order by dbms_random.value) where rownum = 1;

转:使用linq to sql 随机取一行数据的方法

原文地址:http://outofmemory.cn/code-snippet/1760/usage-linq-to-sql-suiji-take-yixing-data-method 虽然这看来已经不是真正的原文地址了 在linq to sql中我们可以通过创建一个假的用户自定义函数的方法来实现随机取一行数据的方法. 首先要在DataContext的类中添加用户自定义函数,最好是放在partial class中: partial class MyDataContext { [Function(

sql 随机抽取几条数据的方法 推荐

传说用这个语句管用:select top 5 * from tablename order by newid() 我放到sql的查询分析器里去执行果然管用,随机抽取5条信息,不停的换,结果我应用到程序里的时候就不管用了,总是那几条,于是对这个东西进行了一个研究得出另一种方法: newid() 可以产生如:"49869293-8891-4B31-B88E-A584D9621490” 这样的数据结果,而且每一行产生的都不同,这样的话,我们就可以在查询的时候给结果集里加上这么一个列,比如: selec

sql随机查询数据order by newid()

方法1:最普通的写法,性能慢 SELECT top 10 ID,name FROM dt_keyword ORDER BY NEWID() 方法2:性能还可以 //先给数据库增加一列ALTER TABLE dt_keyword ADD SortKey AS NEWID() //查询时执行下边sql SELECT top 10 ID,name FROM dt_keyword WHERE SortKey LIKE 'A%B%C%D%E%F%' 方法3:效率还好,含sql2008以上支持 SELECT

sql 随机查询数据

SELECT {$field} FROM {$table} as t1 WHERE id IN ( SELECT t.id FROM (SELECT id FROM {$table} where 1=1 {$where} ORDER BY RAND() {$limit} ) AS t )

Sql 随机生成电话号码

1 SELECT 13000000000+cast( floor(rand()*1000000000) as bigint)+ABS(CAST(CAST( NewID() AS BINARY(3) )AS INT))