- Oracle数据库是什么?
- Oracle 11g安装教程
- Oracle 12C安装
- Oracle数据库和实例
- 连接到Oracle数据库
- Oracle示例数据库
- 导入Oracle示例数据库
- Oracle基础入门
- Oracle数据定义
- Oracle数据类型
- Oracle修改数据
- Oracle查询数据
- Oracle连接表
- Oracle操作符
- Oracle约束
- Oracle高级部分
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 Or子句
下一篇:Oracle In子句
扫描二维码
程序员编程王