您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SQL Limit & Offset

1. 定义

编程之家解释: Limit用于对结果集进行限制;Offset 则常与 Limit 搭配,意为偏移,表示跳过一定的记录。

2. 前言

本小节,我们将一起学习 中的LimitOffset

在实际的开发中,我们可能常常会遇到以下场景:

获得分数的前 5 名。

数据。

这些场景需要细粒度地控制数据,因此 引入了 Limit 和 Offset 来帮助开发者。

本小节测试数据如下,请先在中执行:

DROP TABLE IF EXISTS imooc_user;CREATE TABLE imooc_user(
  id int PRIMARY KEY,
  username varchar(),
  age int,
   int);INSERT INTO imooc_user(id,username,age,)VALUES (,'peter', , ),(,'pedro', , ),(,'jerry', , ),(,'mike', , ),(,'tom', , );

理论上 Limit 指令就能实现 Limit + Offset 的全部,但一些为了保持彼此的兼容性,仍然提供了Offset。

3. Limit

Limit 后面可接受参数或者两个参数;当接受参数count时,表示返回的结果集最多有 count 条。

语法如下:

SELECT [col] FROM [table_name] LIMIT [count];

其中col表示字段名,table_name表示数据表,count代表限制。

请书写 语句,返回imooc_user表中年龄最大的3位。

分析:

题干中指出只需返回 3 位,因此需用到 Limit 限制;且年龄应该为最大的 3 位,因此结果集应按照年龄降序排序,即 ORDER BY age DESC。

语句:

整理可得语句如下:

SELECT username,age FROM imooc_user ORDER BY age DESC LIMIT ;

结果如下:

+----------+-----+
| username | age |
+----------+-----+
| pedro    | 24  |
| jerry    | 24  |
| tom      | 20  |
+----------+-----+

Limit 后面使用双参数时,第参数表示偏移量,即 offset,表示从几个记录后开始返回,第二个参数表示最大,即 count,表示最多返回几个记录。我们合起来可以理解为,跳过一定(offset)的记录,返回最多 count 个记录。

语法如下:

SELECT [col] FROM [table_name] LIMIT [offset],[count];

其中col表示字段名,table_name表示数据表,offset是偏移量,count是最大。

请书写语句,返回imooc_user表中年龄由大到小的第 2 位到第 4 位。

分析:

题干中指出只需返回年龄的第 2 位到第 4 位,因此需用到 Limit 限制和偏移;且年龄由大到小,因此结果集应按照年龄降序排序,即 ORDER BY age DESC。

语句:

整理可得语句如下:

SELECT username,age FROM imooc_user ORDER BY age DESC LIMIT ,;

结果如下:

+----------+-----+
| username | age |
+----------+-----+
| jerry    | 24  |
| tom      | 20  |
| peter    | 18  |
+----------+-----+

第 2 位到第 4 位共 3 位,因此 LIMIT 的第参数为 1,跳过第 1 个,第二个参数为 3。

4. Offset

Offset 必须与 Limit 搭配使用,且二者都必须是单参数形式。Limit 和 Offset 搭配的作用等同于 Limit 使用双参数。

语法如下:

SELECT [col] FROM [table_name] LIMIT [count] OFFSET [offset];

其中col表示字段名,table_name表示数据表,offset是偏移量,count是最大。

请书写 语句,返回imooc_user表中年龄由大到小的第 2 位到第 4 位。

分析:

题干中指出只需返回年龄的第 2 位到第 4 位,因此需用到 Limit 限制,Offset 来表示偏移;且年龄由大到小,因此结果集应按照年龄降序排序,即 ORDER BY age DESC。

语句:

整理可得语句如下:

SELECT username,age FROM imooc_user ORDER BY age DESC LIMIT 3 OFFSET 1;

结果如下:

+----------+-----+
| username | age |
+----------+-----+
| jerry    | 24  |
| tom      | 20  |
| peter    | 18  |
+----------+-----+

第 2 位到第 4 位共 3 位,因此 offset 应是 1,跳过第 1 位,count 应是 3。

5. 小结

Limit 和 Offset 常搭配用于数据,是很多工具的核心操作。

Limit 其实完全可以替代 Limit + Offset,但考虑到语句的可读性,Limit + Offset的写法更好。


联系我
置顶