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

Posted bug菌¹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql分页 vs Oracle分页|非常详细,建议收藏相关的知识,希望对你有一定的参考价值。

👨‍🎓作者:bug菌
✏️博客:CSDN掘金infoQ51CTO
🎉简介:CSDN、 掘金等社区优质创作者,全网合计7w粉+,对一切技术都感兴趣,重心偏Java方向,目前运营公众号「 猿圈奇妙屋」,欢迎小伙伴们的加入,一起秃头,一起变强。
..
✍️温馨提醒:本文字数:2599字, 阅读完需:约 10 分钟

        小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章 点亮👍吧,您的点赞三连( 收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

一、前言🔥

        我们都知道,关系型数据库常用的有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 + 1
pageEnd = 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菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。

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

        最后送大家两句我很喜欢的话,与诸君共勉!


☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start。

🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。


​​​

💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!谢谢。

以上是关于Mysql分页 vs Oracle分页|非常详细,建议收藏的主要内容,如果未能解决你的问题,请参考以下文章

使用Oracle的rownum或者存储过程分页的详细例子(jsp)~新手

oracle 的分页查询与mysql 的分页查询

oracle 的分页与 mySQL'的分页转化

oracle 分页语句

oracle和mysql的分页(转)

mysql和oracle分页