Oracle 隨機獲取N條資料

2021-09-24 23:58:22 字數 1113 閱讀 1614

當我們獲取資料時,可能會有這樣的需求,即每次從表中獲取資料時,是隨機獲取一定的記錄,而不是每次都獲取一樣的資料,這時我們可以採取oracle內部一些函式,來達到這樣的目的

1) select * from (select * from tablename order by sys_guid()) where rownum < n; 

2) select * from (select * from tablename order by dbms_random.value) where rownum< n; 

3) select *  from (select * from table_name sample(10)   order by trunc(dbms_random.value(0, 1000)))  where rownum < n;

說明: 

sample(10)含義為檢索表中的10%資料,sample值應該在[0.000001,99.999999]之間,其中 sys_guid() 和 dbms_random.value都是內部函式,通過這樣的方法,就可以實現我們的需求了.

注:在使1)方法時,即使用sys_guid() 這種方法時,有時會獲取到相同的記錄,即和前一次查詢的結果集是一樣的,我查詢了相關資料,有些說是和作業系統有關,在windows平台下正常,獲取到的資料是隨機的,而在linux等平台下始終是相同不變的資料集,有些說是因為sys_guid()函式本身的問題,即sys_guid()會在查詢上生成乙個16位元組的全域性唯一識別符號,這個識別符號在絕大部分平台上由乙個宿主識別符號和程序或程序的執行緒識別符號組成,這就是說,它很可能是隨機的,但是並不表示一定是百分之百的這樣.

所以,為確保在不同的平台每次讀取的資料都是隨機的,我們大多採用2)和3)兩種方案,其中2)方案更常用.3)方案縮小了查詢的範圍,在查詢大表,且要提取資料不是很不多的情況下,會對查詢速度上有一定的提高,

另:在oracle中一般獲取隨機數的方法是:

select trunc(dbms_random.value(0, 1000)) from dual; (0-1000的整數)

select dbms_random.value(0, 1000) from dual; (0-1000的浮點數)

Oracle 隨機獲取N條資料

oracle 隨機獲取n條資料 當我們獲取資料時,可能會有這樣的需求,即每次從表中獲取資料時,是隨機獲取一定的記錄,而不是每次都獲取一樣的資料,這時我們可以採取oracle內部一些函式,來達到這樣的目的.1 select from select from tablename order by sys...

Oracle 隨機獲取N條資料

當我們獲取資料時,可能會有這樣的需求,即每次從表中獲取資料時,是隨機獲取一定的記錄,而不是每次都獲取一樣的資料,這時我們可以採取oracle內部一些函式,來達到這樣的目的.select from select from tablename order by sys guid where rownum...

oracle sql 隨機讀取N條資料

oracle sql 隨機讀取n條資料 關鍵字 order by dbms random.value 以下是幾個不同的資料庫隨機取資料的sql 1 mysql select fromtableorderbyrand limit n 2 sql server selecttopn fromtableo...