概述
MySQL基础篇——第05章 排序与分页
1. 排序数据:ORDER BY
1.1 排序规则
-
使用
ORDER BY
对查询到的数据进行排序操作-
ASC
(ascend):升序(从小到大) -
DESC
(descend):降序(从大到小)
-
-
ORDER BY
子句放在WHERE
子句之后,LIMIT
子句之前
1.2 单列(一级)排序
- 注意1:如果
ORDER BY
子句中没有在最后显式指明排序的方式,则默认为升序ASC
# 按照salary从低到高的顺序显示员工信息
SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary; # 默认省略了ASC
# 按照salary从高到低的顺序显示员工信息
SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary DESC;
- 注意2:列的别名可以在
ORDER BY
子句中使用,但不能在WHERE
子句中使用
为什么:MySQL的查询语句(
SELECT
语句)执行的顺序
先执行
FROM
子句,选择当前数据库中的一张表再执行
WHERE
子句,根据WHERE
子句声明的条件过滤数据,此时得到的数据是包含所有字段(列)的筛选后的记录(行)然后执行
SELECT
子句,选择指定的字段(列),并给字段取别名最后执行
ORDER BY
子句,按照指定字段对数据进行排序由于列的别名是在
SELECT
子句中声明,而ORDER BY
子句是在SELECT
后执行的,故可以在ORDER BY
中使用列的别名
# 正确
SELECT employee_id, salary, salary * 12 annual_sal
FROM employees
ORDER BY annual_sal;
# 错误
SELECT employee_id, salary, salary * 12 annual_sal
FROM employees
WHERE annual_sal > 81600;
- 注意3:在
SELECT
语句中 ,WHERE
子句一定要紧跟FROM
子句,而ORDER BY
子句放在WHERE
子句之后,LIMIT
子句之前 - 注意4:
ORDER BY
子句中可以使用未在SELECT
子句中声明的字段(列)进行排序
SELECT employee_id, salary
FROM employees
WHERE department_id IN (50, 60, 70)
ORDER BY department_id DESC;
1.3 多列(多级)排序
- 在对多个字段(多列)进行排序时,首先排序的第一列必须有相同的列值时,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序
# 首先按照department_id的降序排列,然后按照salary的升序排列
SELECT employee_id, salary, department_id
FROM employees
ORDER BY department_id DESC, salary ASC;
2. 分页:LIMIT
2.1 背景
背景1:查询返回的记录太多了,查看起来很不方便,怎么样能够实现分页查询呢?
背景2:表里有 4 条数据,我们只想要显示第 2、3 条数据怎么办呢?
分页显示的好处:约束返回结果的数量可以减少数据表的网络传输量,也可以提升查询效率。如果我们知道返回结果只有1条,就可以使用
LIMIT 1
,告诉SELECT
语句只需要返回一条记录即可。这样的好处就是SELECT
不需要扫描完整的表,只需要检索到一条符合条件的记录即可返回
2.2 实现规则
- 分页的原理:所谓分页显示,就是将数据库中的结果集,一段一段地分页显示出来
- MySQL中使用
LIMIT
实现数据的分页显示 - 格式:
# 严格来说:
LIMIT 位置偏移量, 条目数
# 当位置偏移量为0时,即从头开始显示记录时,可以将0省略
LIMIT 0, 条目数;
# 等价于:
LIMIT 条目数;
- 举例:
# 每页显示20条记录,此时显示第1页
SELECT employee_id, last_name
FROM employees
LIMIT 0, 20;
# 每页显示20条记录,此时显示第2页
SELECT employee_id, last_name
FROM employees
LIMIT 20, 20;
# 每页显示20条记录,此时显示第3页
SELECT employee_id, last_name
FROM employees
LIMIT 40, 20;
# 显示第32,33条数据
SELECT employee_id, last_name
FROM employees
LIMIT 31, 2;
- 分页显式公式:每页显示pageSize条记录,此时显示第pageNo页
SELECT *
FROM table
LIMIT (pageNo - 1) * pageSize, pageSize;
2.3 SELECT
语句中关键词声明的顺序
- 在
SELECT
语句中 ,WHERE
子句一定要紧跟FROM
子句,而ORDER BY
子句放在WHERE
子句之后,LIMIT
子句之前
SELECT employee_id, last_name, salary
FROM employees
WHERE salary > 6000
ORDER BY salary DESC
LIMIT 0, 10;
2.4 MySQL 8.0 新特性
- 格式:
LIMIT 条目数 OFFSET 位置偏移量
- 举例:
# 显示第32,33条数据
# MySQL8.0之前
SELECT employee_id, last_name
FROM employees
LIMIT 31, 2;
# MySQL8.0之后
SELECT employee_id, last_name
FROM employees
LIMIT 2 OFFSET 31;
练习:查询员工表中工资最高的员工信息
SELECT employee_id, Last_name, salary
FROM employees
ORDER BY salary DESC
LIMIT 1; # LIMIT 0, 1;
最后
以上就是现代大侠为你收集整理的MySQL基础篇——第05章 排序与分页MySQL基础篇——第05章 排序与分页的全部内容,希望文章能够帮你解决MySQL基础篇——第05章 排序与分页MySQL基础篇——第05章 排序与分页所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复