MySQL第05章 排序与分页

发布于:2022-12-14 ⋅ 阅读:(233) ⋅ 点赞:(0)

一.排序数据

1.1排序规则

        使用ORDER BY 子句排列

                ASC(ascend):升序

                DESC(descend):降序

        ORDER BY 子句在SELECT 语句的结尾。

1.2单列排序

不指明排序方式的话,默认时升序排序。

SELECT last_name, job_id, department_id, hire_date 
FROM employees 
ORDER BY hire_date ;

降序排序 在最后面补一个DESC,升序也是同样的道理.

SELECT last_name, job_id, department_id, hire_date 
FROM employees 
ORDER BY hire_date DESC ;

1.3多列排序

SELECT last_name, department_id, salary 
FROM employees 
ORDER BY department_id, salary DESC;

从图中可以看到,这里对departmeng_id进行升序排列,在department_id相同的情况下,对salary进行降序排列。

 可以使用不在SELECT列表中的列排序。

在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序,如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。

2.分页

2.1背景

背景1:查询返回的记录太多了,查看起来很不方便,怎么样才能实现分页查询呢?

背景2:表里有4条数据,我们只想要显示第2,3条数据怎么办呢?

2.2 实现规则

分页原理

所谓分页显示,就是将数据库中的结果集,一段一段显示出来需要的条件。

MySQL中使用 LIMIT 实现分页

格式:LIMIT   位置偏移量,  行数

第一个“位置偏移量”参数只是MySQL从哪一行开始显示,是一个可选参数,如果不指定位置偏移量,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,依次类推);第二个参数 “行数”指示返回的记录条数。

举例:

--前10条记录: 
SELECT * FROM 表名 LIMIT 0,10; 
--或者
SELECT * FROM 表名 LIMIT 10;
--第11至20条记录:
 SELECT * FROM 表名 LIMIT 10,10;
--第21至30条记录:
 SELECT * FROM 表名 LIMIT 20,10;

 

 

 MySQL8.0中可以使用 “LIMIT 3 OFFSET 4”,意思是获取从第5条记录开始后面的3条记录,和"LIMIT 4,3"返回的结果相同。

分页显示公式:(当前页数-1) * 每页条数,每条条数

SELECT * FROM table

SELECT * 
FROM table 
LIMIT(PageNo - 1)*PageSize,PageSize;
# 需求1:每页显示20条记录,此时显示第1页
SELECT employee_id,last_name
FROM employees
LIMIT 0,20;


# 需求2:每页显示20条记录,此时显示第2页
SELECT employee_id,last_name
FROM employees
LIMIT 20,20;


# 需求3:每页显示20条记录,此时显示第3页
SELECT employee_id,last_name
FROM employees
LIMIT 40,20;

#练习:表里有107条数据,我们只想要显示第 32、33 条数据怎么办呢?

SELECT employee_id,last_name
FROM employees
LIMIT 31,2;

注意:LIMIT 子句必须放在整个SELECT 语句的最后

使用LIMIT的好处

约束返回结果的数量可以减少数据表的网络传输量,也可以提升查询效率。如果我们知道返回结果只有1条,就可以使用LIMIT 1,告诉SELECT语句只需要返回一条记录即可。这样的好处就是SELECT 不需要扫码完整的表,只需要检索到一条符合条件记录的记录即可返回。


网站公告

今日签到

点亮在社区的每一天
去签到