基本语法
SELECT 字段列表
FROM 表名
[WHERE 条件]
ORDER BY 字段1 [ASC|DESC], 字段2 [ASC|DESC], ...;
`ASC`:升序排列(默认值,可省略)
`DESC`:降序排列
排序方式
1. 单字段排序
按身高升序排列(默认ASC)
SELECT * FROM tb_students_info ORDER BY height;
按身高降序排列
SELECT * FROM tb_students_info ORDER BY height DESC;
2. 多字段排序
先按身高降序,再按姓名升序
SELECT name, height FROM tb_students_info
多字段排序规则:
首先按第一个字段排序
当第一个字段值相同时,再按第二个字段排序
以此类推
3. 按表达式排序
按姓名长度排序
SELECT name, LENGTH(name) AS name_length FROM tb_students_info ORDER BY LENGTH(name) DESC;
4. 按字段位置排序
按SELECT中的第2列(height)排序
SELECT name, height FROM tb_students_info ORDER BY 2 DESC;
特殊排序情况
1. NULL 值处理
默认情况下,NULL 值被视为最小值
在升序排序中出现在最前面,降序排序中出现在最后面
假设height可能有NULL值
SELECT name, height FROM tb_students_info ORDER BY height
将NULL值放在最后(升序时)
SELECT name, height FROM tb_students_info ORDER BY IF(ISNULL(height), 1, 0, height;
2. 自定义排序顺序
按自定义部门顺序排序
SELECT name, dept_id FROM tb_students_info ORDER BY FIELD(dept_id, 3, 1, 4, 2, 6);
高级排序技巧
1. 与 LIMIT 结合使用
获取身高最高的5名学生
SELECT name, height FROM tb_students_info ORDER BY height DESC LIMIT 5;
2. 与 DISTINCT 结合使用
获取不同的年龄并按降序排列
SELECT DISTINCT age FROM tb_students_info ORDER BY age DESC;
3. 与聚合函数结合使用
按平均身高排序各部门
SELECT dept_id, AVG(height) AS avg_height FROM tb_students_info GROUP BY dept_id ORDER BY avg_height DESC;
性能优化建议
1. 为排序字段建立索引:特别是经常用于排序的字段
2. 避免排序大结果集:尽量使用 WHERE 子句先过滤数据
3. 注意混合排序方向:`ORDER BY 字段1 ASC, 字段2 DESC` 可能无法有效使用索引
4. 使用覆盖索引:如果只需要索引列,可以减少排序操作
5. 限制排序数据量:结合 LIMIT 使用
实际应用示例
示例1:电商产品排序
按价格从低到高,评分从高到低排序
SELECT product_name, price, rating FROM products WHERE category = 'electronics' ORDER BY price ASC, rating DESC;
示例2:学生成绩排名
按总分降序排列,同分时按数学成绩降序
SELECT student_name, (math_score + english_score + science_score) AS total_score, math_score FROM exam_results ORDER BY total_score DESC, math_score DESC;
示例3:分页排序查询
第2页,每页10条,按注册时间降序
SELECT user_id, username, register_date FROM users ORDER BY register_date DESC LIMIT 10 OFFSET 10;
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程