`
Luob.
  • 浏览: 1589936 次
  • 来自: 上海
社区版块
存档分类
最新评论

Oralce 随机取一条数据

阅读更多
Oralce随机数

select * from (select * from fbb_bagitem order by dbms_random.value) where rownum=1

首先第一个是随机抽取6个

    select * from  (select * from tablename order by dbms_random.value) where  rownum<7


    这个方法的原理我认为应该是把表中的数据全部查询出来按照随机数进行排列后在从查询出来的数据中查询中6条记录,这个方法我在使用的过程中发现,如果记录一多的话查询的速度有一点点的慢

第二个是利用oracle的sample()或sample block方法
选择10%的记录
select * from t1 sample(10)
选择0.1%的记录
select * from t1 sample(0.1)

根据数据块选择1%的记录
select * from t1 sample block(1)

使用数据块选择与使用记录行选择的区别:使用数据块选择表示样本的采集是基于数据块采集的,也就是说样本如果一个数据块被采集为样本,则数据块里的记录全部都是样本


样本统计是基于统计学采集的,是有概率问题,不一定完全准确,如你要取50%的记录,但实际可能返回给你49%的记录集,也可能返回给你51%的记录集


例如

如果表T1有数据块B1,B2
B1有记录R1,R2,R3,R4,R5
B2有记录R6,R7,R8,R9,R10

如果使用如下SQL选择50%的数据
select * from t1 sample block(50)

则返回的结果可能是数据块B1的记录
R1,R2,R3,R4,R5
也可能是数据块B2的记录
R6,R7,R8,R9,R10
也可能不返回记录集


如果使用如下SQL选择50%的数据
select * from t1 sample (50)

则返回的结果可能是
R2,R3,R5,R8,R9
也可能是如下的样子
R1,R3,R4,R8




应用示例:
随机从表中取中1条记录,选取记录的概率是1%
select * from t1 sample(1) where rownum=1

随机从表中取中10条记录,选取记录的概率是0.1%
select * from t1 sample(0.1) where rownum<=10

注:当选取的概率越低,访问表的记录数将越多


ORACLE参考手册中的相关说明:

sample_clause
The sample_clause lets you instruct Oracle to select from a random sample of rows from the table, rather than from the entire table.


BLOCK
BLOCK instructs Oracle to perform random block sampling instead of random row sampling.


sample_percent
sample_percent is a number specifying the percentage of the total row or block count to be included in the sample. The value must be in the range .000001 to (but not including) 100.

Restrictions on Sampling During Queries
You can specify SAMPLE only in a query that selects from a single table. Joins are not supported. However, you can achieve the same results by using a CREATE TABLE ... AS SELECT query to materialize a sample of an underlying table and then rewrite the original query to refer to the newly created table sample. If you wish, you can write additional queries to materialize samples for other tables.

When you specify SAMPLE, Oracle automatically uses cost-based optimization. Rule-based optimization is not supported with this clause.

--------------------------------------------------------------------------------
Caution:
The use of statistically incorrect assumptions when using this feature can lead to incorrect or undesirable results.

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

译:
Sample选项
使用sample选项的意思是指定Oracle从表中随机选择记录样本,这样比从整个表中选择更高效.

block选项
加上 BLOCK选项时表示随机取数据块,而不是随机取记录行.

sample_percent选项
sample_percent是指定总记录行或数据块为数据样本的百分比数值,这个值只能在0.000001到100之间,且不能等于100

限制
只能在单表查询的SQL中指定sample选项,不支持有连接的查询。但是,你可以使用CREATE TABLE ... AS SELECT查询的语法完成同样的效果,然后再采用新建的样本表重新编写查询SQL。

当你指定用sample时,不支持基于规则(rule)的优化法则,ORACLE自动使用基本成本(cost)的优化法则
1
2
分享到:
评论

相关推荐

    Oracle中如何用一条SQL快速生成10万条测试数据

    本文将深入探讨如何利用一条SQL语句在Oracle中快速生成10万条测试数据,这对于数据库管理员和开发人员来说是一项极为实用的技能。 ### 核心知识点:使用SQL生成大量测试数据 #### 1. **理解ROWNUM和CONNECT BY ...

    Oracle中如何用一条SQL快速生成10万条测试数据.txt

    在Oracle数据库中,通过一条SQL语句快速生成大量测试数据是一项非常实用的技能。本文将详细介绍如何利用Oracle中的特性来实现这一目标。 ### 核心知识点:使用一条SQL语句快速生成10万条测试数据 #### 1. 使用`...

    Oracle里抽取随机数的多种方法

    在 Oracle 中抽取随机数是许多应用场景中常见的问题,例如在某个活动中需要随机取出一些符合条件的用户,以颁发获奖通知或其它消息。本文将通过实例讲解如何抽取随机数的多种方法。 首先,我们可以使用 Oracle 自带...

    Kettle生成1亿条数据导入oracle

    【标题】"Kettle生成1亿条数据导入Oracle"是一个关于使用开源ETL工具Kettle进行大数据处理的实践案例。Kettle,又称Pentaho Data Integration(PDI),是一款强大的数据转换和集成工具,能够有效地处理和转换大量...

    SQL随机提取N条记录

    在SQL(Structured Query Language)中,随机提取数据是一项常见的需求,尤其在数据分析、测试或样例展示时。这里我们将深入探讨如何在SQL中实现这一功能,以满足“SQL随机抽取N条记录”的需求。 首先,我们需要...

    随机获取oracle数据库中的任意一行数据(rownum)示例介绍

    总结来说,`ROWNUM`是Oracle数据库中一种强大的工具,它可以方便地用于选取特定行或实现分页查询,但在处理并发操作时需要注意并发控制,以防止数据不一致。了解并熟练掌握`ROWNUM`以及相关的分析函数,对于优化...

    利用ORACLE实现数据的抽样

    上述SQL语句将从表`AS`中抽取1%的记录,然后进一步限制结果集为一条记录。 此外,Oracle还支持`DBMS_RANDOM`包,这是一个强大的随机数生成器,可以用来辅助实现更复杂的抽样需求。如: ```sql SELECT * FROM ...

    四种数据库随机获取10条数据的方法

    配合`ORDER BY`和`LIMIT`子句,我们可以随机选取表中的10条数据: ```sql SELECT * FROM T_USER ORDER BY RAND() LIMIT 10 ``` `RAND()`函数使数据集无序,然后`LIMIT`限制返回的行数。 4. **Access** Access...

    Oracle数据库操作

    在PL/SQL中,可以声明一个游标,执行SQL查询,并通过循环遍历游标来显示记录集中的每一条信息。 2. **子程序_转换到SQL时间**: 数据库中的时间数据通常以特定的格式存储,例如TIMESTAMP或DATE类型。在处理这些...

    Oracle高级sql学习与练习

    EXISTS子句在找到至少一条符合条件的记录时就会返回TRUE,而不关心具体有多少条符合条件的记录;相反,NOT EXISTS子句则用于判断是否不存在符合条件的记录。 3. WITH子句,又称为公用表表达式(Common Table ...

    从大数据到大智慧:Oracle_大数据解决方案

    最后,价值密度低(Value)表明虽然单条数据可能价值不高,但大数据集中的大量数据蕴含着潜在的巨大价值。在大数据的背景下,数据的价值挖掘需要依赖于先进的技术和方法,如大数据的超高速装载技术,它能够将数据...

    从大数据到大智慧:Oracle大数据解决方案

    而价值则代表了在大量的数据中,单条数据可能没有价值,但通过分析和处理,能够发现数据背后的价值和洞察。 Oracle大数据解决方案是一种综合性的解决方案,它利用Hadoop的分布式架构来存储和处理大量非结构化数据,...

    oracle常用问题解答

    **问题**: 如何在Oracle中随机抽取前N条记录? **解答**: 可以使用`RAND`函数配合`RANK`函数来实现。 - **示例**: 抽取前5条记录: ```sql SELECT * FROM ( SELECT t.*, RANK() OVER (ORDER BY DBMS_RANDOM.VALUE...

    oracle ebs开发文档

    - **实现按“ENTER”自动跳至下一条记录**:使用 Forms 的内置事件处理逻辑,例如使用 WHEN-NEW-RECORD-INSTANCE 触发器来实现自动跳转。 - **使用堆叠画布**:这是一种用于布局管理的技术,可以实现在有限的空间内...

    数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)

    MySQL随机查询出一条记录: 代码如下: — 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT 1 来查询 SELECT * FROM table1 WHERE id=(SELECT id FROM table1 ORDER BY rand() LIMIT 1)...

    如何从数据库中随机取出10条记录的方法

    在处理大量数据时,有时我们需要从数据库中随机抽取一部分记录来进行数据分析、测试或者展示等操作。本文将详细介绍如何从数据库中随机取出10条记录的方法,并提供多种不同数据库系统的实现方式。 #### 1. 原理介绍...

    oracle解锁,死锁

    为了保证数据的一致性和完整性,Oracle数据库提供了一系列机制来管理和解决这些情况。 #### 二、Oracle中的锁机制 在深入讨论Oracle解锁和死锁之前,我们首先需要了解Oracle数据库中的锁机制。 1. **共享锁(S)**...

Global site tag (gtag.js) - Google Analytics