刚学ORACLE的时候,就先入为主地认为rownum是一种类似于SQLSERVER的TOP关键字一样的机制————起码咱们最常用的分页可以用这个搞定。
事实并非如此,学习的时候,“空”是很重要的,以前的经验往往是一种坏处。
SQLSERVER中,如果TOP关键字和ORDER BY关键字一起出现,是先ORDER BY 后再TOP。也就是说:取得最前面的几条记录是经过排序的。
而ORACLE中,如果使用WHERE rownum<=N和ORDER BY一起出现的话,ROWNUM优先于ORDER BY。也就是说,ORDER BY无法对所有满足条件的记录排序,只能对当前的rownum<=N中的N条记录排序。
看下面这个分页的查询:
SELECT LimitResult.*
FROM
(
SELECT *, rownum AS r
FROM ATable
WHERE rownum<=40
ORDER BY createTime DESC
) LimitResult
WHERE LimitResult.r>20
--每页20条,取第二页
查询的结果中,仅仅只是对当前页的CreateTime进行了倒序排列,并没有按照所有记录的倒序排列。说明rownum的限制优先于ORDER BY。不得已把查询修改成下面的样子:
SELECT LimitResult.*
FROM
(
SELECT OrderResult.*, rownum AS r
FROM
(
SELECT *
FROM ATable
ORDER BY createTime DESC
) OrderResult
WHERE rownum<=40
) LimitResult
WHERE LimitResult.r>20
明显效率没有以前高了,但是没办法。
以上就是我发现的规律,希望朋友们能提出更好的办法。谢谢!
分享到:
相关推荐
一、oracle中rownum 用于从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。 1、rownum 对于
Oracle查询中rownum与Order by查询 45 oracle9i小结 46 Oracle 数据库的聚簇技术 61 数据库、服务名、实例 63 Oracle内存结构 64 sys用户和system用户 67 Oracle SQL语句 67 GROUPING SETS分组 74 Oracle外部程序...
Oracle与SQL Server应用差异对比分析在Oracle中采用伪列rownum 获取结果集中排在前面的部分记录 Eg: 返回结果集中前10条记录 Select * from sysc01 where rownum Rownum可使用<、符号,不可使用>、>=符号,如果使用...
37. 如何在oracle7和oracle8之间exp-imp数据 38. 如何在Windows 2000下将Oracle完全卸载 39. 如何正确建立TYPE、partition(分区) 40. 如何正确利用Rownum来限制查询所返回的行数 41. 什么是ROWID,为什么需要...
这种方法与 mysql 中的 limit 语句类似,但是 sqlserver 中的 top 语句可以与 order by 语句结合使用,例如: ```sql select top 10 * from table1 order by id desc; ``` 这将取出 table1 中的前 10 条数据,并且...
伪列rownum rownum是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数 ...select * from emp order by sal desc ) where rownum<=3 结果如下: 原创文章 4获赞 4访问量 62 关注 私信
SELECT *, ROW_NUMBER() OVER (ORDER BY MyKey) AS RN FROM TableA ) WHERE RN > 100 AND RN ; ``` 五、总结 在Oracle中,我们可以使用RowNum函数、Minus运算符、Subquery和Top-N查询来实现分页查询。这些方法...
在SQL Server中可以用top n 来返回指定数量的纪录,Oracle中与之对应的是 rownum,只 是不同的是:SQL Server的top n 是逻辑顺序返回的纪录,而Oracle的 rownum 指定的是物理顺 序的序号,其物理的序号是在order by之前就...
`SELECT * FROM (SELECT * FROM 表 ORDER BY 列名 DESC) WHERE ROWNUM * FROM (SELECT * FROM 表 ORDER BY 列名 DESC) WHERE ROWNUM ;` 这些问题涵盖了 Oracle 的基础知识、存储过程、索引、约束、查询等方面,是 ...
由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。 简单地说,实现方法如下所示: SELECT 列名1...列名n FROM (SELECT 列名1...列名n...
ORDER BY column; 15. 如何在给现有的日期加上2年? select add_months(sysdate,24) from dual; 16.Connect string是指什么? 应该是tnsnames.ora中的服务名后面的内容 17.返回大于等于N的最小整数值? SELECT CEIL(-...
从就业与择业的角度来讲,计算机相关专业的大学生从事oracle方面的技术是职业发展中的最佳选择。 其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的...
5.4 order by后面可以跟什么 10 5.5多列排序 10 六、 单行函数的使用 11 6.1数值类型 11 6.2日期类型 11 6.3字符类型 13 6.4转换函数 14 6.5其他注意事项 14 七、 SQL语句中的分支 15 7.1分支表达式 15 7.2分支函数 ...
* 使用ORDER BY子句对数据进行排序,如SELECT * FROM emp ORDER BY ename; 五、多表关联和子查询 * 使用FROM子句关联多个表,如SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno; * 使用子查询进行数据查询,...
2.在没有WITH CHECK OPTION和 READ ONLY 的情况下,查询中不能使用ORDER BY 子句; 3.如果没有为CHECK OPTION约束命名,系统会自动为之命名,形式为SYS_Cn; 4.OR REPLACE选项可以不删除原视图便可更改其定义并...
3、分页, mysql: select * from user order by desc limit n ,m. 表示,从第n条数据开始查找,一共查找m条数据。 Oracle:select * from user select rownum a * from ((select * from user)a) select * from ...
SELECT emp.*, ROW_NUMBER() OVER (ORDER BY empno) AS rn FROM emp ) WHERE rn ; ``` 使用子查询 子查询是 Oracle 数据库中的一种常用的查询方式,可以用来实现分页查询。例如,以下查询将返回 EMP 表中的第 5 ...
WITH t2 AS (SELECT ROWNUM-1 rn FROM dual CONNECT BY ROWNUM(SELECT MAX( ceil(months_between(e_date,s_date)))+1 FROM URP_WAGE.T_WAGE_BASE_ITEM_BKYM)) SELECT employee_id,year_month, Add_months(s_date,...
20.oracle8中扩充了group by rollup和cube的操作。有时候省了你好多功夫的。 下面的语句可以进行总计 select region_code,count(*) from aicbs.acc_woff_notify group by rollup(region_code); <2> 对第1个字段...
利用oracle的dbms_random包结合rownum来实现,示例如下,随机取499户: select * from ( select * from busi.t_ar_userinfo order by dbms_random.value) where rownum < 500; 有关dbms_random的参考文献,链接...