STUDENT(学生信息表)
 
 ID   NUMBER(8) N 学号
 NAME   VARCHAR2(10) N 姓名
 AGE   NUMBER(4) N 年龄
 REMARK   VARCHAR2(100) Y 备注
 
 -----------------------------------
 SELECT *
 FROM 
      (
  SELECT RESULT.*, ROWNUM rn
  FROM 
       (
   SELECT   a.id
     || '|'
     || a.name
     || '|'
     || a.AGE
     || '|'
     || a.REMARK
   FROM STUDENT a
   ORDER BY a.AGE DESC
       ) RESULT
      )
  WHERE rn >= 101 AND rn <= 200
  ------------------------------------------------
  以上sql是查询出年龄是第101名到第200名之间的100名学生(假定年龄不重复)的信息并将信息进行字符串连接(用“|”隔开)
  ------------------------------------------------
 
  ?优化上面那条sql语句,尽可能的提高查询效率
   可以不基于以上sql语句,只要返回结果集相同,用其他思路实现效率的提高亦可
 

解决方案 »

  1.   

    SELECT *
     FROM 
          (
       SELECT  ROWNUM rn, a.id   || '|'  || a.name   || '|'  || a.AGE  || '|'  || a.REMARK
       FROM STUDENT a
       ORDER BY a.AGE DESC
          )
     WHERE rn >= 101 AND rn <= 200
      

  2.   

    ROWNUM 完全可以放到最内层执行。
      

  3.   

    ROWNUM 完全可以放到最内层执行
    -----
    不行的,这个rownum是原student的。把 rn <= 200的条件放在倒数第二层试试,不知道有没有效果。