05. 排序与分页
5.1 排序数据
排序用ORDER BY字句
- ASC 升序(缺省值)
- DESC 降序
ORDER BY语句在SELECT语句的末尾
单行排序
# 单行排序就是依赖一列数据进行排序
# 将员工的信息按照工资降序
# 如果不写DESC就是默认升序排列
SELECT * from employees ORDER BY salary DESC;
多行排序
# 多行排序可以按照出现的先后顺序进行排序,只有前一个值相同才会进行后一个排序
# 按照员工的department_id升序排列,如果department_id相同按照工资的降序排列
SELECT last_name, department_id, salary from employees ORDER BY department_id, salary DESC;
5.2 分页
数据量较大的时候,一次查询的数据比较多,查看不方便,因此需要分页查询。
分页原理
MySQL使用LIMIT实现分页
LIMIT 位置偏移量, 显示行数
- 位置偏移量是可选参数,不指定从第一条记录开始显示,第一条记录的位置偏移量是0
- 显示行数是必要参数,指定显示行数
# 显示前10条数据
SELECT * FROM 表名 LIMIT 0,10;
# 也可以写成
SELECT * FROM 表名 LIMIT 10;
# 显示11-20条记录
SELECT * FROM 表名 LIMIT 10,10;
MYSQL8中可以使用LIMIT 3 OFFSET 4, 和LIMIT 4, 3功能一样
-
LIMIT字句最好是放在SELECT语句的最后
-
分页显示的公式:(当前页数 - 1) * 每页条数, 每页条数
SELECT * FROM table LIMIT(PageNo - 1)*PageSize,PageSize;
5.3 练习
#1. 查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序显示
SELECT last_name, department_id, salary * 12 * (1 + IFNULL(commission_pct,0))as yearSalary
FROM employees ORDER BY yearSalary DESC, last_name;
#2. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序,显示第21到40位置的数据
SELECT last_name, salaryFROM employees WHERE salary NOT BETWEEN 8000 AND 17000
ORDER BY salary DESC LIMIT 20,20;
#3. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序
SELECT * FROM employees WHERE email LIKE "%e%"
ORDER BY LENGTH(email) DESC,department_id;