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语句,只要返回结果集相同,用其他思路实现效率的提高亦可
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语句,只要返回结果集相同,用其他思路实现效率的提高亦可
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
-----
不行的,这个rownum是原student的。把 rn <= 200的条件放在倒数第二层试试,不知道有没有效果。