一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情。
前言
上篇我们学习完了位运算符,并做了一些关于运算符的练习。有兴趣的小伙伴可以阅读(# MySQL学习-运算符(十))。
下面继续学习MySQL中的排序。
排序
数据排序
一般的SELECT语句,如果没有使用排序操作,默认情况下查询返回的数据是按照添加数据的顺序显示的。排序使用ORDER BY语句。
ORDER BY语句
- ORDER BY语句包括 升序:ASC(默认,ascend缩写),降序:DESC(descend缩写)。
- ORDER BY语句在SELECT语句的结尾。
- 排序分单列排序与多列排序。
单列排序
排序示例一
查询薪资从低到高的员工姓名与薪资
SELECT name, salary
WHERE employees
ORDER BY salary ASC
使用ORDER BY ASC对salary进行升序排序。这个示例还可以这样写。
SELECT name, salary
WHERE employees
ORDER BY salary
可以看到省略了ASC,因为ORDER BY默认是按照升序排列的。
排序示例二
查询薪资从高到低的员工姓名与薪资
SELECT name, salary
WHERE employees
ORDER BY salary DESC
使用ORDER BY DESC对salary进行降序排序。这里的DESC不能省略,省略就会变成ASC升序了。因为默认是升序排列的。
排序示例三
查询年薪从高到低的员工姓名与年薪
SELECT name, salary * 12 annual_salary
WHERE employees
ORDER BY annual_salary DESC
由于表里只有月薪,所以这里年薪需要通过月薪计算得到。另外这里排序还使用到了别名,我们可以使用列的别名进行排序。
- ORDER BY里面可以使用列的别名,但是WHERE语句中不能使用。否则会报错。
- 为什么WHERE语句不可以使用列的别名?
因为SELECT语句执行有顺序,先执行FROM语句和WHERE语句,再执行SELECT语句,最后执行ORDER BY语句。这里就可以看出为什么不能用了。因为列的别名是在WHERE语句之后运行的,所以WHERE是不知道列的别名的,因此不能使用。
二级排序
排序示例四
查询员工姓名,按照部门降序排序,薪资升序排列。
SELECT name
WHERE employees
ORDER BY department_id DESC, salary ASC
这里会先按照部门降序排列,部门相同的,再按照薪资升序排列。
当然后面还有三级,四级排序等,统称多列排序。
多列排序时,会按照顺序依次进行排列,当前一列有相同数据时,会进行下一列的排序。当前一列没有相同数据时,则不会进行下一列的排序。
今天学习到这里,明天继续。