MySQL---排序与分页
我只想卷死各位,或者被各位卷死,在此特别感谢康师傅的MySQL教程
排序数据
排序规则
- 使用 ORDER BY 子句排序
- ASC(ascend):升序
- DESC(descend):降序
- ORDER BY 子句在SELECT语句的结尾。
单列排序
如果没有使用排序操作,默认情况下查询返回的数据是按照添加数据的顺序显示的。
1 | -- 练习:按照salary从高到低的顺序显示员工信息 |
我们也可以使用列的别名进行排序,根据salary计算出年薪,随后根据年薪排序1
2
3SELECT last_name,salary,salary * 12 AS annual_salary
FROM employees
ORDER BY annual_salary ASC;
补充:列的别名只能在ORDER BY 中使用,不能在WHERE中使用,因为WHERE的执行顺序先于别名,故在WHERE使用时会报错
SQL执行顺序
先从FROM开始走,挑出来是哪个表
然后看看WHERE有哪些过滤条件,筛选完之后,得到一批数据(包括所有字段)
再看看SELECT想查什么(只选择SELECT需要的字段),再加上别名
之后再ORDER BY进行排序
如下代码会报错1
2
3SELECT employee_id,salary,salary * 12 annual_sal
FROM employees
WHERE annual_sal > 12000;
强调格式:WHERE需要声明在FROM后,ORDER BY之前。1
2
3
4SELECT last_name,salary,department_id
FROM employees
WHERE department_id IN (10,20,30)
ORDER BY department_id DESC;
多列排序
- 可以使用不在SELECT列表中的列排序。
- 在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。
1 | -- 显示员工信息,按照department_id的降序排序,salary的升序排序 |
分页
背景
- 查询返回的记录太多了,查看起来很不方便,怎么样能够实现分页查询呢?
- 表里有 4 条数据,我们只想要显示第 2、3 条数据怎么办呢?
实现规则
- 分页原理:所谓分页显示,就是将数据库中的结果集,一段一段显示出来需要的条件。
- MySQL中使用LIMIT实现分页
- 格式:LIMIT 位置偏移量, 行数
第一个“位置偏移量”参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定“位置偏移量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,以此类推);第二个参数“行数”指示返回的记录条数。
1 | -- 需求1:每页显示20条记录,此时显示第1页 |
课后练习
查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序显示
1
2
3SELECT last_name,department_id,salary * 12 AS annual_salary
FROM employees
ORDER BY annual_salary DESC;选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序,显示第21到40位置的数据
1
2
3
4
5SELECT last_name,salary
FROM employees
WHERE salary < 8000 || salary > 17000
ORDER BY salary DESC
LIMIT 20,20;查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序
1
2
3
4SELECT *
FROM employees
WHERE email LIKE '%e%'
ORDER BY LENGTH(email) DESC,department_id ASC;