Oracle隨機抽取表中的n條記錄

jopen 9年前發布 | 18K 次閱讀 Oracle 數據庫服務器

采樣表掃描(sample table scan):掃描返回表中隨機采樣數據,這種訪問方式需要在FROM語句中包含SAMPLE選項或者SAMPLE BLOCK選項.

注:從Oracle8i開始Oracle提供采樣表掃描特性 

2、使用sample獲得隨機結果集 

2.1、語法: SAMPLE [ BLOCK ](sample_percent)[ SEED (seed_value) ]  

SAMPLE選項:表示按行采樣來執行一個全表掃描,Oracle從表中讀取特定百分比的記錄,并判斷是否滿足WHERE子句以返回結果。 

BLOCK: 表示使用隨機塊例舉而不是隨機行例舉。 

sample_percent:是隨機獲取一張表中記錄的百分比。比如值為10,那就是表中的隨機的百分之10的記錄。 

               值必須大于等于.000001,小于100。 

SEED:表示從哪條記錄返回,類似于預先設定例舉結果,因而每次返回的結果都是固定的。該值必須介于0和4294967295之間。 

2.2、舉例說明 

   創建測試臨時表: 

Sql代碼 

SQL>create table zeeno as select * from dba_objects;      

1)、sample(sample_percent):

Sql代碼 

-- 從表zeeno中“全表掃描”隨機抽取10%的記錄,隨機查詢5條記錄    

SQL>select object_name from zeeno sample(10) where rownum<6;    

  

OBJECT_NAME    

--------------------------------------------------------------------------------    

UET$    

VIEW$    

I_SUPEROBJ2    

TRIGGERCOL$    

I_VIEW1       

                             

SQL&gt; /    

  

OBJECT_NAME    

--------------------------------------------------------------------------------    

I_FILE1    

IND$    

CLU$    

FET$    

I_COBJ#    

    

2)、sample block(sample_percent) 

Sql代碼 

-- 從表zeeno中“采樣表掃描”隨機抽取10%的記錄,隨機查詢5條記錄    

SQL> select object_name from zeeno sample block(10) where rownum<6;    

    www.2cto.com  

OBJECT_NAME    

--------------------------------------------------------------------------------    

URIFACTORY    

DBMS_XMLGEN    

DBMS_XMLGEN    

DBMS_XMLSTORE    

DBMS_XMLSTORE    

    

 3)、sample block(sample_percent) seed(seed_value) 

Sql代碼 

-- 使用seed,返回固定的結果集。從表zeeno中“采樣表掃描”隨機抽取10%的記錄,隨機查詢5條記錄。    

SQL> select object_name from zeeno sample(10) seed(10) where rownum<6;    

  

OBJECT_NAME    

--------------------------------------------------------------------------------    

UET$    

I_CON1    

I_FILE2    

FET$    

I_COL1    

  

SQL&gt; select object_name from zeeno sample(10) seed(10) where rownum&lt;6;    

  

OBJECT_NAME    

--------------------------------------------------------------------------------    

UET$    

I_CON1    

I_FILE2    

FET$    

I_COL1    

    

注意以下幾點:

1.sample只對單表生效,不能用于表連接和遠程表

2.sample會使SQL自動使用CBO 


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!