SQL中order by如何使用 排序查询的3种常见用法演示

ORDER BY 排序很直接。

单列升序,工资高的排后面。
SELECT id, name, salary FROM employees ORDER BY salary ASC;
单列降序,工资高的排前面。
SELECT id, name, salary FROM employees ORDER BY salary DESC;
多列先按部门,再按工资。
SELECT id, name, department, salary FROM employees ORDER BY department ASC, salary DESC;
自定义排序,状态优先级排。
SELECT id, description, status FROM orders ORDER BY CASE status WHEN 'pending' THEN 1 WHEN 'processing' THEN 2 WHEN 'completed' THEN 3 ELSE 4 END;
业务逻辑复杂用CASE。
订单状态pending排最前。

你自己掂量。

sql语句怎么写?先按时间排序,再按姓名排序?

说白了,用SQL按时间、姓名排序其实很简单,就俩关键点。
先用ORDER BY接时间列,加ASC升序,比如去年我们跑那个项目,直接写ORDER BY 创建时间 ASC就行;另外一点,在时间后面加个逗号,再跟上姓名列和ASC,像ORDER BY 创建时间 ASC, 姓名 ASC,这样时间相同了会自动按姓名排。
还有个细节挺关键的,比如你查的数据量大概3 000量级,先按时间排能快速找到当天记录,再按姓名能避免重名混在一起,说实话挺清晰的。
我一开始也以为必须用DESC,后来发现默认就是升序,除非你特指用DESC。
提醒个坑:如果时间列是YYYY-MM-DD格式,记得别加DESC,否则会按年份倒排,不是按日期倒排。
我觉得值得试试用英文逗号分隔多列,比用AND或OR分句直观多了。

SQL排序规则设置 SQL ORDER BY使用指南

哈,这SQL排序规则和ORDER BY子句的东西,说起来还挺复杂的。
上周有个客人问我,说他们的数据库里中文字符排序总是不对,我这就给他详细说说。

首先,得知道排序规则这东西,它决定了数据库怎么比较和排序字符数据。
比如说,我们中文的排序,跟英文就完全不一样,因为它得考虑笔划、拼音、部首这些复杂因素。

解决排序规则冲突,有几个方法。
比如,你可以直接在查询里指定排序规则,用COLLATE子句。
就像这样:
sql SELECT FROM table1 JOIN table2 ON table1 .column1 = table2 .column2 COLLATE Latin1 _General_CI_AS;
这样就能解决不同数据库或列之间的排序规则冲突。
不过,这样得在每个可能出问题的查询里都加上COLLATE,有点麻烦。

还有一种方法是直接改数据库或列的默认排序规则。
这用ALTER DATABASE或ALTER TABLE命令。
但是,这改动是永久的,得小心操作,别影响到现有应用。

如果你不想改默认规则,还可以用临时表,把数据复制到另一个排序规则兼容的临时表里去操作。

还有,数据类型不匹配也可能导致排序规则冲突,所以有时候得转换数据类型。

至于ORDER BY的性能优化,有几个小技巧。
比如,在排序的列上创建索引,这样数据库就能更快地找到排序后的数据。
避免对大结果集排序,尽量只选择需要的列。
还有,用覆盖索引,这样查询可以直接从索引里获取数据,不用访问表。

还有一点,别在ORDER BY里用函数或表达式,这样会降低性能。
如果非要用,可以考虑创建一个计算列,然后在那列上建索引。

最后,中文数据的排序规则特别重要。
得选对排序规则,比如Chinese_PRC_CI_AS,这样才能保证中文数据按拼音正确排序。
还得注意字符集和编码,还有比较操作,还有索引。

反正,掌握好这些,数据库里的数据排序就不会有问题了。
你看着办吧。
我还在想这个问题,以后可能还得再深入研究研究。