MySQL_06limit分页查询

本文介绍了MySQL中LIMIT关键字的作用和使用方法,详细解释了如何进行分页查询,以提高用户体验。通过实例展示了LIMIT在ORDER BY之后执行,以及如何根据页数和每页显示的记录数获取特定页面的数据。最后,总结了DQL语句的执行顺序。

MySQL_06limit分页查询

1.limit的作用

limit可以将查询结果的一部分取出来。通常用于分页查询中。

分页查询是为了提高用户体验。因为当数据过多时,如果一次将所有数据都查出来,用户的体验就会很差。分页后,用户可以一页一页翻看。

比如在搜索引擎中搜索的结果条目都是分页显示的。

2.limit的使用

完整用法:limit startIndex,length

  • startIndex:起始下标;
  • length:长度

缺省用法:limit 5

  • 表示取前5行的数据

案例1:按照薪资降序排列,取出排名前五的员工

缺省用法:

mysql> select ename,sal from emp order by sal desc limit 5;
+-------+---------+
| ename | sal     |
+-------+---------+
| KING  | 5000.00 |
| SCOTT | 3000.00 |
| FORD  | 3000.00 |
| JONES | 2975.00 |
| BLAKE | 2850.00 |
+-------+---------+
5 rows in set (0.00 sec)

完整用法:

mysql> select ename,sal from emp order by sal desc limit 0,5;
+-------+---------+
| ename | sal     |
+-------+---------+
| KING  | 5000.00 |
| SCOTT | 3000.00 |
| FORD  | 3000.00 |
| JONES | 2975.00 |
| BLAKE | 2850.00 |
+-------+---------+
5 rows in set (0.00 sec)

注意:mysql中,limit在order by之后执行。

案例2:取出工资排名在[2-6]名的员工

#1表示从下标为1的位置开始查询,也就是排名第二的员工
#5表示长度
mysql> select ename,sal from emp order by sal desc limit 1,5;
+-------+---------+
| ename | sal     |
+-------+---------+
| SCOTT | 3000.00 |
| FORD  | 3000.00 |
| JONES | 2975.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
+-------+---------+
5 rows in set (0.00 sec)

3.分页查询

假如说现在需要将12条数据进行分页,要求每页显示3条记录。

limit的用法:limit startIndex,length

​ 第1页:limit 0,3 [1,2,3]

​ 第2页:limit 3,3 [4,5,6]

​ 第3页:limit 6,3 [7,8,9]

​ 第4页:limit 9,3 [10,11,12]

设页数为pageNo,每页显示pageSize条记录

观察以上数据可得规律:

  • startIndex = (pageNo - 1) * pageSize
  • length = pageSize

第pageNo页:limit (pageNo - 1) * pageSize,pageSize

假如现在用户想查询第4页的数据

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    //用户提交过来一个页码,以及每页显示的记录条数
    int pageNo = 4;//第4页
    int pageSize = 3;//每页显示3条记录
    int startIndex = (pageNo - 1) * pageSize;
    //sql查询语句
    String sql = "select ... limit" + startIndex + "," + pageSize;
}

分页查询总结:limit (pageNo - 1) * pageSize,pageSize

4.DQL语句大总结

select ...
from ...
where ...
group by ...
having ...
order by ...
limit ...

执行顺序:

  1. from
  2. where
  3. group by
  4. having
  5. select
  6. ordrer by
  7. limit
MySQL中使用LIMIT进行分页查询有以下几种常见方法: ### 基本LIMIT分页 MySQL提供了`LIMIT`函数用于分页,其基本语法有两种形式: - `LIMIT m,n`:`m`表示从该参数的下一条数据开始,`n`表示每次返回的数据条数。 - `LIMIT n OFFSET m`:`n`表示返回的行数,`m`表示从表的第`m+1`行开始。 例如,假设数据库表`student`存在13条数据,以下两条语句均返回表`student`的第10、11、12、13行: ```sql -- 方式一 SELECT * FROM student LIMIT 9,4; -- 方式二 SELECT * FROM student LIMIT 4 OFFSET 9; ``` 这种方式适用于客户端通过传递`start`(页码)和`pageSize`(每页显示的条数)两个参数去分页查询数据库表中的数据的场景,不过需要根据实际情况改写适合自己的分页语句[^1]。 ### 基于变量计算偏移量的分页 可以先设置变量`@pageNumber`和`@pageSize`的值,然后使用它们来计算偏移量。这种方法在存储过程中尤其有用。示例如下: ```sql SET @pageNumber = 2; SET @pageSize = 10; SET @offset = (@pageNumber - 1) * @pageSize; SELECT * FROM your_table LIMIT @offset, @pageSize; ``` 如果你在使用MySQL客户端或某些ORM(如Django、Hibernate等),通常会有内置的方法来处理分页逻辑,例如Django的`Paginator`或SQLAlchemy的`paginate`方法[^3]。 ### 基于游标的分页(连续分页优化) 适用于支持顺序翻页的业务(如瀑布流)。方法是记录上一页最后一条记录的`ID`,通过`WHERE id > last_id LIMIT 5`跳过偏移量,完全避免偏移量计算。 示例:假设`id`为主键且有序 ```sql SELECT * FROM test WHERE val=4 AND id > 上一页最大ID ORDER BY id LIMIT 5; ``` 这种方法可以提高大数据量分页查询的性能[^2]。 ### 大数据量分页优化方法 对于大数据量的分页,可以采用先查询偏移量对应的数据的`ID`,再通过该`ID`进行查询的方式。例如: ```sql SELECT * FROM yanxue8_visit WHERE vid >= (SELECT vid FROM yanxue8_visit ORDER BY vid LIMIT 10000,1) LIMIT 10; ``` 这种方法可以减少直接使用大偏移量`LIMIT`带来的性能问题[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TSCCG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值