利用sql語句隨機抽取記錄

2022-06-06    分類: 網站建設

數據庫的隨機查詢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

分享題目:利用sql語句隨機抽取記錄
文章位置:http://m.kartarina.com/news/164160.html

成都網站建設公司_創新互聯,為您提供建站公司外貿建站服務器托管面包屑導航軟件開發域名注冊

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發
主站蜘蛛池模板: 亚洲一区二区三区AV无码| 青青草无码免费一二三区| 久久精品无码专区免费| 国产av无码专区亚洲av果冻传媒| 成人免费无码H在线观看不卡| 精品无码一区在线观看| 国产精品成人无码久久久久久| 亚洲AV无码乱码国产麻豆| 无码精品不卡一区二区三区| 在线精品无码字幕无码AV| 精品高潮呻吟99av无码视频| 精品久久久久久无码中文字幕| 精品无码久久久久国产动漫3d| 国产亚洲情侣一区二区无码AV| 亚洲av无码一区二区三区在线播放 | 国产精品无码素人福利免费| 国产av无码专区亚洲av桃花庵 | 无码精品人妻一区二区三区人妻斩| 亚洲AV无码无限在线观看不卡 | 中文AV人妻AV无码中文视频| 国产高清无码二区| 国产日产欧洲无码视频| 亚洲欧洲国产综合AV无码久久| 亚洲av永久无码精品秋霞电影影院| 免费无码又爽又刺激毛片| 亚洲日韩国产二区无码| AV无码久久久久不卡蜜桃| 无码日韩人妻精品久久蜜桃| 国产热の有码热の无码视频| 国模无码人体一区二区| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 国产精品无码一区二区三区在| 精品国产aⅴ无码一区二区| 久久精品无码专区免费东京热| 无码人妻一区二区三区在线视频| 国产在线无码视频一区二区三区| 亚洲精品午夜无码专区| 久久无码专区国产精品s| 国产精品无码午夜福利| 亚洲AV无码久久精品成人 | 人妻丰满熟妇A v无码区不卡|