Oracle 限制行的子句
12c新特性
限制行的子句允许限制查询返回的行。可以指定偏移量,以及要返回的行数或百分比。您可以使用此子句实现Top-N报告。要获得一致的结果,请指定ORDER_by子句以确保具有确定性的排序顺序。
[ OFFSET offset { ROW | ROWS } ]
[ FETCH { FIRST | NEXT } [ { rowcount | percent PERCENT } ]
{ ROW | ROWS } { ONLY | WITH TIES } ]
OFFSET
使用此子句指定行限制开始前要跳过的行数。偏移量必须是数值或计算为数值的表达式。如果指定负数,则偏移量将被视为0。如果指定为空,或者指定的数字大于或等于查询返回的行数,则返回0行。如果偏移量包含小数,则小数部分被截断。如果不指定该子句,则偏移量为0,行限制从第一行开始。ROW和ROWS关键字的含义相同,同时提供单数和复数形式,会使OFFSET子句读起来更自然。
FETCH
使用此子句指定要返回的行数rowcount或百分比percent。如果不指定该子句,则返回所有行,从行号OFFSET+1开始到最后一行。FIRST和NEXT关键字的含义相同,用于澄清语义。
使用rowcount指定要返回的行数。rowcount必须是数值或计算结果为数值的表达式。如果指定一个负数,则行数将被视为0。如果行数大于行偏移量+1处开始的可用行数,则返回所有可用行。如果行数包含小数部分,则小数部分将被截断。如果rowcount为空,则返回0行。使用percent PERCENT指定要返回的选定行总数的百分比。百分比必须是数值或计算为数值的表达式。如果指定一个负数,则百分比将被视为0。如果百分比为空,则返回0行。如果不指定行数或百分比,则返回1行。ROW和ROWS关键字的含义相同,用于澄清语义。
关键字ONLY或WITH TIES应与ROW/ROWS关键字一起使用。ROW ONLY返回指定的行数或行百分比。ROW WITH TIES会通过检索上一行时使用的关键字,提取出其他行,但必须指定order by子句才有效。如果您没有指定ORDER_BY_子句,那么不会返回其他行。
本子句受以下限制:
不能将此子句与for_update子句一起指定。
如果指定此子句,则选择列表不能包含序列伪列currval或nextval。
如果定义查询包含行限制子句,则物化视图不符合增量刷新的条件。
如果选择列表包含具有相同名称的列,并且指定了row_limiting子句,则会发生ORA-00918错误。无论同名列在同一个表中还是在不同的表中,都会发生此错误。可以通过为同名列指定唯一的列别名来解决此问题。
示例:
返回employees中employee_id最低的5行:
SELECT employee_id, last_name
FROM employees
ORDER BY employee_id
FETCH FIRST 5 ROWS ONLY; EMPLOYEE_ID LAST_NAME
----------- -------------------------
100 King
101 Kochhar
102 De Haan
103 Hunold
104 Ernst
返回employees中employee_id最低的5行后的5行:
SELECT employee_id, last_name
FROM employees
ORDER BY employee_id
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY; EMPLOYEE_ID LAST_NAME
----------- -------------------------
105 Austin
106 Pataballa
107 Lorentz
108 Greenberg
109 Faviet
返回employees中salary最低的5%行:
SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary
FETCH FIRST 5 PERCENT ROWS ONLY; EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
132 Olson 2100
128 Markle 2200
136 Philtanker 2200
127 Landry 2400
135 Gee 2400
119 Colmenares 2500
返回employees中salary最低的5%行及salary等于最低5%的最后一行的其他行:
SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary
FETCH FIRST 5 PERCENT ROWS WITH TIES; EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
132 Olson 2100
128 Markle 2200
136 Philtanker 2200
127 Landry 2400
135 Gee 2400
119 Colmenares 2500
131 Marlow 2500
140 Patel 2500
144 Vargas 2500
182 Sullivan 2500
191 Perkins 2500
Oracle 限制行的子句的更多相关文章
- Oracle中“行转列”的实现方式
在报表的开发当中,难免会遇到行转列的问题. 以Oracle中scott的emp为例,统计各职位的人员在各部门的人数分布情况,就可以用“行转列”: scott的emp的原始数据为: EMPNO ENAM ...
- [转]Oracle 多行的数据合并
本文转自:http://www.2cto.com/database/201203/125287.html Oracle合并行范例 现有如下数据 id name 1 a1 2 a2 3 a3 1 b ...
- oracle学习----行级锁的理解
通过实验来理解行级锁的发生 1.创建需要的表 SQL> conn / as sysdba已连接.SQL> create table dept as select * from scott. ...
- Oracle 多行转多列
Oracle 多行转多列,列值转为列名 前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要到处问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的 ...
- Oracle多行记录合并的几种方法
今天正好遇到需要做这个功能,顺手搜了一下网络,把几种方法都列出来,方便以后参考. 1 什么是合并多行字符串(连接字符串)呢,例如: SQL> desc test; Name Type Nulla ...
- Oracle字符串行拆分成列的三种方式
Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...
- Oracle命令行中显示:ORA-04076: 无效的 NEW 或 OLD 说明
Oracle命令行进行操作时可能出现"ORA-04076: 无效的 NEW 或 OLD 说明" 需要在条件语句中JOB前面添加“old.”即可(因为是在when条件里面,所以不用“ ...
- Oracle 11g行字段拼接WMSYS.WM_CONCAT问题Not A LOB
Oracle 11g行字段拼接WMSYS.WM_CONCAT问题Not A LOB 一.问题出现 项目中的某个查询需要将表中某个字段不重复地拼接起来,百度得到该函数WMSYS.WM_CONCAT(字段 ...
- 面试题:oracle数据库行转列的问题
今天我一个学弟问了一个面试题: 有表A,结构如下:A: p_ID p_Num s_id1 10 011 12 022 8 013 11 013 8 03其中:p_ID为产品ID,p_Num为产品库存量 ...
随机推荐
- 图像基础知识之YUV
一.YUV常用格式 YUV是编译true-color颜色空间(color space)的种类,Y'UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠.“Y”表示明亮度(L ...
- ISO/IEC 9899:2011 引言
引言 1.伴随着新的设备以及扩展字符集的引入,可能会将新的特性添加到此国际标准中.在此语言和库条款中的子条款提醒了实现者与程序员可能会与将来所新增特性产生冲突的用法,尽管它们现在本身是合法有效的. 2 ...
- 前台页面long类型数字被四舍五入的解决办法
转: 前台页面long类型数字被四舍五入的解决办法 2018-05-28 11:02:38 宣午刚001 阅读数 3566更多 分类专栏: java开发 版权声明:本文为博主原创文章,遵循CC 4 ...
- 记RDS数据库表数据误删恢复
1.登录阿里云RDS后台,找到“备份”入口,如下图: 2.下载最近的备份数据,如下图: 3.解压,找到误删数据的表,如下图:(这里拿sys_role举例) 4.在本机(Windows系统), a. 装 ...
- 设置程序崩溃时产生 core 文件的配置
/* 不限制 core 文件的大小 */ ulimit -c unlimited /* 使用 pid 进行命名 */ echo " > /proc/sys/kernel/core_us ...
- JAVA windows环境配置,jdk的安装配置
一.需要的文件与下载1.jdk:jdk下载:二.安装与配置1.jdk安装与路径选择 双击安装,然后一直下一步,直至完成. 这是个人的自定义的安装目录路径(安装路径可在安装的时候自行选择,) 2.jdk ...
- python tkinter中的事件绑定
一个Tkinter主要跑在mainloop进程里.Events可能来自多个地方,比如按键,鼠标,或是系统事件. Tkinter提供了丰富的方法来处理这些事件.对于每一个控件Widget,你都可以为其绑 ...
- 修改mysql自增字段的方法
修改mysql自增字段的方法 修改 test_user 库 user 表 auto_increment为 10000(从10000开始递增) <pre>mysql> alter ta ...
- 「模拟赛20191019」C 推式子+贪心+树状数组
题目描述 给定一棵\(n\)个点的有根树,根节点编号为\(1\),点有点权. 定义\(d(v)\)表示\(v\)到\(1\)的路径上的边数. 定义\(f(v,u)\)在\(v<u\)且\(v\) ...
- 【知识总结】Polya 定理
我第一次听说 Polya 原理是 NOIP2017 以前,但我觉得太难想着以后再学: NOIP2018 以前我觉得会考这玩意,下定决心学,后来咕了: WC2019 以前我觉得会考这玩意,下定决心学,后 ...