15、limit 子句 返回指定的行数据

1、limit 子句返回指定的行数据

限制 SELECT 语句返回的行数。

命令: 

select  字段名  from 表名  LIMIT offset, row_count;        -- offset:偏移量,跳过前多少行,从offset + 1 行开始取;row_count:行数, 要返回多少行

limit 接受一个或两个数字参数。参数必须是一个整数常量。不支持负数、小数、表达式、变量

  • 给定一个参数,表示从第一行开始,返回 N 行记录;
  • 给定两个参数,表示分页查询,跳过前 X 行,从第 X + 1 行开始,取 N 行。偏移量从 0 开始(不是 1!)
参数类型含义注意事项
X 非负整数常量(可选) 起始偏移量(跳过前面多少行) 从 0 开始计数;默认为 0
N 非负整数常量 要返回的最大行数 必须 ≥ 0;若为 0,则返回空结果集

使用 LIMIT ... OFFSET ...

为了可读性和避免歧义,强烈建议使用标准 SQL 风格:

-- 清晰表达:取 4 行,跳过前 3 行
SELECT * FROM table LIMIT 4 OFFSET 3;            -- LIMIT 指定数量,OFFSET 指定跳过多少

记忆口诀:

  • 逗号写法:先跳后取;
  • OFFSET 写法:先取后跳

或:
  LIMIT M, N = LIMIT N OFFSET M

如:

LIMIT 3,4 的含义是:跳过前 3 行,然后取接下来的 4 行。即:从第 4 行开始,取 4 行数据(行号从 1 开始计数)。
-- 这等价于: LIMIT 4 OFFSET 3

例子

MariaDB [test]> select * from t1;
+----+------+------+
| id | name | sex  |
+----+------+------+
|  1 | q    |      |
|  2 | w    |      |
|  3 | er   | male |
|  4 | e    |      |
+----+------+------+
4 rows in set (0.00 sec)

MariaDB [test]> select * from t1 limit 1;
+----+------+-----+
| id | name | sex |
+----+------+-----+
|  1 | q    |     |
+----+------+-----+
1 row in set (0.00 sec)

MariaDB [test]> select * from t1 limit 1,2;
+----+------+------+
| id | name | sex  |
+----+------+------+
|  2 | w    |      |
|  3 | er   | male |
+----+------+------+
2 rows in set (0.00 sec)

-- 查询前 3 条
SELECT * FROM users LIMIT 0, 3;  -- 等价于 LIMIT 3
-- 结果:id=1,2,3

-- 查询第 4~6 条(跳过前3条,取3条)
SELECT * FROM users LIMIT 3, 3;
-- 结果:id=4,5,6

-- 查询第 2 页,每页 5 条(第6~10条)
SELECT * FROM users LIMIT 5, 5;
-- 结果:id=6,7,8,9,10

必须配合 ORDER BY 使用!

没有 ORDER BY 的 LIMIT 结果是不确定的!数据库可能以任意顺序返回行(取决于存储引擎、缓存等)

SELECT select_list
FROM table_name
[WHERE ...]
[ORDER BY ...]
LIMIT X, N;

 

posted @ 2025-11-19 09:51  chao_xiong  阅读(4)  评论(0)    收藏  举报