japanese少妇高潮潮喷 -精品国产AV一区二区三区-麻豆av一区二区三区久久-国产精品无码专区

利用sql語句隨機(jī)抽取記錄

發(fā)布時(shí)間:2025-08-20 點(diǎn)擊:17
數(shù)據(jù)庫的隨機(jī)查詢sql
1. oracle,隨機(jī)查詢20條
select * from
(
select * from 表名
order by dbms_random.value
)
where rownum <= 20;
2.ms sql server,隨機(jī)查詢20條
select top 20 * from 表名order by newid()
3.my sql:,隨機(jī)查詢20條
select * from 表名 order by rand() limit 20
隨機(jī)查詢指定人員的一條未讀消息
幫助消息表 s_msg_hint
幫助消息id smh_id number(20) pk
幫助消息內(nèi)容 smh_text varchar2(200)
人員幫助消息表 s_hintpeople
人員id shp_uid varchar2(20) pk
當(dāng)前幫助消息id smh_id number(20) pk fk
如果為已讀消息會(huì)在 人員幫助消息表里面生成記錄
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 --隨機(jī)數(shù)值排序
)
where
status = 0 and --未讀消息
rownum <= 1 --取一條
########################################################################
我們經(jīng)常想在一個(gè)數(shù)據(jù)表中隨機(jī)地選取出數(shù)據(jù)來,比如隨機(jī)生成考試試卷等。
利用 sql server 的 newid() 方法就可以很輕松地達(dá)到這個(gè)目的。
newid() 方法返回一個(gè) guid,如:ee95a489-b721-4e8a-8171-3ca8cb6ad9e4
在 select 表的時(shí)候,再增加一列為 newid() 就可以了。
sql 語句:select *, newid() from table
這樣每條記錄后就會(huì)有一個(gè)隨機(jī)的 guid 值,我們再按這個(gè) guid 排一下序就可以達(dá)到亂序的效果。
sql 語句:select *, newid() as random from table order by random
我們要想隨機(jī)取出 10 條數(shù)據(jù),只要加上 top 10 就行了:
sql 語句:select top 10 *, newid() as random from table order by random
篩選唯一記錄
select * from tablename order by newid()
這個(gè)方法只適用于 sql server。
select top 4 * from 表 order by rnd(id)
這句適用于access的,大家能參考
select * from table_name order by rand() [limit num];
mysql的隨機(jī)查詢語句。
sql隨機(jī)選取記錄
今天在動(dòng)易的論壇上看到有人問如何隨機(jī)選取記錄的問題,上網(wǎng)查了一下資料,網(wǎng)上的資料比較散,所以整理了一下,權(quán)當(dāng)做個(gè)筆記,將來做考試系統(tǒng)的時(shí)候肯定是要用到的。
sql server:
sql server數(shù)據(jù)庫有個(gè)newid函數(shù),可以很方便的用sql語句得到數(shù)據(jù)表中的隨機(jī)數(shù)據(jù)。
select top n * from table order by newid()
access:
access數(shù)據(jù)庫雖然有個(gè)rnd,可以通過“select top 10 * from tb order by rnd(id)”得到隨機(jī)數(shù)據(jù),vba環(huán)境下使用沒有問題,可惜在vb中使用,產(chǎn)生的隨機(jī)序列是一樣的,每次調(diào)用返回的數(shù)據(jù)相同。
有人說在程序中加上randomize初始化隨機(jī)種子,那么這只說對了一半,在程序中簡單的加上randomize,是沒作用的,道理很簡單,randomize不可能影響sql語句中的rnd,這個(gè)rnd只不過是個(gè)字符串,sql語句是通過數(shù)據(jù)庫引擎去執(zhí)行的,正因?yàn)槿绱耍瑹o法初始化種子,致使每次應(yīng)用產(chǎn)生的隨機(jī)序列是一樣的。
由此可見,解決問題的關(guān)鍵就是如何初始化隨機(jī)種子。rnd函數(shù)語法是rnd(number),它有一個(gè)特性,就是如果使用了負(fù)參數(shù)的number,那么就會(huì)產(chǎn)生一個(gè)固定的隨機(jī)序列。利用這個(gè)特性,我們的問題就迎刃而解了,這就是每次調(diào)用rnd函數(shù)時(shí),使用一個(gè)負(fù)的不同的number,從而達(dá)到產(chǎn)生不同隨機(jī)序列的目的。經(jīng)過測試,問題解決。示例代碼如下:
’......
dim sql as string
dim r as single
randomize
r = rnd
sql = 'select top 1 * from tb order by rnd(' & r & '-id)'
’......
代碼說明:sql語句中的rnd的參數(shù)是一個(gè)數(shù)值表達(dá)式,必須包含表中的一個(gè)字段(最好是主鍵),因?yàn)樽兞縭返回的是一個(gè)隨機(jī)的0到1之間的single,(一般情況下表中的id值都是大于1的),從而使參數(shù)的值是個(gè)小于0的隨機(jī)數(shù),由此產(chǎn)生了不同的隨機(jī)序列。
補(bǔ)充一點(diǎn),有一種提議用time來解決這個(gè)問題,就是'select top 10 * from tb order by rnd(' & time & '- id) '。在某些情況下是可以的,但是,如果你需要快速連續(xù)的查詢信息,比如一些搖號(hào)程序需要連續(xù)滾動(dòng)地顯示信息,這種情況下,就會(huì)出現(xiàn)連續(xù)幾次返回重復(fù)的信息。究其原因,就是time在做數(shù)值運(yùn)算的時(shí)候,會(huì)轉(zhuǎn)換為一個(gè)小于1的double,而rnd返回的是一個(gè)single,顯然,rnd返回的結(jié)果有可能會(huì)截去time-id運(yùn)算后的尾數(shù),在time變化很小的情況下,使rnd返回的值與前次相同,從而返回的查詢結(jié)果相同。
mysql:
select * from table order by rand() limit 10


電子商務(wù)網(wǎng)站建設(shè)也能做北京網(wǎng)站優(yōu)化嗎?
什么是有效的網(wǎng)站優(yōu)化
如何將企業(yè)網(wǎng)站轉(zhuǎn)換為一個(gè)營銷工具!
如何在網(wǎng)站建設(shè)中不被外包公司忽悠?
三大策略決定網(wǎng)站SEO優(yōu)化成敗
通州網(wǎng)站優(yōu)化:如何提高網(wǎng)站的點(diǎn)擊率和轉(zhuǎn)化率呢?
導(dǎo)航類關(guān)鍵詞
營銷型網(wǎng)站設(shè)計(jì)制作要注意哪些方面