思宇

思宇上课笔记—SQL数据库分页查询的方式

电脑版发表于:2019/4/8 17:13



           jQuery课堂实例


        分页在实际开发中经常被用到,今天就来介绍下SQL数据库分页的几种常见方式。


           下面的例子都以每分5条数据为一页为例:


            1.top分页法:


            

            


            

            

            


            2.between and (id必须连续


            

            

            

             

            

            因为我们这里是用id进行排列,然后筛选,如果我们删除一条数据,结果会怎么样呢?

            

            

            

            我们删除一条id为5的数据,再查询它所在的第一页发现第一页的数据变成只有4条了,我们再查询id 1~10的数据看看


            

            很明显看出数据只有9条,我们使用between and 要求id在一定范围,则id必须为连续的,如果不连续,就会少数据,如果我们细心一点也会发现,虽然id不连续了,但是行号依旧是连续的,也就是说行号不会随着我们删除数据,而导致行号不连续,如果我们有办法可以得到行号,问题也就变得简单了。


            3.ROW_NUMBER 行号分页

             

             我们根据思路来一步步推,先去看看官方文档,语法就不演示了,看不懂,还是自己理解吧

              

               

                我们查询所有,用ROW_NUMBER()函数求行号,但是报错,告诉我们要over子句,我们就写上

                


                over子句里写的是排序方式,这里我们根据id进行升序得其行号最为合理,当然这里的id字段可以改,排序方式也可以改(默认升序) ,只不过在这里用id升序最好


                得到的行号我们取个别名rownumber

                

            

                

                行号已经求出来了,看看能不能直接根据行号来取


                

                     喔嚯,不得行,想简单了,报rownumber不存在的错,仔细想想我们是在对id进行排序后再得其行号改别名,我们怎么能在形成表的同时得到rownumber呢?表的数据都没有加载完,我们怎么对行号排序还只取前5个呢?想个办法,我们可以将行号显示出来后的组合表当成一个新表,再求这个新表中的rownumber字段,上图:

                

                额,还是报错,不过没有显示rownumber不存在了,我们思路是对的,只不过又出现新问题了,原来新表要取个别名

          

          这样一看,应该是没有问题了,在我们一步步推理下终于出来了,这样理解的更清楚了吧,如果忘了写法,还可以这样推出来


             

            

             


             


            4.offset分页(2012版本才开始支持)


            


            

            


            这个也支持id不连续查询,但是有版本要求,所以要使用这个方法的时候要注意数据库的版本


            5.内存分页:咳咳,只闻其名,不检其形,还没自己去研究,有兴趣可以自己去研究下哦!

            

            如果有错误,不明确的地方,欢迎大家指出来,如果还有补充,欢迎各位大神,先溜了

              

关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