当前位置: 首页 > 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.dtcms.com/a/362719.html

相关文章:

  • 企业数字安全守护神:IT运维管理系统全面解析,构建坚不可摧的防护体系
  • 简陋的RPC
  • 从代码到组件:C语言动态库(DLL)封装与使用终极指南
  • NV115NV119美光固态闪存NV129NV112
  • 加速交通云建设,移动云为我国交通强国目标提供有力支撑
  • AES-GCM和(AES-CBC+SHA2-25-HAMC组合,并且发方通过每次内容,更新iv,填序使用递增数字)算法比较
  • 系统科学核心概念辨析及其在人工智能领域的应用研究:一个整合性分析框架
  • 分布式光纤传感选型 3 问:你的场景该选 DTS、DAS 还是 BOTDA?
  • 解锁WebRTC在数字人领域的无限潜能
  • 面试问题:c++的内存管理方式,delete的使用,vector的resize和reverse,容量拓展
  • 大数据量模块设置渲染性能优化
  • 白电三巨头 2025 年战局:美的领跑破局,海尔稳健筑垒,格力承压求变
  • Spring 中 Hikari 与 Druid 的详细介绍、对比及同类组件分析
  • go-mapus最简单的离线瓦片地图协作
  • 【Linux系统】万字解析,进程间的信号
  • 并发编程——13 线程池ThreadPoolExecutor实战及其原理分析
  • md5sum -c用法详解
  • 【Vue2 ✨】Vue2 入门之旅(八):过渡与动画
  • 基础文本处理工具与文本三剑客其二sed awk
  • unity 中的 gradle building 加速(可能无用,导致包体异常)
  • 【C++详解】C++11(三) 可变参数模板、包扩展、empalce系列接⼝、新的类功能
  • MyBatis:让 SQL 与代码和谐共处的持久层框架
  • React学习教程,从入门到精通, React 入门指南:React JSX 语法知识点详解及案例代码(8)
  • React 学习笔记4 Diffing/脚手架
  • go命令行工具:如何在现有的工程里加入使用cobra
  • 01 - 网页和web标准
  • AI文档产品与传统OCR软件的根本区别是什么?
  • Java集合源码解析之LinkedList
  • HTTPS如何保证数据传输过程中的安全性?
  • mapbox高阶,结合threejs(threebox)添加管道,实现管道流动效果