Oracle Fetch子句
Oracle Fetch子句
在本教程中,将学习如何使用Oracle FETCH子句来限制查询返回的行数。
Oracle FETCH子句简介
一些RDBMS(如MySQL和PostgreSQL)使用LIMIT子句来检索查询生成的一部分行记录。
请参阅示例数据库中的产品(products)和库存(inventories)表。两个表的结构和关系如下所示 -

以下查询使用LIMIT子句获得库存量最高的前5个产品:
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
LIMIT 5;
在此示例中,ORDER BY子句按降序对库存数量(quantity)进行排序,LIMIT子句仅返回库存数量最多的前5个产品。
Oracle数据库标准中没有LIMIT子句。 然而,自12c发布以来,它提供了一个类似但更灵活的子句,即行限制子句。
通过使用行限制子句,重写上面的LIMIT子句的查询,如下所示:
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
FETCH NEXT 5 ROWS ONLY;
注意:上面查询仅能在Orace 12c以上版本中运行。
如果使用的是Oracle 11g及以下版本的,请参考以下语句 -
SELECT
product_name, quantity
FROM
inventories
INNER JOIN products
USING(product_id)
WHERE rownum<=5
ORDER BY quantity DESC;
执行上面查询语句,得到以下结果 -

在这个语句中,行限制子句是:
FETCH NEXT 5 ROWS ONLY
与上面使用LIMIT子句的语句类似,行限制子句返回库存量最高的前5个产品。
Oracle FETCH子句语法
以下说明了行限制子句的语法:
[ OFFSET offset ROWS]
FETCH NEXT [ row_count | percent PERCENT ] ROWS [ ONLY | WITH TIES ]
OFFSET子句
OFFSET子句指定在行限制开始之前要跳过行数。OFFSET子句是可选的。 如果跳过它,则偏移量为0,行限制从第一行开始计算。
偏移量必须是一个数字或一个表达式,其值为一个数字。偏移量遵守以下规则:
- 如果偏移量是负值,则将其视为
0。 - 如果偏移量为
NULL或大于查询返回的行数,则不返回任何行。 - 如果偏移量包含一个分数,则分数部分被截断。
FETCH子句
FETCH子句指定要返回的行数或百分比。
为了语义清晰的目的,您可以使用关键字ROW而不是ROWS,FIRST而不是NEXT。 例如,以下子句的行为和产生的结果相同:
FETCH NEXT 1 ROWS
FETCH FIRST 1 ROW
ONLY | WITH TIES选项
仅返回FETCH NEXT(或FIRST)后的行数或行数的百分比。
WITH TIES返回与最后一行相同的排序键。请注意,如果使用WITH TIES,则必须在查询中指定一个ORDER BY子句。如果不这样做,查询将不会返回额外的行。
Oracle FETCH子句的例子
1. 获取前N行记录的示例
以下语句返回库存量最高的前10个产品:
-- 以下查询语句仅能在Oracle 12c以上版本执行
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
FETCH NEXT 5 ROWS ONLY;
执行上面查询语句,得到以下结果 -

2. WITH TIES示例
以下查询使用WITH TIES选项的行限制子句:
-- 以下查询语句仅能在Oracle 12c以上版本执行
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
FETCH NEXT 10 ROWS WITH TIES;
执行上面示例查询语句,得到以下结果 -

即使查询请求了10行数据,因为它具有WITH TIES选项,查询还返回了另外两行。 请注意,这两个附加行在quantity列的值与第10行quantity列的值相同。
3. 以百分比限制返回行的示例
以下查询返回库存量最高的前1%的产品:
-- 以下查询语句仅能在Oracle 12c以上版本执行
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
FETCH FIRST 1 PERCENT ROWS ONLY;
执行上面示例查询语句,得到以下结果 -

库存(inventories)表总共有1112行,因此,1112中的1%是11.1,四舍五入为12(行)。
4. OFFSET示例
以下查询将跳过库存量最高的前10个产品,并返回接下来的10个产品:
-- 以下查询语句仅能在Oracle 12c以上版本执行
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
注意:这个功能可以用于分页的实现。
执行上面查询语句,得到以下结果 -

在本教程中,您已学习如何使用Oracle FETCH子句来限制查询返回的行。
Oracle Fetch子句的更多相关文章
- Oracle Like子句
Oracle Like子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,您将学习如何使用Oracle LIKE运算符来测试列中的值是否与指定 ...
- Oracle Between子句
Oracle Between子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,您将学习如何使用Oracle BETWEEN运算符来选择值在一 ...
- Oracle In子句
Oracle In子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,您将学习如何使用Oracle IN运算符来确定值是否与列表或子查询中的任 ...
- Oracle Or子句
Oracle Or子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,我们来学习如何使用Oracle OR运算符来组合两个或更多的布尔表达式. ...
- Oracle And子句
Oracle And子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,将学习如何使用Oracle AND运算符来组合两个或更多的布尔表达式. ...
- Oracle Where子句
Oracle Where子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,将学习如何使用Oracle WHERE子句来指定过滤的条件返回符合 ...
- SQL Server2012 Offset Fetch子句 分页查询
在本教程中,将学习如何使用SQL Server OFFSET FETCH子句来限制查询返回的行数.OFFSET和FETCH子句是ORDER BY子句的选项. 它们用于限制查询返回的行数.以下是OFFS ...
- oracle排序子句的特殊写法与ORA-01785错误
刚刚写的SQL语句在执行的时候报[ORA-01785: ORDER BY item must be the number of a SELECT-list expression]错误,于是自己百度了一 ...
- oracle SELECT子句中避免使用 ‘ * ‘
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法. 不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将’*’ 依次转换成所 ...
随机推荐
- VM CentOS建立共享文件夹实现VS Code在windows环境下go开发,在centos环境里编译
简介 笔记本没办法更换系统,但是开发又必须在linux环境下进行,直接在vm界面环境下开发,卡的都蒙13.无奈之下想到这个法子,来解决现有尴尬的局面>>> 共分3个部分安装: (1) ...
- Java第五周作业+总结
实验三 String类的应用 实验目的 掌握类String类的使用: 学会使用JDK帮助文档: 实验内容 1.已知字符串:"this is a test of java".按要求执 ...
- jmeter应用之批量插入数据
上一篇讲到如何在jmeter中配置并连接使用mysql数据库,这一节主要是讲数据库连接的简单应用——批量插入数据 总体步骤如下: 1)新建线程组和添加JDBC Connection Configura ...
- IDEA 快捷键 (长期更新)
自动清除无效 import 和 清除无效 import ctrl+alt+o
- 哈希hash
定义 是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值 生成方法 hash() 哈希特性 不可逆 :在具备编码功能的同时,哈希算法也作为一种加密算 ...
- 并查集专题: HDU1232畅通工程
畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- python学习笔记(1):python基础
python基础回顾 1.Ipython魔术命令 %timeit //多次执行一条语句,并返回平均时间,%%time->多条语句,用于测试一条语句用了多少时间 %time //返回执行一条语句的 ...
- css控制文本内容显示省略号
1,单行文字显示省略号 div{ width:200px; overflow:hideen; white-space:nowrap; text-overflow:ellipsis; } 2,多行文字显 ...
- 封装class类--分割类名后
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- dsLinq.Count() 引发了“System.NullReferenceException”类型的异常
DataTable dt = PurchaseArriveInfoBus.GetPurchaseArriveInfo(companyCD, txtArriveNo, txtTitle, txtProv ...