当前位置: 首页 > news >正文

第4节-排序和限制-FETCH

摘要: 在本教程中,你将学习如何使用 PostgreSQLFETCH 子句从查询中检索部分行。

PostgreSQL FETCH 简介

PostgreSQL 中,OFFSET 子句的作用类似于 LIMIT 子句。FETCH 子句允许你限制查询返回的行数。

LIMIT 子句并非 SQL 标准的一部分。不过,FETCH 子句是 SQL:2008 标准的一部分。如果您希望您的应用程序在未来支持其他数据库,请使用 FETCH 而非 LIMIT ,因为其他数据库供应商很可能会支持它。

以下是 OFFSET FETCH 子句的语法:

SELECT column1, column2
FROM table_name
ORDER BY sort_expression
OFFSET skip_count
FETCH { FIRST | NEXT } ] [row_count] {ROW | ROWS } ONLY;

在此语法中:

首先,在 FROM 子句中指定你想要检索数据的表的名称。

其次,在 SELECT 子句中限制最终结果集中要包含的行中的哪些列。

第三,使用 ORDER BY 子句按一列或多列中的值对行进行排序。

第四,在 FETCH 子句返回行的子集之前,在 OFFSET 子句中提供要跳过的行数:

OFFSET skip_count

skip_count 用于确定要跳过的行数。它可以是零或正整数。如果 skip_count 为零,查询将不会跳过任何行。

OFFSET 子句是可选的。如果省略该子句,查询也不会跳过任何行。

第五,在 FETCH 子句中设置要返回的行数 (row_count)

row_count 的默认值为 1,这意味着如果省略它,FETCH 将从查询中返回一行数据。

你可以交替使用 FIRSTNEXTROW 以及 ROWS ,因为它们是同义词。

例如:

FETCH FIRST 1 ROW ONLY;
FETCH FIRST ROW ONLY;
FETCH FIRST 10 ROWS ONLY;
FETCH NEXT 1 ROW ONLY;
FETCH NEXT ROW ONLY;
FETCH NEXT 10 ROWS ONLY;

设置示例表

我们将使用在 LIMIT 教程中创建的 products 表来练习 FETCH 子句。

以下是创建 products 表并插入一些行的SQL脚本。

CREATE TABLE products (product_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,name VARCHAR(255) NOT NULL,price DECIMAL(10, 2)
);INSERT INTOproducts (name, price)
VALUES('iPhone 16 Pro Max', 1649.00),('iPhone 16', 829.00),('Galaxy S24 Ultra', 1299.99),('Galaxy S24 FE', 949.99),('Pixel 9 Pro', 799.00),('Pixel 8a', 399.00),('OnePlus 12', 745.00),('OnePlus Open', 1514.99),('Galaxy Z Fold 6', 2019.99);
product_idnameprice
1iPhone 16 Pro Max1649.00
2iPhone 16829.00
3Galaxy S24 Ultra1299.99
4Galaxy S24 FE949.99
5Pixel 9 Pro799.00
6Pixel 8a399.00
7OnePlus 12745.00
8OnePlus Open1514.99
9Galaxy Z Fold 62019.99

获取第一行

以下语句使用 FETCH 子句从 products 表中查询最昂贵的产品:

SELECTname,price
FROMproducts
ORDER BYprice DESC
FETCH FIRST ROW ONLY;

输出:

      name       |  price
-----------------+---------Galaxy Z Fold 6 | 2019.99

获取一些行

以下示例使用 FETCH 子句从 products 表中检索价格最高的三种产品:

SELECTname,price
FROMproducts
ORDER BYprice DESC
FETCH FIRST 3 ROWS ONLY;

输出:

       name        |  price
-------------------+---------Galaxy Z Fold 6   | 2019.99iPhone 16 Pro Max | 1649.00OnePlus Open      | 1514.99

在获取之前跳过一些行

以下语句使用 OFFSETFETCH 子句从 products 表中获取第二贵的产品:

SELECTname,price
FROMproducts
ORDER BYprice DESC
OFFSET 1
FETCH NEXT 1 ROW ONLY;

输出:

       name        |  price
-------------------+---------iPhone 16 Pro Max | 1649.00

使用 PostgreSQLFETCH 子句进行分页

FETCH 子句有助于实现分页:

OFFSET record_per_page * (page_no - 1)
FETCH NEXT record_per_page ROWS ONLY.

