Oracle的rownum用法
2016-11-06 23:34
1031 查看
rownum来说它是oracle系统顺序分配为从查询(结果集)返回的行的编号(强调:先要有结果集),返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀。
1、(1)查找前n条数据
如果想找到从第二行记录以后的记录,当使用rownum>2是查不出记录的,原因是由于rownum是一个总是从1开始的伪列,Oracle 认为rownum> n(n>1的自然数)这种条件依旧不成立,所以查不到记录。
但是,可使用以下的子查询方法来解决。子查询中的rownum必须要有别名,否则还是不会查出记录来,这是因为rownum不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列还是主查询的列。
2、rownum和order by
(1)对非主键字段进行排序
却发现oracle却不能按自己的意愿来执行,而是先随便取10条记录,然后再order by。
如果需要对非主键字段排序再取前n条数据,只能用子查询来实现先排序,后rownum,可以用下方式实现:
但这样一来,效率会低很多。
出现这种原因是:Oracle先按物理存储位置(rowid)顺序取出满足rownum条件的记录,即物理位置上的前5条数据,然后在对这些数据按照order By的字段进行排序,而不是我们所期望的先排序、再取特定记录数。
(2)对主键字段进行排序
在使用rownum时,只有当order By的字段是主键时,查询结果才会先排序再计算rownum。
1、(1)查找前n条数据
select * from student where rownum <= n(2)查询大于第n条记录(n>1)
如果想找到从第二行记录以后的记录,当使用rownum>2是查不出记录的,原因是由于rownum是一个总是从1开始的伪列,Oracle 认为rownum> n(n>1的自然数)这种条件依旧不成立,所以查不到记录。
但是,可使用以下的子查询方法来解决。子查询中的rownum必须要有别名,否则还是不会查出记录来,这是因为rownum不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列还是主查询的列。
select * from(select rownum rowno,id,name,age from student) <span style="font-family: Arial, Helvetica, sans-serif;">where rowno>n</span>
2、rownum和order by
(1)对非主键字段进行排序
select * from student where rownum<10 order by name --name为非主键字段
却发现oracle却不能按自己的意愿来执行,而是先随便取10条记录,然后再order by。
如果需要对非主键字段排序再取前n条数据,只能用子查询来实现先排序,后rownum,可以用下方式实现:
select * from (select * from tabname order by name) where rownum<10
但这样一来,效率会低很多。
出现这种原因是:Oracle先按物理存储位置(rowid)顺序取出满足rownum条件的记录,即物理位置上的前5条数据,然后在对这些数据按照order By的字段进行排序,而不是我们所期望的先排序、再取特定记录数。
(2)对主键字段进行排序
在使用rownum时,只有当order By的字段是主键时,查询结果才会先排序再计算rownum。
select * from student where rownum<10 order by name --name为主键
相关文章推荐
- Oracle中RowNum的用法
- Oracle中rownum的用法
- Oracle rownum的用法
- oracle中rownum的用法
- (Oracle)rownum用法详解 转载的
- Oracle的内置分页虚拟列rownum的用法
- Oracle rownum用法详解,可以实现分页
- (Oracle)rownum用法详解
- Oracle中rownum用法总结-入门基础
- Oracle中rownum的用法
- oracle中rownum的用法--主要用于分页中
- (Oracle)rownum用法详解
- oracle rownum用法关于分页,只要看懂了原理,你就明白了,也算是自己学习过程的一个思考
- Oracle rownum的用法
- (2010-07-18)Oracle中rownum用法详解
- Oracle中rownum用法总结
- Oracle中ROWNUM用法总结
- oracle中rownum用法总结
- sql语句中select top n与oracle的rownum与mysql的limit用法
- Oracle中的rownum,ROWID的 用法