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