🗄️ 第三章 操作数据库-SQL的使用方法
📄 一句话概括

ORDER BY 给查询结果排队——ASC 升序(默认)、DESC 降序,还能多列接力排。

📝 本节和前面几节的关系

查询主线进展:会竖切(3-7)、会横切(3-8~3-10)、会增删改(3-6/3-11/3-12);本节起给结果【加服务】——先排队,再限量(3-14),然后上函数算总账。

一、升降序两个词

2-2 说过【表里的记录不分先后】——要顺序,查询时用 ORDER BY 现排:

-- 准备块(没建表先跑 3-6 的准备块)

-- 按分数从低到高(ASC 升序,可省略不写)
SELECT * FROM students ORDER BY score ASC;

-- 按分数从高到低(DESC 降序,排行榜全靠它)
SELECT * FROM students ORDER BY score DESC;
词 意思 记法
ASC 升序(小→大) ascending,默认值
DESC 降序(大→小) descending,排行榜/最新优先

二、多列接力排

先按班级、同班内再按分数从高到低:

SELECT * FROM students ORDER BY class ASC, score DESC;

规则:先按第一列分块排,块内相同者再按第二列排——像运动会【先按年级排、同年级按成绩排】。

三、ORDER BY 在语句里的位置

一条查询的固定词序:SELECT → FROM → WHERE → ORDER BY。

SELECT name, score
FROM students
WHERE class = 1
ORDER BY score DESC;

——先筛出 1 班(WHERE),再把结果排队(ORDER BY)。先筛后排,词序写错 DBMS 直接报语法错。

四、动手 Demo:排行榜三连

-- ① 全班分数榜(降序)
SELECT name, score FROM students ORDER BY score DESC;

-- ② 按班级分块、块内分数降序
SELECT name, class, score FROM students ORDER BY class ASC, score DESC;

-- ③ WHERE + ORDER BY 组合:2 班的成绩榜
SELECT name, score FROM students WHERE class = 2 ORDER BY score DESC;

②的输出:

name  class  score
李四  1      92
张三  1      85
王五  2      78
赵六  2      64
钱七  3      <空>

注意钱七排最后——NULL 在排序里被当作最小(升序排最前、降序排最后,SQLite 口径;不同 DBMS 略有差异)。看到什么算成功:①92 打头、②块内有序、③只剩王五赵六。

五、30 秒实验

给文本列排序:SELECT name FROM students ORDER BY name DESC;——文字按字典序倒着排。再试 ORDER BY 1(按第 1 个输出列排)——能跑,但别用:列一换顺序就错排,正式代码永远写列名。

六、常见误区

  1. "表里的数据本来就有顺序" —— 没有。不写 ORDER BY 的查询顺序无保证;要顺序必须自己排。
  2. "ASC 可写可不写,DESC 也一样" —— ASC 确实是默认,但写明更好——读的人不用猜你想要哪种。
  3. "ORDER BY 写在 WHERE 前面" —— 词序固定【WHERE 在前】;顺序错了是语法错误。
自测三问(点开对答案) 1. 升序降序的关键词?谁是默认? **ASC 升序(默认)、DESC 降序**。 2. 多列排序的规则? **先按第一列排,相同者再按第二列接力**。 3. 一条查询的固定词序? **SELECT → FROM → WHERE → ORDER BY**——先筛后排。

相关笔记