北京尚网汇智科技有限公司
您当前所在的位置:尚网汇智网站建设 > ASP.NET技术 > 文章详细
网站建设知识
NEWS
联系我们
  • 网站建设服务电话
  • 400-883-2887
  • 公司地址:北京市昌平科技园区创意大厦2-806
  • 服务项目
    高端网站建设
    移动/微信网站建设
    手机APP开发
    OA/ERP业务系统开发
    网站维护托管
    CMS模板制作

    利用sql语句随机抽取记录

    发布时间:2013-04-04 22:15:22

    数据库的随机查询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


    文章出自:北京网站建设公司-尚网汇智 https://net2006.com 如转载请注明出处!
    咨询服务热线
    400-883-2887
    客服电话:400-883-2887  传真:010-51654992  E-mail:support@net2006.com
    本站设计已受版权保护,任何公司及个人不得复制,违者将依法追究责任,特此声明。

    Copyright © 2005-2018 北京尚网汇智科技有限公司 版权所有 京ICP备13031271号
    查找内容: