精华内容
下载资源
问答
  • oracle分页查询sql语句,oracle分页查询sql语句详解,Oracle分页查询sql语句Oracle中分页和MySql中的分页不同,MySql中的分页使用关键字limit即可,相对简单一点,Oracle中分页使用rownum ,相对复杂一点。sql语句如下...

    oracle分页查询sql语句,oracle分页查询sql语句详解,Oracle分页查询sql语句

    Oracle中分页和MySql中的分页不同,MySql中的分页使用关键字limit即可,相对简单一点,Oracle中分页使用rownum ,相对复杂一点。

    sql语句如下:

    SELECT *

    SELECT t.*, rownum rn

    FROM

    SELECT * FROM USER;

    WHERE

    rn (currentPage-1)*pageSize

    AND rn = currentPage*pageSize;

    Oracle中rownum是虚拟列,是得出结果后,再进行计算的。所以,只能是小于的,无法大于,要使用的大于,就必须使用别名,如上代码中的rn就是使用别名的写法。

    oracle分页查询sql语句的相关网页热门搜索词

    oracle分页查询sql语句详解|oracle数据库分页查询sql|oracle高效分页查询|oracle并发查询sql|oracle并行查询sql语句|oracle并行查询|sql语句性能优化|mysql分页查询sql语句|oracle简单分页|

    本文标题:oracle分页查询sql语句,oracle分页查询sql语句详解

    http://www.jianglexinxi.cn/yanergaozhi/329682.html

    展开全文
  • oracle分页查询sql

    2019-01-15 23:03:22
    oracle分页查询语句sql
  • oracle分页查询SQL

    千次阅读 2019-05-30 09:45:35
    分页查询,第二页,每页10条数据 select * from ( select row_limit.*, rownum rownum_ from ( select count_num.*, count(1)over() totalnum_ from ( select * from mdkzwmx where lgrpcd ='9999' and b...

    分页查询,第二页,每页10条数据

    select * from ( 
        select row_limit.*, rownum rownum_ from (
            select count_num.*, count(1)over() totalnum_ from (
              select * from mdkzwmx where lgrpcd ='9999' and bzbrch ='0098' and recdst = '0' order by loancf,detlsq 
        ) count_num  
      ) row_limit where rownum <= 20 
    )where rownum_ >10
    

     

    展开全文
  • oracle 分页查询sql

    2016-09-19 11:57:22
    分页查询 (假设每页显示10条) 不包含排序: --效率低 select * from (select rownum rn, d.* from DJDRIVER d )p where p.rn=10; select * from (select rownum rn, d.* from DJDRIVER d )p where p.rn ...
     分页查询
    
    (假设每页显示10条)
    
    不包含排序:
    
    
    --效率低
    
    select * from (select rownum rn, d.* from DJDRIVER d  )p where p.rn<=20 and p.rn>=10;
    
    select * from (select rownum rn, d.* from DJDRIVER d  )p where p.rn between 10 and 20;
    
    --效率高 
    
    select * from (select rownum rn, d.* from DJDRIVER d where rownum<=20 )p where p.rn>=10;
    
    
    
    包含排序:
    
    
    --排序+区间查询1(效率低)
    
    select * from (select rownum rn, t.* from ( select d.* from DJDRIVER d order by DJDRIVER_DRIVERTIMES)t )p where p.rn<=20 and p.rn>=10;
    
    select * from (select rownum rn, t.* from ( select d.* from DJDRIVER d order by DJDRIVER_DRIVERTIMES)t )p where p.rn between 10 and 20;
    
    --排序+区间查询2(效率高) 
    
    select * from (select rownum rn, t.* from ( select d.* from DJDRIVER d order by DJDRIVER_DRIVERTIMES)t where rownum<=20 )p where p.rn>=10;

    展开全文
  • ORACLE分页查询SQL语句(最有效的分页)

    万次阅读 多人点赞 2018-11-01 16:18:24
    ** 一、效率高的写法 ** 1.无ORDER BY排序的写法。...即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ROWNUM AS rowno, t.* FROM emp t WHERE hire_date BETWEEN TO_DATE ...

    **

    一、效率高的写法

    **
    1.无ORDER BY排序的写法。(效率最高)
    (经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!)

    SELECT *
    
      FROM (SELECT ROWNUM AS rowno, t.*
    
              FROM emp t
    
             WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                 AND TO_DATE ('20060731', 'yyyymmdd')
    
               AND ROWNUM <= 20) table_alias
    
     WHERE table_alias.rowno >= 10;
    

    2.有ORDER BY排序的写法。(效率较高)
    (经过测试,此方法随着查询范围的扩大,速度也会越来越慢哦!)

    SELECT *
    
      FROM (SELECT tt.*, ROWNUM AS rowno
    
              FROM (  SELECT t.*
    
                        FROM emp t
    
                       WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                           AND TO_DATE ('20060731', 'yyyymmdd')
    
                    ORDER BY create_time DESC, emp_no) tt
    
             WHERE ROWNUM <= 20) table_alias
    
     WHERE table_alias.rowno >= 10;
    

    **

    二、效率垃圾但又似乎很常用的分页写法

    **

    3.无ORDER BY排序的写法。(建议使用方法1代替)
    (此方法随着查询数据量的扩张,速度会越来越慢哦!)

    SELECT *
    
      FROM (SELECT ROWNUM AS rowno, t.*
    
              FROM k_task t
    
             WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                   AND TO_DATE ('20060731', 'yyyymmdd')) table_alias
    
     WHERE table_alias.rowno <= 20 AND table_alias.rowno >= 10;
    
    --TABLE_ALIAS.ROWNO  between 10 and 100;
    

    4.有ORDER BY排序的写法.(建议使用方法2代替)
    (此方法随着查询范围的扩大,速度会越来越慢哦!)

    SELECT *
    
      FROM (SELECT tt.*, ROWNUM AS rowno
    
              FROM (  SELECT *
    
                        FROM k_task t
    
                       WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                             AND TO_DATE ('20060531', 'yyyymmdd')
    
                    ORDER BY fact_up_time, flight_no) tt) table_alias
    
     WHERE table_alias.rowno BETWEEN 10 AND 20;
    

    5.另类语法。(有ORDER BY写法)
    (语法风格与传统的SQL语法不同,不方便阅读与理解,为规范与统一标准,不推荐使用。)

    WITH partdata AS
    
         (
    
            SELECT ROWNUM AS rowno, tt.*
    
              FROM (  SELECT *
    
                        FROM k_task t
    
                       WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                             AND TO_DATE ('20060531', 'yyyymmdd')
    
                    ORDER BY fact_up_time, flight_no) tt
    
             WHERE ROWNUM <= 20)
    
    SELECT *
    
      FROM partdata
    
     WHERE rowno >= 10;
    
     
    
    --6另类语法 。(无ORDER BY写法)
    
    WITH partdata AS
    
         (
    
            SELECT ROWNUM AS rowno, t.*
    
              FROM k_task t
    
             WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                   AND TO_DATE ('20060531', 'yyyymmdd')
    
               AND ROWNUM <= 20)
    
    SELECT *
    
      FROM partdata
    
     WHERE rowno >= 10;
    

    **

    三、分析

    **
    Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。

    分页查询格式:

    SELECT *
    
      FROM (SELECT a.*, ROWNUM rn
    
              FROM (SELECT *
    
                      FROM table_name) a
    
             WHERE ROWNUM <= 40)
    
     WHERE rn >= 21
    

    其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。

    上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。

    选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。这是,查询语句如下:

    SELECT *
    
      FROM (SELECT a.*, ROWNUM rn
    
              FROM (SELECT *
    
                      FROM table_name) a)
    
     WHERE rn BETWEEN 21 AND 40
    

    对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。

    这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。

    而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。

    上面分析的查询不仅仅是针对单表的简单查询,对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。

    这里就不对包含排序的查询进行说明了,下一篇文章会通过例子来详细说明。

    下面简单讨论一下多表联合的情况。

    对于最常见的等值表连接查询,CBO一般可能会采用两种连接方式NESTED LOOP和HASH JOIN(MERGE JOIN效率比HASH JOIN效率低,一般CBO不会考虑)。在这里,由于使用了分页,因此指定了一个返回的最大记录数,NESTED LOOP在返回记录数超过最大值时可以马上停止并将结果返回给中间层,而HASH JOIN必须处理完所有结果集(MERGE JOIN也是)。那么在大部分的情况下,对于分页查询选择NESTED LOOP作为查询的连接方法具有较高的效率(分页查询的时候绝大部分的情况是查询前几页的数据,越靠后面的页数访问几率越小)。

    因此,如果不介意在系统中使用HINT的话,可以将分页的查询语句改写为:

    SELECT *
    
      FROM (SELECT a.*, ROWNUM rn
    
              FROM (SELECT *
    
                      FROM table_name) a
    
             WHERE ROWNUM <= 40)
    
     WHERE rn >= 21
    
    展开全文
  • ORACLE分页查询SQL语法

    2012-10-08 20:50:12
    ORACLE分页查询SQL语法,学学习习。学习
  • String sql="select * from( select e.*,rownum r from( select * from emp order by sal desc )e ) where r between ? and ? ";String sql="select * from( select e.*,rownum r from( select * from emp order by ...
  • oracle分页查询sql语句

    2019-07-28 17:34:42
    oracle分页查询sql语句 select a.empno, a.ename, a.job, a.mgr, a.hiredate, a.sal, a.comm, a.deptno from emp a where a.ename = 'SMITH' ; –1、无ORDER BY排序的写法。(效率最高) SELECT * ...
  • ORACLE 分页查询SQL

    2011-04-13 13:51:26
    --此处之所以在外面包了一层,是因为 ROWNUM不能像rn一样加条件,只有用里面 SQL检索出的结果集才能分页 SELECT b.* FROM (SELECT * FROM (SELECT a.*, rownum rn FROM (SELECT ROWID rid, status FROM ...
  • 以前总结过一篇,Oracle分页查询语句的优化,当时对Oracle分页语句也着实花费了点时间记忆,不过今天在面试的时候,又考到了不同数据库的分页sql语句,对Oracle数据库的书写又存在了问题,以为很熟悉的分页sql书写...
  • * Sql优化 - Oracle数据库 sql优化 - Oracle数据库 Sql优化目的 Sql优化原则 绑定变量 where 条件 索引 排序和分页 其他问题 优化目的 将每一次操作需要占用的数据量(IO)和资源 (cpu,内存等)减少到最低,即在最短的...
  • ORACLE分页查询SQL语法——最高效的分页 author:XIAOHUI_LIAO ---from:http://blog.csdn.net/XIAOHUI_LIAO/article/details/1759990   --1:无ORDER BY排序的写法。(效率最高) --(经过测试,此方法成本最低,...
  • ORACLE分页查询SQL语法--1:无ORDER BY排序的写法。(效率最高) ­--(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) ­SELECT * ­from (Select ROWNUM AS ...
  • 使用数据分页的目的:随着数据库数据的增加,查询结果所需...Ms SqlServer、Oracle实现分页的语句不同,以下为个人在项目中的总结。1. 要分页的数据查询所有数据的SQL语句为(后文称为原始语句):SELECT YPXH, YPMC FR...
  • Oracle分页查询sql语句

    万次阅读 2016-10-25 14:43:07
    1.oracle中的分页查询sql语句基本可以按照如下的模板来改写:SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM ) WHERE RN > 20 其中的SELECT * FROM TABLE_NAME 表示没有...
  • 最简单使用方法 代码如下 复制代码select t2.*from (select rownum r,t1.* from youtable t1 where rownum)...如果你取40-50条之间的分页查询格式: 代码如下 复制代码SELECT * FROM(SELECT A.*, ROWNUM RNFROM (SEL...
  • ORACLE分页查询SQL语句

    2019-10-22 10:05:07
    SELECT * FROM (  SELECT A.*, rownum r FROM (  SELECT * FROM t_placecommon  ) A WHERE rownum <= 10 ) B WHERE r >1
  • oracle 分页查询sql语句

    千次阅读 2016-12-22 09:32:54
    --每页显示2条新闻信息,查看第1页新闻信息(新闻标题、作者、创建时间)的分页sql语句如下 --页码:currPageNo 1 =(currPageNo-1)*PAGESIZE+1 每页显示的记录数:pageSize 此例=2 =CURRPAGENO * PAGESIZE SELECT id...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,215
精华内容 886
关键字:

oracle分页查询sql