在此语法中:

  • record_per_page 是每页的记录数量。
  • page_no 是页码,例如 1、2、3

假设你希望每页显示3个产品 (record_per_page) ,并想获取第2页的产品 (page_no),你可以使用以下查询:

SELECTname,price
FROMproducts
ORDER BYprice DESC
OFFSET 3 * (2 - 1)
FETCH NEXT 3 ROW ONLY;

输出:

       name       |  price
------------------+---------Galaxy S24 Ultra | 1299.99Galaxy S24 FE    |  949.99iPhone 16        |  829.00

总结

  • 使用 PostgreSQLFETCH 从查询中返回部分行。
  • 使用 OFFSET FETCH 在返回部分行之前跳过一些行。

文章转载自:

http://aTlbvOg8.qpfmh.cn
http://p4KFXmXK.qpfmh.cn
http://INsWByWV.qpfmh.cn
http://DpvNTW1x.qpfmh.cn
http://CpozhvS0.qpfmh.cn
http://f2FoQtOv.qpfmh.cn
http://h7KziD9R.qpfmh.cn
http://w206R9GT.qpfmh.cn
http://TOnV9zmc.qpfmh.cn
http://aoy2Jj7i.qpfmh.cn
http://zIKpCIv6.qpfmh.cn
http://AzMq2MYt.qpfmh.cn
http://2of4jNlR.qpfmh.cn
http://lqpuKPvn.qpfmh.cn
http://fgkCOUIw.qpfmh.cn
http://OZguRIWn.qpfmh.cn
http://VSP85y1R.qpfmh.cn
http://MotOHvCW.qpfmh.cn
http://QipRYPza.qpfmh.cn
http://yD5K5ZGk.qpfmh.cn
http://6882Fws7.qpfmh.cn
http://vBhGEwn0.qpfmh.cn
http://ImbmISCC.qpfmh.cn
http://HwNl7AeJ.qpfmh.cn
http://gnu7NI3c.qpfmh.cn
http://FaXonKFH.qpfmh.cn
http://bXGFdCX8.qpfmh.cn
http://9N5Vz2TV.qpfmh.cn
http://NnnD3CuC.qpfmh.cn
http://j5BoG5Sj.qpfmh.cn
http://www.dtcms.com/a/379595.html

相关文章:

  • 2025.9.11总结
  • 三大范式是什么?
  • 传统文化与现代科技的完美融合:文昌帝君灵签系统开发实践
  • 避坑指南:从原理出发解决常见问题
  • 什么是特征冗余度?
  • 数据结构----栈的顺序存储(顺序栈)
  • Java 线上问题排查:从基础到高级的全面指南
  • 浅谈Nacos配置中心
  • 美国CISA发布通用漏洞披露 (CVE) 计划愿景
  • 软考中级习题与解答——第五章_面向对象方法(1)
  • 硬件驱动——I.MX6ULL裸机启动(2)
  • Linux 进程深度解析(6):资源隔离的底层实现 (Namespace、Cgroups 与容器化)
  • 【AI大模型面试宝典60题】1-5
  • AUTOSAR Adaptive Platform 日志与追踪 (Log and Trace) 规范深度解析
  • Claude Code + 自定义模型体验
  • Python 实战:票据图像自动矫正技术拆解与落地教程
  • 【Kubernetes】常见面试题汇总(十四)
  • 【 Rank(列)、DIMM(内存条) 和 DDR颗粒(内存芯片) 的区别】
  • 密钥协商与前向/后向安全性
  • UART 总线核心特性
  • CDN(Content Delivery Network,内容分发网络)
  • EMC电磁兼容进阶3讲培训:专题二 电源线滤波器仿真实践-基于反激电源
  • 2.DSP学习记录之GPIO输出应用实验
  • WSL2 | 一种临时解决在 Windows 10 运行了一段时间 WSL2 之后 WSL2 无响应的方法
  • SPARC方法论在Claude Code基于规则驱动开发中的应用
  • Python编程基础(九) | 文件和异常
  • AWS IAM条件操作符实战指南:从基础到高级应用
  • SW - 无法用此剖切线来剖切此模型/零部件。请确认该剖切线完全通过该模型。
  • 【主页介绍】
  • 数据治理进阶——解读2024 企业数据治理体系和应用场景案例【附全文阅读】