比如说搜索引擎,
同一个主题可能select到有几十万个相关内容,但是每页只能显示10(或20)个内容。如果在select相关网页的时候一次性全部检索出所有的内容势必浪费服务器资源。
我的问题是:用什么办法能实现select时首先只检索第一页所需要的叶面,点击下一页时显示第二页内容....

解决方案 »

  1.   

    select *  from  tablename where  Where Rownum<=10或者20
    试试
      

  2.   

    用rownum,通过前台jsp控制rownum来控制每页的显示记录
      

  3.   

    select * from table where rownum > 10 and rownum < 20

    select * from table where rownum between 10 and 20
    什么都检索不到阿
      

  4.   

    6~10示例select r,e.* from (select rownum r,last_name,salary from (
    select last_name,salary from employees order by nvl(salary,0) desc)) e
    where r between 6 and 10;
      

  5.   

    楼上的你这样达不到效果哦!~
    最里面的select已经是全表扫描了
      

  6.   

    是举个例子啦,告诉你怎么使用rownum的。
    rownum是当前sql所有返回结果的排序值。
    举的例子,是取“所有返回结果”的第6~10条记录。
      

  7.   

    sql*plus可以set pagesize 吧据我了解用rownum>10不好,不方便排序
      

  8.   

    一般情况下,rownum是永远从1开始的。所以,一般情况下使用是这样的SQL> select rownum,u.username from dba_users u where rownum<15;    ROWNUM USERNAME
    ---------- ------------------------------
             1 SYSTEM
             2 ACCTMAN
             3 DGEXP
             4 OVSEE
             5 SBSINTF
             6 LBSINTF
             7 PACARINTF
             8 REINSINTF
             9 PTYACC_OPR
            10 TEST_1
            11 ACCTINTF
            12 PCISETLOPR
            13 TEST
            14 PCISETL14 rows selected
      

  9.   

    回复人:cyyno1(GunRose) ( 一级(初级)) 信誉:100  2006-12-25 17:15:24  得分:0 不用rownum有什么方法?研究下分析函数,你会大有收获!
      

  10.   

    分析函数中有个
    row_number()函数,可以在分组和排序的基础上进行编号。
      

  11.   

    其实俺也是新手,那天老大叫我研究下分析函数,稍微看了下,还没有怎么用过
    thomas Kyte的expert one-on-one oracle(oracle专家高级编程)
    中有一章是关于分析函数的,你可以看看
      

  12.   

    难道就就不建议用分页吗?如果是在数据库内部的话用ROWNUM,如果是页面显示的话就用分页了。
      

  13.   

    select * from 
    (
    select rownum as ROWNO ,t.* from (
    select TAB_recv.* from TAB_recv 
    order by msgno Desc
    ) t 
    where rownum <= 200010 ) 
    where ROWNO >= 200000这种是最快的了.......row_number()函数,确实写出来的代码短,但速度只在最后面几页快。一般查都是查前面的,所以不用这个.....
    select * from (
    Select   ROW_NUMBER() OVER ( ORDER   BY  msgno desc ) as ROW_NUMBER
             ,TAB_recv.*
             from TAB_recv
     ) where ROW_NUMBER between 300000 and 300010