1.背景
-
查询返回的记录太多了,我们希望一页一页的查看,如: 百度,淘宝的页面
-
表里有多条数据,但是我们只想查询其中的某几条数据
2.实现规则
-
分页原理
所谓分页,就是将数据库中的结果集,一段一段显示出需要的条件
-
mysql中使用limit实现分页
-
使用格式:
limit [位置偏移量],行数
-
第一个"位置偏移量"参数指明mysql以哪一行开始显示,是一个可选参数.如果不指定"位置偏移量",就会默认从表中的第一条记录开始(第一条记录的位置偏移量为0,第二条记录的位置偏移量为0,以此类推)显示;第二个参数"行数",指明返回的记录条数.
-
结构"limit 0,条目数" 等价于"limit 条目数"
-
-
举例:
-
需求1: 每页显示20条记录,此时显示第一页
select employee_id,last_name from employees limit 0,20;
-
需求2: 每页显示20条记录,此时显示第二页
select employee_id,last_name from employees limit 20,20;
-
#我们可以看出,每页显示pagesize条记录,此时显示pageno页.
公式为: (当前页数-1)*每页条数,每页条数
limit (pageno-1)*pagesize,pagesize;
即比如我们在淘宝中点击跳转到第几页,后台就会将数据发给后台程序,后台程序在经过分析后交给sql执行,提供给用户相应的信息
-
-
where order by limit 声明顺序
select employee_id,last_name from employees where salary > 6000 order by salary desc limit 0,10;
即limit子句必须写在整个select语句的最后面!
-
#练习: 有107条数据,只要显示第32,33行
```sql
limit 31,2; ```
注意: mysql8.0的新特性可以使用"limit 3 offset 4"语法,意思是获取从第5条记录开始后面3条记录,和"limit 4,3"返回的结果相同,即前面参数为条数,后面参数为从第几个开始
select employee_id,last_name from employees limit 31 offset 2;
-
-
使用limit 的好处
约束返回结果的数量可以减少数据表的网络传输量,也可以提升查询效率,如果我们只需要知道的返回结果只有1条,就可以使用limit 1,告诉select语句只需要返回1条记录即可.这样的好处就是不需要扫描完整的表,只需要检索到一符合条件的记录即可返回 如: 查询最高工资
select employee_id,last_name,salary
from employees
order by salary desc
limit 1;
3.拓展
-
分页在不同dbms中使用的关键字可能不同.在mysql,postgresql,mariadb和sqlite中使用limit关键字,且需放在select语句的最后面
-
如果是sql server 和 access中,则需使用top关键字 如:
select top 5 name,hp_max from heros order by hp_max desc;
-
如果是在db2 中,则需要使用 fetch first 5 rows only
如:
select name,hp_max from heros order by hp_max desc fetch first 5 rows only;
-
oracle 中,需要使用rownum来统计行数
select rownum,last_name,salary #每个表中都隐藏着一个rownum字段 from employees where rownum < 5 order by salary desc;
这条语句是先取出前五条数据行,然后再按照hp_max从高到低顺序进行排序,但产生的结果与前面的方法不同