`

典型的分页查询SQL

    博客分类:
  • SQL
SQL 
阅读更多

一、带排序的分页查询

这里以修改DB中的修改记录顺序排列为例,查找第9990到10000条之间的记录:

select t2.*
  from (select rownum rnum, t1.*
          from (select * from ABC p order by p.gmt_modified) t1
         where rownum <= 10000) t2
 where t2.rnum >= 9990

这里需要注意一下几点:

  1. 这是典型的3层查询结构,sql执行的顺序是由里层到外层依次执行。
  2. 第1层查询只做排序
  3. 第2层只限定查询范围的上限
  4. 第3层限定查询范围的下限

 

二、不带排序的分页查询

这里同样以修改DB中的修改记录顺序排列为例,查找第9990到10000条之间的记录(通上例完全一样,只要去掉其中第一层的排序就ok了):

select *
  from (select p.*, rownum rnum from ABC p where rownum <= 10000) t1
 where t1.rnum >= 9990

 

 三、需要级联两张表的排序分页

样例sql如下:

SELECT a.*, b.receive_fee
  FROM (SELECT t2.*
          FROM (SELECT t1.*, ROWNUM rnum
                  FROM (SELECT t.*
                          FROM beyond_trade_base t
                         WHERE seller_account = :1
                           AND gmt_create >= TO_DATE(:2, 'yyyy-mm-dd')
                           AND gmt_create < TO_DATE(:3, 'yyyy-mm-dd')
                         ORDER BY gmt_create DESC) t1
                 WHERE ROWNUM <= :4) t2
         WHERE rnum >= :5) a,
       beyond_trade_process b
 WHERE a.trade_no = b.trade_no(+)

上述写法比较高效,因为这个4层查询中,最里面的3层查询完全是排序的分页查询,两张表的关联值发生在了最外层(也就是最后一层)。

但是,悲剧的是这种高效的写法未必任何场景都可以适用。如果需要在最内层的条件筛选的时候就加上beyond_trade_process的某些字段值作为筛选条件,显然上面的写法就不行了。如果是那样的话,就需要适当的将

a.trade_no = b.trade_no(+) 的条件往内层查询移动了。当然这里这个条件越靠近外层性能会越好!因为表间级联还是很耗费性能的。

 

分享到:
评论

相关推荐

    oracle分页查询sql

    下面是一段典型的分页查询 SQL 语句: ```sql SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM ) WHERE RN &gt;= 21 ``` 这段 SQL 的执行逻辑如下: - 首先,内部子查询 ...

    jdbc 分页 sql语句

    ### JDBC分页SQL语句详解 #### 一、引言 在数据库操作中,分页查询是非常常见且重要的一个功能。对于大型应用而言,一次性加载大量数据不仅会消耗过多资源,还可能导致用户体验下降。因此,合理地进行分页处理显得...

    SqlServer数据库中的分页语句

    一个典型的分页查询语句结构如下: ```sql SELECT * FROM ( SELECT TOP pagesize * FROM ( SELECT TOP pagesize*cureentpage * FROM user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as...

    Oracle分页查询(很不错的介绍)

    以下是一个典型的分页查询模板: ```sql SELECT * FROM ( SELECT A.*, ROWNUM RN FROM ( SELECT * FROM TABLE_NAME ) A WHERE ROWNUM ) WHERE RN &gt;= 21 ``` 在这个模板中,最内层的`SELECT * FROM TABLE_NAME`...

    ajax分页查询完美示例

    在实际应用中,一个典型的Ajax分页查询流程如下: 1. **前端界面**:用户在界面上选择页码或者调整每页显示的条目数,触发一个Ajax请求。 2. **Ajax请求**:使用JavaScript的XMLHttpRequest对象创建异步请求,发送...

    jsp/servlet分页带查询示例

    【标题】"jsp/servlet分页带查询示例"是一个典型的Web开发教程,它涵盖了如何在Java Web应用...它涵盖了从数据库配置、SQL查询、Servlet处理请求到JSP展示结果的完整流程,对于初学者来说是一个非常实用的学习资源。

    SSM+分页展示查询项目

    通常,项目会包含实体类(Entity)对应数据库表,以及对应的Mapper接口和XML文件,用于定义SQL查询。 6. **项目结构**:一个典型的SSM项目结构通常包括src/main目录下的java、resources、webapp等子目录。其中,...

    Oracle与SQL的分页实现

    以下是一种典型的分页查询实现: ```sql -- 获取第n页的数据,每页显示m条记录 WITH PageData AS ( SELECT t.*, ROWNUM as row_num FROM (SELECT * FROM table_name ORDER BY id) t WHERE ROWNUM *m ) SELECT * ...

    典型SQL练习题

    这个“典型SQL练习题”压缩包提供了深入理解和掌握SQL查询技能的机会。下面,我们将深入探讨标题和描述中所涵盖的知识点,并结合提供的文件,给出详细的学习路径。 首先,"PracticeOfSqlQuery.doc"可能是一个文档,...

    SQL Server 2005分页显示存储过程

    SQL Server 2005 提供了多种方法来实现分页查询,本文将详细介绍几种典型的分页显示存储过程,并比较它们之间的执行效率。 #### 核心知识点 ##### 1. 使用 `SELECT TOP` 和 `NOT IN` 实现分页 这种方法是通过先...

    SQL SERVER 分页存储过程

    通过上述分析可以看出,该存储过程是一个典型的分页查询实现案例。它不仅能够处理复杂的过滤条件,还提供了排序功能,并能够正确计算出总页数和总记录数,从而为前端提供准确的数据。此外,通过使用动态 SQL 构建...

    数据库分页大全,oracle,sqlserver,mysql

    假设我们有一个名为`t_order`的表,下面是一些典型的分页查询示例: - 查询第一页前5条记录: ```sql SELECT * FROM t_order LIMIT 0, 5; ``` - 查询第二页的记录(第6条到第10条): ```sql SELECT * FROM t...

    SQLSERVER存储过程分页

    "SQLSERVER存储过程分页"这个主题主要涉及如何利用存储过程来实现数据库查询结果的分页显示。在大数据量的场景下,分页查询对于提高用户体验和服务器性能至关重要。 分页查询的基本思想是限制每次从数据库中检索的...

    C# SQL2005 分页排序存储过程

    在这个存储过程中,我们使用动态SQL来构建查询语句,包含`OFFSET`和`FETCH NEXT`子句来实现分页效果,同时根据`@SortColumn`和`@SortOrder`参数完成排序。 在C#代码中,我们可以使用ADO.NET的SqlCommand对象来调用...

    浅谈分页思路

    一个典型的真分页SQL查询会使用ROWNUM函数(针对Oracle数据库)或者LIMIT和OFFSET(针对MySQL数据库)来限制返回的结果集大小。例如,在Oracle数据库中,可以使用如下SQL: ```sql SELECT * FROM (SELECT ROWNUM AS...

    sturts+oracle+jdbc实现分页

    Oracle数据库是一个功能强大的关系型数据库管理系统,支持复杂的SQL查询和高级特性,如游标、存储过程等。在实现分页查询时,我们可以利用Oracle的ROWNUM关键字。例如,一个简单的分页SQL语句可能是: ```sql ...

    ASP分页通用类 asp分页

    ' 构造并执行分页SQL pagedSQL = paging.GetPagedSQL("SELECT * FROM " & tableName, tableName) pagedData = ExecuteSQL(pagedSQL) ' 在页面上输出分页链接 response.Write(paging.GeneratePageLinks()) ``` 最后...

    SSI框架搭建增删改查以及分页

    例如,通过在查询SQL中添加LIMIT和OFFSET子句(在Oracle中可能需要使用ROWNUM),配合前端传递的页码和每页条数,就能实现动态分页。 项目中的"SSIbatise"可能是包含了所有配置文件、源代码、SQL脚本等资源的文件夹...

    jsp+servlet的demo(分页,查询,增删改查)

    这是一个典型的后端开发示例,用于展示如何通过这两种技术实现动态网页功能,包括数据的检索、分页显示、以及CRUD(Create, Read, Update, Delete)操作。 **JSP** 是Java的一种视图技术,它允许开发者在HTML中嵌入...

    node.js+express+mysql实现增删改查+分页+文件上传

    为了实现分页,我们需要在查询时添加`LIMIT`和`OFFSET`子句。假设每页显示10条记录,我们可以根据页码计算偏移量,然后执行查询。例如: ```javascript const pageSize = 10; const currentPage = 3; const offset ...

Global site tag (gtag.js) - Google Analytics