当前位置:首页 > 问答 > 正文

SQL排序怎么搞?教你数据库语句升序排列那些事儿,简单又实用

说到查数据库,我们经常会遇到这种情况:你有一大堆数据,比如公司所有员工的信息,你想按照他们的工资从低到高排个序,一眼看出谁赚得最少,好去给他加个鸡腿,或者你有一堆商品,想按上架时间从新到旧排列,让顾客最先看到新品,这时候,你就需要用到SQL排序这个功能了。

SQL排序,说白了,就是告诉数据库:“嘿,哥们儿,我拿出来的这些数据,你别乱糟糟地给我,得按照我指定的规矩,整整齐齐地排好队再递过来。”这个负责排队口令的关键词就是ORDER BY

根据菜鸟教程上的解释,ORDER BY关键字用于对查询结果集进行排序,可以按照一个或多个列进行排序,并且可以指定是升序还是降序。

最基本的排序:升序排列

升序,就是从小到大、从A到Z、从早到晚的顺序,这也是最常用、最符合我们习惯的排序方式,在SQL语句里,它的写法超级简单。

假设我们有一张叫employees的员工表,里面有个salary工资字段,我们现在想看看所有员工的工资情况,并且按照工资从低到高排好,SQL语句这么写就行:

SELECT * FROM employees ORDER BY salary;

你看,就是在我们正常的查询语句SELECT * FROM employees后面,加上了ORDER BY salary,这意思就是:从员工表里选所有东西,然后按照工资(salary)这个字段来排序。

那有朋友可能会问了,你光写了ORDER BY salary,也没说升序啊?问得好,这里有个小秘密:默认情况下,ORDER BY就是按升序(ASC)来排列的。 上面那句SQL,和下面这句是完全一样的:

SELECT * FROM employees ORDER BY salary ASC;

这个ASC就是英文“升序”的缩写,你写不写它,效果都一样,所以很多时候我们为了省事,就直接省略ASC了。

那降序怎么搞?

SQL排序怎么搞?教你数据库语句升序排列那些事儿,简单又实用

既然有升序,那肯定就有降序咯,降序就是从大到小、从Z到A、从晚到早的顺序,比如你想看看公司里哪些人是“土豪”,工资最高,那就得用降序。

方法也很简单,把ASC换成DESC就行了。DESC就是英文“降序”的缩写。

SELECT * FROM employees ORDER BY salary DESC;

这句跑出来,排在第一位的肯定是工资最高的那位大佬。

排序可以更灵活一点:按多个条件排

光按一个条件排还不够,举个例子,假设有好几个员工的工资是一样的,都是5000块,那你光按工资排,这几个人的顺序就是随机的,数据库爱怎么排就怎么排,这时候,你可能想:“工资一样的话,那就再按他们的入职时间排吧,早入职的排在前面。”

这种需求太常见了,SQL完全可以满足你,你只需要在ORDER BY后面把多个条件用逗号隔开就行了,它会先按第一个条件排,如果第一个条件一样,再按第二个条件排,就像我们Excel里排序时点“添加条件”一样。

SQL排序怎么搞?教你数据库语句升序排列那些事儿,简单又实用

SELECT * FROM employees ORDER BY salary ASC, hire_date ASC;

这句SQL的意思是:先按工资升序排(从低到高),如果工资相同,再按入职日期升序排(早入职的在前)。

你甚至可以混搭,SELECT * FROM employees ORDER BY salary DESC, hire_date ASC;

这句的意思是:先按工资降序排(土豪在前),如果工资一样,再按入职日期升序排(同样是土豪,老员工在前)。

除了数字,还能排什么?

ORDER BY可不是只能排数字,它几乎可以排任何类型的字段:

  • 文本类型:比如按姓名排,如果是升序ASC,就是按字母顺序从A到Z排;降序DESC就是从Z到A排,中文的话,通常是按拼音首字母顺序排。
  • 日期类型:比如按生日、入职日期排,升序就是从早到晚(过去到未来),降序就是从晚到早(未来到过去)。

一点实用小提醒

  1. ORDER BY子句一定要放在SQL语句的最后面,你不能把它写在WHERE条件的前面,通常顺序是:SELECT ... FROM ... [WHERE ...] [ORDER BY ...]
  2. ORDER BY后面跟着的字段,不一定非要在SELECT后面出现,比如你可以SELECT name, salary FROM employees ORDER BY hire_date;,我只看姓名和工资,但我按你没选出来的入职日期排序,这是完全可以的。
  3. 排序虽然方便,但如果数据量特别特别大(几百万上千万行),排序可能会慢一点,因为数据库要在后台干很多活,不过对于日常绝大多数情况,完全不用担心。

SQL排序就是用ORDER BY,升序可以省略ASC或用ASC,降序用DESC,多条件用逗号隔开,掌握了这个,你就能让数据库里的数据乖乖听你话,想怎么排就怎么排了。