虚拟化容器,大数据,DBA,中间件,监控。

关于oracle中的rownum陷阱

11 10月
作者:admin|分类:DBA运维


关于oracle中的rownum陷阱
 
最近在做关于某一oracle 的sql优化:涉及到关于分页的一些内容。
例如查询top 5 的数据  我们需要写:
  www.2cto.com  
select * from 
(select * from customer order by custcredit)
where rownum < = 5
  而不是写:
select * from customer order by custcredit where rownum <=5
经测试,前一种写法是对的。而后一种则是随机选出5天,再对其进行排序,可见rownum处理先于order by
 
Ps:如果我们要找数据库插入第二个之后的数据,直接用
select * from customer where rownum>2 是查不出记录的,原因是由于rownum是一个总是从1开始的伪列,Oracle 认为rownum> n(n>1的自然数)这种条件依旧不成立,所以查不到记录.那如何才能找到第二行以后的记录呀。可以使用以下的子查询方法来解决。注意子查询中的rownum必须要有别名,否则还是不会查出记录来,这是因为rownum不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列还是主查询的列。 SQL>select * from(select rownum no ,*  from customer )t where no>2;
浏览1770 评论0
返回
目录
返回
首页
oracle 11g查看服务端/客户端编码及修改db编码 Oracle 11g 转换内部编码