ORDER BY 对结果行进行排序;LIMIT(与 OFFSET 一起)限制返回的行数。它们一起处理排序和分页 — 对于显示有序的、分页的数据至关重要。
ORDER BY — 排序
name, age users age;
name, age users age ;
users country, name;
users created_at ;
ORDER BY 对结果行进行排序;LIMIT(与 OFFSET 一起)限制返回的行数。它们一起处理排序和分页 — 对于显示有序的、分页的数据至关重要。
name, age users age;
name, age users age ;
users country, name;
users created_at ;
ORDER BY 按一列或多列排序,升序(默认)或 DESC。多列提供打破平局的功能(按第一列排序,然后对相等值按第二列排序)。
SELECT * FROM users ORDER BY name LIMIT 10; -- the first 10 rows
SELECT * FROM users ORDER BY name LIMIT 10 OFFSET 20; -- skip 20, take 10 (page 3)
-- (syntax varies: MySQL/Postgres use LIMIT/OFFSET; SQL Server uses TOP / OFFSET-FETCH)
LIMIT n 返回最多 n 行;OFFSET m 跳过前 m 行。它们一起实现 offset 分页(第 N 页 = LIMIT pageSize OFFSET (N-1)*pageSize)。
-- ❌ LIMIT without ORDER BY → row order is UNDEFINED (inconsistent pages!)
SELECT * FROM users LIMIT 10;
-- ✅ always ORDER BY a stable column for consistent pagination
SELECT * FROM users ORDER BY id LIMIT 10;
至关重要: 没有 ORDER BY,数据库可能以任意顺序返回行,导致页面重叠或跳过行。分页时始终按稳定列排序。
⚠️ LIMIT 10 OFFSET 1000000 — the DB must SKIP a million rows first (slow on deep pages).
For large datasets, KEYSET (cursor) pagination is far more efficient:
WHERE id > :last_seen_id ORDER BY id LIMIT 10 -- uses an index, no skipping
ORDER BY 和 LIMIT 是以有用、易管理的方式显示数据的基础 — 对结果排序并返回页面而非整个表是一项几乎普遍的需求(应用程序中的任何列表、表格或动态源),因此理解它们是日常必备知识。ORDER BY(按一列或多列排序,带有打破平局)对于以有意义的顺序呈现数据是必需的,LIMIT/OFFSET 实现 分页(返回易管理的数据页)— 两者在应用程序中随处可见。
两个实用要点特别重要:分页时始终使用 ORDER BY(没有它,行顺序未定义,导致不一致的页面,可能重叠或跳过行 — 一个真实的、常见的 bug),以及理解 OFFSET 分页在深页面上性能下降(数据库必须跳过所有前面的行,对于大偏移量变得缓慢),所以 keyset/cursor 分页(WHERE id > last_seen)对大型数据集效率高得多 — 这是性能方面的宝贵知识。
由于排序和分页对于几乎任何数据显示都是必需的,而且一致性要求(用于稳定分页的 ORDER BY)和性能考虑(OFFSET 与大数据的 keyset)直接影响正确性和速度,掌握 ORDER BY 和 LIMIT — 排序、offset 分页、稳定排序要求以及大规模的 keyset 替代方案 — 是构建能有效呈现数据的应用程序的核心、频繁应用的知识。