***
針對oracle
1,方法一,所有記錄隨機排序,然后選擇5條記錄
select * from ( select * from t_base_menu order by dbms_random.value) where rownum<=5
區別於下面這樣,選擇了5條記錄,然后隨機排序,所以一直是相同的5條記錄
select * from t_base_menu where rownum<=5 order by dbms_random.value
取出前10條記錄的后5條,順序不變
select * from (select t.menu_name,rownum as myrow from t_base_menu t where rownum<=10 order by rownum desc) a where rownum<=5 order by a.myrow asc
下面介紹一下dbms.random:
dbms.random是oracle提供的一個隨機函數包
測試一:隨機生成一個數
dbms_random.value用法:
生成一個大於等於0,小於等於1的38位小數
select dbms_random.value from dual;
輸出:0.395461555239436
測試二:指定范圍
select dbms_random.value(100,0) from dual;
輸出:54.4656475243638
select dbms_random.value(0,8) from dual;
輸出:7.5896620684203
下面介紹rownum:
oracle對查詢出來的結果集,加上的序列號就是rownum,總是從1開始
---rownum>1得不到任何數據,因為第一條記錄的rownum=1,不符合條件,所以刪除,這樣使得下一條記錄的rownum又是1,
這樣下去,所以的記錄都不滿足條件,自然得不到結果,而rownum>=1,或者rownum>0可以得到所有記錄,
同理,between 0 and 10,between 1 and 10可以得到10條記錄
而between 2 and 10沒有結果
2,方法二
****