[特殊字符] 第9篇:《SQL高阶 SELECT 技巧:DISTINCT、ORDER BY、LIMIT 全家桶》
🎬 开场白:你以为 SELECT * 就够用了?
初学 SQL 的时候,大多数人都是从这句开始的:
SELECT * FROM 表名;
但现实的业务需求远远不止 “把所有都查出来”。
你可能会遇到:
- 查不重复的城市
- 看最贵的前3套房
- 只展示第一页的10条房源
- 按价格从高到低排序结果
这些事,全靠 SELECT 的"全家桶组合技"。
🍱 本期菜单
功能 | 关键字 | 用法举例 |
---|---|---|
去重查询 | DISTINCT | SELECT DISTINCT district |
排序 | ORDER BY | ORDER BY price DESC |
限制条数 | LIMIT | LIMIT 5 |
排名前几 | LIMIT + ORDER BY | ORDER BY xxx LIMIT n |
分页 | LIMIT + OFFSET | LIMIT 10 OFFSET 20 |
1️⃣ DISTINCT:去掉重复值
你只想知道有哪些区域,不想看到重复项?
SELECT DISTINCT district
FROM houses;
📌 只返回不重复的 district 值。
2️⃣ ORDER BY:排序查询结果
默认是升序(小 → 大),降序加 DESC。
SELECT * FROM houses
ORDER BY price DESC;
ORDER BY price
:从便宜到贵ORDER BY price DESC
:从贵到便宜
还可以多条件排序:
ORDER BY district ASC, price DESC
3️⃣ LIMIT:限制查询结果条数
✅ 查最贵的三套房:
SELECT title, price
FROM houses
ORDER BY price DESC
LIMIT 3;
4️⃣ LIMIT + OFFSET:分页神器
✅ 分页的常见逻辑:
比如你一页显示 10 条,想看第 3 页(也就是第 21-30 条):
SELECT * FROM houses
ORDER BY price DESC
LIMIT 10 OFFSET 20;
📌 OFFSET 是"跳过"的意思,先跳过 20 条,从第 21 条开始查。
5️⃣ LIMIT 用法口诀(分页实战记住!)
- 第一页:
LIMIT 10 OFFSET 0
- 第二页:
LIMIT 10 OFFSET 10
- 第三页:
LIMIT 10 OFFSET 20
- 第 N 页:
LIMIT 10 OFFSET (N-1)*10
你可以配合前端分页逻辑,让查询结果干净利索!
🧠 总结口诀
DISTINCT 去重别再重复烦,
ORDER BY 排个序,升降记心间。LIMIT 限条数,OFFSET 分页干,
TOP N 查询好搭档,组合技最关键。
🛠 小练习题
- 查出不重复的所有 district
SELECT DISTINCT district FROM houses;
- 查租金最贵的前 5 套房子
SELECT title, price
FROM houses
ORDER BY price DESC
LIMIT 5;
- 查出第 2 页的房源(每页 3 条)
SELECT *
FROM houses
ORDER BY house_id
LIMIT 3 OFFSET 3;