MyBatis进阶六:不同数据库的分页实现原理;(了解下就OK了)

本文详细介绍了MySQL、Oracle以及SQL Server等数据库中的分页查询实现原理。MySQL利用LIMIT关键字进行简单快捷的分页操作;Oracle则采用三层嵌套查询的方式,通过ROWNUM伪列筛选指定范围的数据;而SQL Server的不同版本提供了子查询与OFFSET/FETCH NEXT相结合的方法。

不同数据库中,分页的实现原理是不同的。

目录

MySQL分页:

Oracle分页:

SQL Server 2000:(SQL server 2000及以前的旧版)

SQL Server 2012+:


MySQL分页:

limit关键字:第一个参数,起始的行号;第二个参数,从起始行号算起向后取多少条数据;

在前面SQL【select * from table】执行完了之后,就可以使用【limit 10,20】对这个区间中的数据进行截取了;


Oracle分页:

Oracle是目前商用数据库中主流数据库。

Oracle实现分页查询比较麻烦:需要三层嵌套

(1)第一层(黄色框内):表示核心的查询语句;对于不同的业务,这里面的SQL语句不同;

(2)第二层(绿色框内):使用了伪列(无需声明,可以直接使用的隐藏列。。。这些伪列应该是Oracle自己定义的啦);第二层就是通过rownum这个伪列,筛选出前20行的数据;;;并且把rownum伪列给起一个别名row_num;

(3)第三层(蓝色框内):第二层已经获得了前二十条数据了。。。。。但是如果我们想获取是如第12条到第20条数据,就需要增加第三层嵌套了。    第三层嵌套就是获取11行以后的数据。

这样以后,上面的SQL语句就是获取12条到20条的数据。

但是使用PageHelper后,可以大大减少分页的编码量。


SQL Server 2000:(SQL server 2000及以前的旧版)

(1)使用了子查询的方式来实现分页;

(2)top子句是最后执行的,,,比如上面的top 3,是在查询出结果后,再从中取前三条结果。


SQL Server 2012+:

(1)offset是偏移的意思:offset 4 rows,偏移4行:起始行号从第5行开始;

(2)fetch next 5:代表向后取5条数据;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值