SQL分页的三种方法[通俗易懂]

SQL分页的三种方法[通俗易懂]三种SQL分页法  表中主键必须为标识列,[ID]intIDENTITY(1,1) 1.分页方案一:(利用NotIn和SELECTTOP分页)语句形式: SELECTTOP10*FROMTestTableWHERE(IDNOTIN     (SELECTTOP20id     FROMTestTable     ORDERBY

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

三种SQL分页法
   表中主键必须为标识列,[ID] int IDENTITY (1,1)
  1.分页方案一:(利用Not In和SELECT TOP分页)
语句形式:  
SELECT TOP 10 *
FROM TestTable
WHERE (ID NOT IN
          (SELECT TOP 20 id
         FROM TestTable
         ORDER BY id))
ORDER BY ID

SELECT TOP 页大小 *
FROM TestTable
WHERE (ID NOT IN
          (SELECT TOP (页大小*(页数-1)) id
         FROM 表
         ORDER BY id))
ORDER BY ID
   2.分页方案二:(利用ID大于多少和SELECT TOP分页)
语句形式:  
SELECT TOP 10 *
FROM TestTable
WHERE (ID >=
          (SELECT MAX(id)
         FROM (SELECT TOP 21 id
                 FROM TestTable
                 ORDER BY id) AS T))
ORDER BY ID

SELECT TOP 页大小 *
FROM TestTable
WHERE (ID >=
          (SELECT MAX(id)
         FROM (SELECT TOP (页大小*(页数-1)+1) id
                 FROM 表
                 ORDER BY id) AS T))
ORDER BY ID
  3.分页方案三:(利用SQL的游标存储过程分页)

create  procedure SqlPager
@sqlstr nvarchar(4000), –查询字符串
@currentpage int, –第N页
@pagesize int –每页行数
as
set nocount on
declare @P1 int, –P1是游标的id
 @rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1, @rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数–,@rowcount as 总行数,@currentpage as 当前页
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off

其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
建议优化的时候,加上主键和索引,查询效率会提高。

通过SQL 查询分析器,显示比较:我的结论是:
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
分页方案一:(利用Not In和SELECT TOP分页)   效率次之,需要拼接SQL语句
分页方案三:(利用SQL的游标存储过程分页)    效率最差,但是最为通用  

目前我主要是用第一,第二种方案

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194088.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月12日 下午7:15
下一篇 2025年11月12日 下午7:43


相关推荐

  • CNN简单实战:pytorch搭建CNN对猫狗图片进行分类

    CNN简单实战:pytorch搭建CNN对猫狗图片进行分类上一篇文章介绍了使用pytorch的Dataset和Dataloader处理图片数据,现在就用处理好的数据对搭建的CNN进行训练以及测试。

    2022年6月12日
    30
  • 智能小区管理系统_php导航网源码

    智能小区管理系统_php导航网源码☞文末有福利哟,请关注小枣获取方案智慧小区智慧物业管理系统一体化解决方案传统物业在管理上不仅成本高,服务质量也很难有所保障。现在很多小区都安装了智能物业管理系统,它将信息手段与现代物业管理工作相结合,帮助物业管理团队及时响应客户需求,降低运营成本,提升服务品质。智慧物业是指充分利用物联网、云计算、移动互联网等新一代信息技术的集成应用,将物业各个单位紧密连接起来,实现数据的融合,建立起高效…

    2022年10月8日
    4
  • 批处理 for命令_文件批处理命令

    批处理 for命令_文件批处理命令对所有的批处理初学者来说,for的应用是最难理解以及掌握的。本文由浅入深,为大家专门讲解for的用法,希望大家喜欢。首先应该明确的是,for不是一个简单的命令,它的用法比较复杂,它还可以带四个参数(/L/D/R/F),其中:/L和/F参数是最经常用到的。当然,它本身也可以不带参数,下面我们通过具体的例子来讲解for的运用。一、不带参数的for:@echo

    2022年10月12日
    3
  • 大型网站技术架构演进_网站信息架构

    大型网站技术架构演进_网站信息架构出处:http://blog.csdn.net/anxpp/article/details/51614973大型网站架构演化过程1、初始阶段的网站架构网站一开始,使用的人并不多,访问量比较小,使用一台服务器就已经完全满足要求的。我们的个人主页、博客,都可以使用如下架构:01应用程序、数据库和文件等资源,都在同一台服务器上。通常也使用一些开源免费的软件来将成本最低化。2.2、应用服务于数

    2025年6月1日
    4
  • kafka批量删除topic_查看kafka集群状态命令

    kafka批量删除topic_查看kafka集群状态命令当启动kafka的服务出现Mapfailed时,需要把有死循环的topic删除1、删除kafka存储目录(server.properties文件log.dirs配置,默认为”/tmp/kafka-logs”)相关topic目录2、Kafka删除topic的命令是:bin/kafka-topics.sh–delete–zookeeper【zookeeperserver(主机ip:2181)】–topic【topicname】如果kafaka启动时加载的配置文件中s.

    2022年10月17日
    5
  • nginx自动重启脚本_nginx进程数和连接数

    nginx自动重启脚本_nginx进程数和连接数工作中经常要杀掉nginx对应的进程,然后手动命令重启和删除nginx日志,每次都要输入3个或3个以上的命令,效率低。写个脚本万事大吉。#!/bin/shNAME=”nginx-p/home/proj/gamebin/-cconf/depnginx.conf”ID=`ps-ef|grep”$NAME”|grep-v”$0″|grep-v”…

    2022年8月13日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号