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

PostgreSQL(1) FETCH用法

摘要

在本教程中,您将学习如何使用 PostgreSQL 的 FETCH 子句来只检索查询结果中的一部分行。

SELECT 语句中,如果要跳过若干行并仅取回指定数量的行,通常会使用 LIMIT 子句。

LIMIT 子句被 MySQL、H2、HSQLDB 等许多关系型数据库管理系统广泛使用。然而,LIMIT 并不是 SQL 标准的一部分。

为了符合 SQL 标准,PostgreSQL 支持 FETCH 子句:可以先跳过一定数量的行,然后再取回指定数量的行。

注意:FETCH 子句是在 SQL 标准的 SQL:2008 中引入的。

语法

OFFSET row_to_skip { ROW | ROWS }
FETCH { FIRST | NEXT } [ row_count ] { ROW | ROWS } ONLY

说明:

  • 首先在 OFFSET 关键字后指定要跳过的行数 row_to_skip。它是一个大于或等于 0 的整数,默认值为 0(即不跳过任何行)。
  • 如果 row_to_skip 大于表中的总行数,查询将返回 0 行。
  • 其次在 FETCH 子句中提供要取回的行数 row_countrow_count 必须是大于或等于 1 的整数,默认值为 1。
  • ROWROWS 的同义词,FIRSTNEXT 的同义词,二者可以互换使用。
  • 由于表中行的物理存储顺序未定义,应始终配合 ORDER BY 使用 FETCH 子句,以确保行的顺序一致。
  • 在 SQL:2008 中,OFFSET 必须位于 FETCH 之前;但在 PostgreSQL 中,OFFSETFETCH 的先后顺序可以任意。
  • FETCH 在功能上等价于 LIMIT。如果希望应用更符合其他数据库系统的标准实现,建议使用遵循标准 SQL 的 FETCH 子句。

示例

下面使用 sample database 中的 film 表进行演示。

以下查询使用 FETCH 子句,按标题升序选择第一条影片记录:

SELECTfilm_id,title
FROMfilm
ORDER BYtitle
FETCH FIRST ROW ONLY;

输出:

 film_id |      title
---------+------------------1 | Academy Dinosaur
(1 row)

这等价于:

SELECTfilm_id,title
FROMfilm
ORDER BYtitle
FETCH FIRST 1 ROW ONLY;

以下查询使用 FETCH 子句,按标题升序选择前五条影片记录:

SELECTfilm_id,title
FROMfilm
ORDER BYtitle
FETCH FIRST 5 ROW ONLY;

输出:

 film_id |      title
---------+------------------1 | Academy Dinosaur2 | Ace Goldfinger3 | Adaptation Holes4 | Affair Prejudice5 | African Egg
(5 rows)

下面的语句在按标题升序的基础上,跳过前五条记录后再取回接下来的五条记录:

SELECTfilm_id,title
FROMfilm
ORDER BYtitle
OFFSET 5 ROWS
FETCH FIRST 5 ROW ONLY;

输出:

 film_id |      title
---------+------------------6 | Agent Truman7 | Airplane Sierra8 | Airport Pollock9 | Alabama Devil10 | Aladdin Calendar
(5 rows)

要点

  • 使用 PostgreSQL 的 FETCH 子句,可以跳过一定数量的行并取回指定数量的行。您可与 ORDER BY 搭配来确保结果顺序一致,必要时也可用 OFFSET 来实现分页。
http://www.xdnf.cn/news/1435915.html

相关文章:

  • 【MySQL体系结构详解:一条SQL查询的旅程】
  • 《一篇拿下!C++:类和对象(中)构造函数与析构函数》
  • Java 21 虚拟线程 + 分布式调度深度实战:从原理到落地,大促日志同步效率提升 367%
  • 基于SpringBoot的校园资料分享平台
  • Mysql数据库基础(上)
  • 第1章:VisualVM 简介与安装
  • 东土科技战略升级:成立半导体子公司,赋能国产半导体智能化升级
  • 基于 HTML、CSS 和 JavaScript 的智能图像锐化系统
  • HTML第五课:求职登记表
  • 【实时Linux实战系列】基于实时Linux的农业自动化系统开发
  • C++ numeric库简介与使用指南
  • 项目解析:技术实现与面试高频问题
  • Linux - 进程切换
  • Git在idea中的实战使用经验(一)
  • 【TRAE调教指南之MCP篇】Exa MCP:治疗AI幻觉的有效方案
  • 构建企业级区块链网络:基于AWS EC2的弹性、高可用解决方案
  • CICD 持续集成与持续交付
  • GDB 调试
  • 第4章:内存分析与堆转储
  • 命令行文本处理小工具:cut、sort、uniq、tr 详解与应用
  • EMQX 4.4 加mysql认证
  • BandiZip下载与详细图文安装教程!!
  • docker 安装 redis 并设置 volumes 并修改 修改密码(二)
  • 构建可扩展的 AI 应用:LangChain 与 MCP 服务的集成模式
  • C++算法学习:位运算
  • ECMWF数据批量下载(Windows版本)
  • Ngene:实验设计的尖端利器
  • 洛谷P3811 【模板】模意义下的乘法逆元
  • Linux操作系统(6)
  • java-设计模式-3-创建型模式-原型