`
will-vip
  • 浏览: 40900 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论
阅读更多

1.利用Not In和SELECT TOP分页

SELECT TOP 10 * FROM   Table_A WHERE  Id   NOT   IN (SELECT   TOP   20    id   FROM  Table_A  ORDER BY id )) ORDER BY ID

 

2.利用ID大于多少和SELECT TOP分页

SELECT TOP 10 * FROM   Table_A  WHERE (ID   > (SELECT     MAX(id)    FROM (SELECT   TOP    20   id FROM    Table_A   ORDER BY id)  Table_alian))

 

3.利用SQL的游标存储过程分页

Oracle:
create or replace procedure getPage(
    pageSize integer, --每页记录数
    pageNo integer, --当前页码,从 1 开始
    sqlQuery varchar2, --查询语句,含排序部分
    rs out sys_refcursor, --返回的记录集
  rowCount out integer,  --返回总记录数
  pageCount out integer  --返回总页数
)
as
    sqlString varchar2(30000);
    startRowNum integer;
    endRowNum integer;
    pageNumber integer;
    begin

    ----取记录总数
 sqlString := 'select count(*) from (' || sqlQuery || ')';
 execute immediate sqlString into rowCount;

 if pageNo > 0 then
     ----计算
     pageNumber := pageNo;

     pageCount := ceil(1.0 * rowCount / PageSize);
     if pageNumber > pageCount then
         pageNumber := pageCount;
    -- else
  --       pageNumber := ( pageCount - 1 )  ;
     end if;

     ----执行分页查询
  --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn
     startRowNum := pageNumber * pageSize;
     endRowNum := startRowNum - pageSize + 1;
     sqlString := 'SELECT *  FROM (
     SELECT A.*, rownum rn
     FROM ('|| sqlQuery ||') A
     WHERE rownum <= '|| to_char(startRowNum) || ' ) B
     WHERE rn >= ' || to_char(endRowNum) ;

     --dbms_output.put_line(sqlString);
 else
     sqlString := 'SELECT *  FROM ( '|| sqlQuery ||') A';

 end if;

 OPEN rs FOR sqlString;
 --dbms_output.put_line(sqlString);
 --dbms_output.put_line(rowCount);
 --dbms_output.put_line(pageCount);

end getPage;

SQL SERVER:


CREATE PROCEDURE [dbo].[GetDataRecordFromPage]
 @SelectList VARCHAR(2000),         --欲选择字段列表
 @TableSource VARCHAR(100),         --表名或视图表
 @SearchCondition VARCHAR(2000),    --查询条件
 @OrderExpression VARCHAR(1000),    --排序表达式
 @PageIndex INT = 1,                --页号,从0开始
 @PageSize INT = 10                 --页尺寸
AS
BEGIN
 IF @SelectList IS NULL OR LTRIM(RTRIM(@SelectList)) = ''
 BEGIN
 SET @SelectList = '*'
 END
 PRINT @SelectList
 
 SET @SearchCondition = ISNULL(@SearchCondition,'')
 SET @SearchCondition = LTRIM(RTRIM(@SearchCondition))
 IF @SearchCondition <> ''
 BEGIN
 IF UPPER(SUBSTRING(@SearchCondition,1,5)) <> 'WHERE'
 BEGIN
 SET @SearchCondition = 'WHERE ' + @SearchCondition
 END
 END
 PRINT @SearchCondition

 SET @OrderExpression = ISNULL(@OrderExpression,'')
 SET @OrderExpression = LTRIM(RTRIM(@OrderExpression))
 IF @OrderExpression <> ''
 BEGIN
 IF UPPER(SUBSTRING(@OrderExpression,1,5)) <> 'WHERE'
 BEGIN
 SET @OrderExpression = 'ORDER BY ' + @OrderExpression
 END
 END
 PRINT @OrderExpression

 IF @PageIndex IS NULL OR @PageIndex < 1
 BEGIN
 SET @PageIndex = 1
 END
 PRINT @PageIndex
 IF @PageSize IS NULL OR @PageSize < 1
 BEGIN
 SET @PageSize = 10
 END
 PRINT @PageSize

 DECLARE @SqlQuery VARCHAR(4000)

 SET @SqlQuery='SELECT '+@SelectList+',RowNumber
 FROM
 (SELECT ' + @SelectList + ',ROW_NUMBER() OVER( '+ @OrderExpression +') AS RowNumber
 FROM '+@TableSource+' '+ @SearchCondition +') AS RowNumberTableSource
 WHERE RowNumber BETWEEN ' + CAST(((@PageIndex - 1)* @PageSize+1) AS VARCHAR)
 + ' AND ' +
 CAST((@PageIndex * @PageSize) AS VARCHAR)
-- ORDER BY ' + @OrderExpression
 PRINT @SqlQuery
 SET NOCOUNT ON
 EXECUTE(@SqlQuery)
 SET NOCOUNT OFF
 
 RETURN @@RowCount
END

 

 

 

4.利用left join

select top 10 * from Table_A left join (select top 10 id from Table_A ) Table_B  where Table_B.id is null;

 

5.利用order by,不过这种速度不行

select top 10 * from (select * from (select top 20 * from Table_A order by id asc) Table_B order by Table_B desc) Table_C order by Table_C.id;

 

6.如果确定分页只有一两页,不会太多,还不如直接读取出来在程序里边自己分页。

分享到:
评论

相关推荐

    SQL分页查询原理讲解

    本篇将深入讲解SQL分页查询的原理,并结合示例进行详细说明。 首先,让我们了解基本的SQL分页查询方法。在SQL Server中,我们可以利用`TOP`关键字来限制返回的行数,从而实现分页。假设我们有一个名为`Student`的表...

    sql分页存储过程

    sql分页存储过程 CREATE PROCEDURE [dbo].[dbTab_PagerHelper] @TableName VARCHAR(50), --表名 @FieldNames VARCHAR(1000), --显示列名,如果是全部字段则为* @WhereString VARCHAR(256) = NULL, --查询条件 ...

    三种数据库SQL分页方法详解

    ### 三种数据库SQL分页方法详解 在数据库查询过程中,分页是非常常见且重要的一个功能。它可以帮助我们更高效地处理大量数据,特别是在构建大型应用系统时,分页技术能够显著提升用户体验。本文将详细介绍三种...

    java中对sql分页PageBean

    java中对sql分页PageBean

    flex http 请求进行 动态sql分页

    一个flex 的表格分页采用http请求,包含待查询条件的分页,后台取得参数进行sql分页

    分页(sql分页基本上通用,条件和想要显示的内容只要在外边加上就可以了)

    本文将基于提供的SQL分页存储过程,详细介绍其工作原理及实现细节。 #### 二、存储过程概述 此存储过程名为`PAGINATION_JHGL`,主要功能是根据传入的参数实现对数据库表中的数据进行分页查询。下面我们将逐一分析...

    sql分页查询

    ### SQL分页查询详解 #### 一、引言 在数据库操作中,分页查询是一项非常重要的技术。尤其是在处理大量数据时,一次性加载所有数据到前端不仅效率低下,还可能导致性能问题。通过分页查询,我们可以按需获取数据,...

    SQL分页加载数据demo

    "SQL分页加载数据"是指通过SQL查询来实现数据的分批次、按页展示,以提高性能和用户体验。下面我们将深入探讨SQL分页加载数据的相关知识点。 1. **基本概念**:分页是将数据集分割成若干个固定大小的部分,每个部分...

    Oracle的SQL分页实践

    在Oracle数据库中,SQL分页是一种非常常见的查询技术,它允许我们从大量数据中按需获取一部分结果,而不是一次性加载所有记录。这对于提高用户体验和优化系统性能至关重要,尤其是在处理大数据量的Web应用中。本实践...

    常用数据库sql分页

    数据库SQL分页技术 数据库分页是指从大规模的数据集中提取指定的记录数,以减少数据传输量,提高应用程序的性能和用户体验。常见的数据库管理系统包括MySQL、SQL Server、Oracle、DB2等,每种数据库管理系统都有其...

    通用的存储过程sql分页查询语句

    本文将深入探讨通用的存储过程SQL分页查询语句及其背后的原理。 首先,理解存储过程。存储过程是一组预先编译好的SQL语句,存储在数据库服务器中,可以按需调用执行。它的优点包括提高性能、减少网络流量、增强安全...

    速度最快sql分页存储过程

    ### 速度最快SQL分页存储过程详解 #### 概述 在数据库操作中,分页查询是一种非常常见的需求。为了提高查询效率并优化用户体验,设计一个高效、灵活且易于使用的分页存储过程变得尤为重要。本文将详细介绍一个被...

    SQL分页读取海量数据存储过程

    本文将深入探讨如何通过存储过程实现SQL分页读取海量数据。 首先,理解“分页”概念是至关重要的。分页是指将大量结果集分成多个小部分(页),每次只显示一页,用户可以逐页浏览。这在Web应用中非常常见,如搜索...

    .net生成sql分页高性能语句类

    传统的SQL分页方法,如使用`TOP`或`LIMIT`子句,往往需要配合`ORDER BY`,这可能导致全表扫描,性能较低。标题提到的".net生成sql分页高性能语句类"正是为了解决这一问题,它提供了一种无需在SQL Server中编写存储...

    session,sql分页

    在J2EE应用程序开发中,`session`和`SQL分页`是两个非常重要的概念,尤其是在处理用户交互和大量数据时。本文将深入探讨这两个主题,并结合SQL Server数据库的使用来阐述它们在实际开发中的应用。 首先,让我们来...

    oracle sql分页语句

    Oracle SQL分页语句是数据库查询中的一个重要概念,它允许我们从海量数据中按需获取特定范围的结果,比如第一页、第二页等。在Oracle数据库系统中,实现分页查询通常使用ROWNUM伪列或者结合RANK()、DENSE_RANK()、...

    sql分页、jsp分页

    jsp分页、PLSQL中用Group by和Having来实现分组统计、SQL_server_海量数据库查询优化及分页算法、SQL_SERVER数据库中实现快速的数据提取和数据分页、SQLServer 2005下的分页SQL、sql分页查询、sql数据库模糊查询分页...

    SQL简单分页教程~~~详细

    **SQL分页教程详解** SQL分页是一种在数据库中实现数据检索时,限制返回结果集大小的方法,使得用户可以逐页浏览大量数据。本教程将详细介绍一个简单的SQL分页实现,适合初学者理解。 ### 基本原理 SQL分页的核心...

Global site tag (gtag.js) - Google Analytics