oracle随机抽取表中的n条记录

采样表扫描(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 

时间: 2024-09-29 05:46:45

oracle随机抽取表中的n条记录的相关文章

30-4 向表中插入多条记录

----------------------向表中插入多条记录-------------------- --将TblStudent表的结构和表中的数据备份到TblStudent20140506Backup表中. --TblStudent20140506Backup表是在执行 select into 语句时创建的. --select into 语句不能重复执行,因为每次执行都会创建一个TblStudent20140506Backup表. --TblStudent表结构包括自动编号列都会在TblSt

通过 JDBC 向指定的数据表中插入一条记录,查询记录

//通过 JDBC 向指定的数据表中插入一条记录 /*  * 1.Statement: 用于执行SQl语句的对象  *  通过Connection 的createStatement()方法来获取  *  通过executeUptate(sql) 可执行sql语句  *  传入的sql 可以是 insert , update, delete 但不能是select  * 2.Connection 和 Statement 需要关闭  *  需要在finally中关闭  * 3.关闭的顺序:先关闭后获取

MSSQL SELECT(刚刚)新插入到表中的那条记录

假设对表 TXxxxxxxx 表新插入一条记录,然后要 SELECT 出刚刚插入的这条记录.可使用 SCOPE_IDENEITY(); 处理.具体代码参考如下: INSERT INTO TXxxxxxxx(...) VALUES(...) DECLARE @LastInsertId INT = 0; SET @LastInsertId = SCOPE_IDENTITY(); SELECT * FROM TGamePrizePoolWinRecord AS tppwr WHERE id = @La

MySql实现随机获取表中的一条数据

本以为这是一个很复杂的功能,没想到mysql有这个语法 SELECT * FROM sys_randcode ORDER BY RAND() LIMIT 1

mysql随机查询符合条件的几条记录

随机查询,方法可以有很多种.比如,查询出所有记录,然后随机从列表中取n条记录.使用程序便可实现.可是程序实现必须查询出所有符合条件的记录(至少是所有符合条件的记录id),然后再随机取出n个id,查询数据库.但是效率毕竟没有数据库中直接查询得快.下面介绍mysql中怎样随机查询n条记录. 1.最简单的办法order by rand(),示例 select * from question q where q.`level`=1 order by rand() limit 1; 此写法,可以将查询出的

oracle删除一个表中的重复数据,且只保留一条

例子1:查找一个表中的重复数据,重复记录是根据单个字段(Id)来判断,表名为STUDENT SELECT ID , COUNT(1) FROM STUDENT T GROUP BY T.ID HAVING COUNT(ID) > 1 例子2:删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录,表名为STUDENT DELETE FROM STUDENT WHERE ID IN (SELECT ID FROM STUDENT T GROUP BY T.ID H

从远程oracle上导入到本地同一张表中不存在的记录的方法

场景:在远程oracle上存在一张表A,在本地同样存在一张相同表结构的表B.由于本地表B中保存了业务系统操作产生的几条记录,同时原来导入了A中的部分记录,但是并没有保存A中全部的记录.A中有15条记录,B中保存了A中3条记录同时B中还有本地业务系统产生的4条记录,不能删除B中的业务系统产生的4条记录.现在想将A中的另外的12条记录导入B中,同时有能保留B中原来的由业务系统产生的4条记录. 解决sql: 1.先在A中获得在B中出现过的记录. select * from [email protect

随机从表中取一个

--随机从表中取一个Select Top 1 * From table Order By NEWID()

db2中取表的前几条记录 (转)

原文出处:http://csjava.blog.163.com/blog/static/19047003320119110358572/ db2中SELECT TOP N * FORM TABLENAME 是不能取到表中前几条记录的.要使用 SELECT * FROM TABLENAME FETCH FIRST N ROWS ONLY.其中N即是你要取的前几条记录. db2中取表的前几条记录 (转)