SQL-分页查询offset的用法

今天在做一道关于查询一张表中第二高工资的问题时发现没有思路,经过一番搜索发现需要用到offset偏移量来解决这个问题。

OFFSET关键字用于指定从结果集的哪一行开始返回数据。通常,它与LIMIT一起使用,以实现分页效果。其语法如下:
SELECT * FROM 表名 LIMIT 行数 OFFSET 偏移量;

或者

复制代码
SELECT * FROM 表名 LIMIT 行数 , 偏移量;

那么上述问题中要查询第二高的工资正确写法应该如下:

复制代码
SELECT  salary FROM employee order by salary DESC limit 1,1

后续更新:

在实际使用中发现这两种用法还是有区别的:

举个例子:

我有一张trip表,里面有10条记录,如下:

我现在使用第一种用法对它进行查询:

sql 复制代码
SELECT * FROM `trips` LIMIT 2 offset 3;

结果如下:

这里看id就行,主要看是查询出来的是第几条数据,可以看到查出来的是第4和5条数据。即这条语句实际上是offset 3: 先从第一条数据开始向后偏移3条数据,然后limit 2:输出偏移后的两条数据。

再看第二种用法:

sql 复制代码
SELECT * FROM `trips` LIMIT 2,3;

结果如下:

可以看到这里查出来是3条数据,从id=3开始,到5结束。那么这条语句其实是limit2,3中的第一个数字2先控制从第一条数据开始向后偏移两条数据,然后3 是输出3条数据。可以注意到这种方法的两个数字和上面那种用法是刚好相反的,即这里的语句翻译成上面的语句应该是:

sql 复制代码
SELECT * FROM `trips` LIMIT 3 offset 2;

总结:

两种写法都能做到分页的效果,看个人选择,推荐还是用offset写法,这样不容易记错,看到offset就能想起他是偏移多少条数据。

相关推荐
giaz14n9X16 分钟前
Redis 分布式锁进阶第六十一篇
数据库·redis·分布式
是一个Bug21 分钟前
MongoDB:像搭积木一样存数据
数据库·mongodb
ULIi096kr38 分钟前
MySQL解决Too many connections报错:连接数爆满排查、优化与永久解决方案
数据库·mysql·adb
SL-staff1 小时前
(一)数据源配置 —— JVS-Rules规则引擎 V2.5 操作说明介绍
数据库·jar·规则引擎·数据源·jvs-rules·api 接口·jvs低代码
摇滚侠2 小时前
Spring 零基础入门到进阶 基于 XML 管理 Bean 14-28
xml·数据库·spring
Metaphor6922 小时前
使用 Python 给 PDF 设置背景色或背景图
数据库·python·pdf
Gauss松鼠会2 小时前
【GaussDB】GaussDB重要通信参数汇总
服务器·网络·数据库·sql·性能优化·gaussdb·经验总结
IvorySQL2 小时前
PostgreSQL 技术日报 (6月9日)|PL/SQL 迁移自动化,前沿峰会即将启幕
sql·postgresql·自动化
睡不醒男孩0308233 小时前
第五篇:2026年企业级 PostgreSQL 高可用方案深度横评:Patroni vs. CLup 架构与可靠性全面对决
数据库·postgresql·架构
NineData3 小时前
SQL 都在等锁时,ChatDBA 先帮 MySQL 找到谁在挡路
数据库·人工智能·sql·mysql·安全·数据复制·数据迁移工具