写点什么

Mysql 分页 vs Oracle 分页|非常详细,建议收藏

作者:bug菌
  • 2023-04-17
    江苏
  • 本文字数:2019 字

    阅读完需:约 7 分钟

Mysql分页 vs Oracle分页|非常详细,建议收藏

👨‍🎓作者:bug 菌

✏️博客:CSDN、掘金、infoQ、51CTO 等

🎉简介:CSDN 博客专家,C 站历届博客之星 Top50,掘金/InfoQ/51CTO 等社区优质创作者,全网粉丝合计 10w+,对一切技术感兴趣,重心偏 Java 方向;硬核公众号「 猿圈奇妙屋」,欢迎小伙伴们的加入,一起秃头,一起变强。

..

✍️温馨提醒:本文字数:1999 字, 阅读完需:约 9 分钟

        如果小伙伴们在批阅文章的过程中觉得文章对自己有帮助,请别吝啬手中的赞呀,大胆的把文章点亮👍,相信你点赞了好的文章,平台也会经常给你推荐高质量好文,您的点赞三连(收藏+关注+留言)就是对 bug 菌写文道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

一、前言🔥

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

        我们都知道,关系型数据库常用的有 mysql、oracle、sql server 等,说起他们之间的细微差别,还是非常多的,但是今天我不是来给大家一一列举它们之间有何差别,而是...

        想必,对于大家接触颇深的还是分页;就拿 oracle 与 mysql 而言,它们之间也是有很大的区别。

        今天我就来给大家讲解一下,对于分页而言它们究竟有何不同,日后难免自己也会用得上。

二、正文🔥

       如下,我先来给大家分别演示一下,mysql 与 oracle 两数据库是如何进行 sql 分页的,具有很好的参考价值,希望能帮到大家。

1️⃣mysql 分页语句

分页格式如下:

select * from tableName limit startRow,size //startRow表示从第几条数据开始获取,size表示每页多少条
复制代码

通常页面传参是 page 与 limit,比如{page=2,limit=10},表述页面想获取第 2 页的数据,其实换算成 sql 分页参数,其实就遵循这个计算公式就行。

select * from tableName limit (page-1)*limit, limit
复制代码

        其中:startRow = ( page - 1) * limit 表示起始值,size=limit 表示页容量。

​        编辑其实很好理解,比如要查询第 2 页,一页 10 条的数据,那就应该返回序号为(10,20]的数据。

sql 写法==> select * from tableName limit 10,10;

startRow = (2-1)*10,size=10 ;表示 limit 从 10 行开始,取 10 条,即第 2 页数据。

        我再给大家模拟一下,具体如下:我们先来看下【grade】表中共有多少数据?直接 select * 执行一下。

        很好,我们发现【grade】表中共有 5 条数据。那我们就依该表进行分页演示;

        如果我们要查第 2 页,其分页容量为 size=2 的数据集,那理应是拿到 id=3 和 id=4 的这两条数据,我们来通过 sql 来验证一下。具体执行 sql 如下:

select * from grade limit (2-1)*2,2;
复制代码

大家请看执行结果:

        发现没有,查询结果集与预期是一样的;证明说的分页参数计算是对的,大家可以放心学习参考。

        如上只是针对 mysql 数据库进行的一种分页方法,其实不知一种,还有别的分页方式,我就不一一赘述啦。感兴趣的小伙伴可以自行去了解。

2️⃣oracle 分页语句

分页语句格式如下:

select * from (    select t.*,rownum rn from tableName t where rownum <= #{pageEnd}) where rn >= #{pageStart}
复制代码

其中 pageStart、pageEnd 参数,与 mysql 分页参数的计算方式不太一样,其中遵循 mysql 分页参数来处理,则 oracle 中的分页参数计算方法应为:

pageStart = (page-1)*limit + 1pageEnd = page * limit
复制代码

其实你就可以理解成 oracle 要的分页是具体到范围,比如获取数据序列为[11,20]的数据,示例演示如下 :

        假设分页容量为 10(pageSize=10),假设我要获取获取第 2 页的数据,我又该怎么写这个 sql?重点是要知道如何计算 rownum 的值范围!依葫芦画瓢呀,大家请看:

select * from (    select t.*,rownum rn from tableName t where rownum <=20) where rn >=11
复制代码

其中:

  • pageStart = (2-1)*10+1 = 11

  • pageEnd = 2*10 = 20

注意一点:rownum 总是从 1 开始的,而不是从 0,这点跟 mysql 不一样。

3️⃣总结

  1. Mysql 使用 limit 分页,而 Oracle 使用 rownum 分页。

  2. Oracle 进行分页查询时,需要设置别名,然后查询完成之后再通过调用别名进行大于的判断。

  3. Mysql 进行分页查询,limit 两参数 startRow = (startPage-1)*pageSize,limit = pageSize;而 oracle 进行分页查询时,pageStart = (startPage-1)*pageSize + 1,pageEnd = startPage * pageSize;

  4. Oracle 查询索引从 1 开始,而 Mysql 索引是从 0 开始。

  5. Mysql 分页查询表述从第 startRow 条数据开始查找,一共查找 limit 条数据。而 Oracle 则表示从第 pageStart 条数据查询,查找到第 pageEnd 下标处数据截止。

  6. ... ...

文末🔥

        我是 bug 菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!


感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。

时刻警醒自己:

抱怨没有用,一切靠自己;

想要过更好的生活,那就要逼着自己变的更强,生活加油!!!


发布于: 刚刚阅读数: 2
用户头像

bug菌

关注

公众号 | 猿圈奇妙屋 2020-07-30 加入

CSDN博客专家,历届博客之星Top30,掘金年度人气作者No.40,掘金/InfoQ/51CTO等社区优质创作者,全网粉丝合计10w+,硬核公众号「猿圈奇妙屋」,欢迎小伙伴们的加入,一起学习,一起变强。

评论

发布
暂无评论
Mysql分页 vs Oracle分页|非常详细,建议收藏_MySQL_bug菌_InfoQ写作社区