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;
posted @ 2022-06-23 02:03  GoodForNothing  阅读(21)  评论(0编辑  收藏  举报
//看板娘