ORDER BY
ORDER BY 给查询结果排序——升序还是降序、按哪一列排,全由你定。不加 ORDER BY 的查询,返回顺序是不确定的。数据库可能按物理存储顺序、索引顺序或任何它觉得方便的顺序返回,今天和明天的顺序可能不一样。只有加上 ORDER BY,结果顺序才是可预期的。
默认是升序(ASC),从小到大。要降序就加 DESC。可以按多列排序:ORDER BY dept_code ASC, basic_salary DESC 表示先按部门升序,同一部门内再按工资降序。排序的列可以是列名、列别名,甚至可以是 SELECT 列表中的位置编号(如 ORDER BY 2 DESC,但不推荐,可读性差)。
排序有性能代价。大数据量排序需要内存或磁盘临时文件,如果 ORDER BY 的列上有索引,数据库可以直接按索引顺序读取,省去排序步骤。ORDER BY 和 LIMIT 是黄金搭档——先排序再截断,才能稳定拿到"最高的 N 个"。
以飞翔科技为例:
-- 按工资从高到低排
SELECT emp_name, basic_salary
FROM employees
ORDER BY basic_salary DESC;
-- 先按部门升序,再按工资降序
SELECT emp_name, dept_code, basic_salary
FROM employees
ORDER BY dept_code ASC, basic_salary DESC;
-- 飞翔小店商品按价格从低到高
SELECT product_name, price
FROM products
WHERE shop_name = '飞翔小店'
ORDER BY price ASC;
-- 租房合同按租金降序,取前 5 条
SELECT community, monthly_rent
FROM rental_contracts
ORDER BY monthly_rent DESC
LIMIT 5;