日期:2014-05-16  浏览次数:20490 次

rownum使用注意

实验加google

?

第一.rownum是伪列不能用表的别名去引用,如select t.rownum from xx t ;

?? ? ? 报错:列说明无效

?? ? ? 但是我们可以给他别名 rownum rno

?

第二.rownum是从1开始的,所以选择rownum=2的时候选择不出记录的

?

?

第三.rownum的<是默认成立的,但是>是不成立的,要使用>必须要注意两点:

?? ? 1).要使用子查询

?? ? 2).要给rownum一个别名

?

?

select * from
(
   select rownum rno, t.id, t.province_code, t.province_name from card_province t 
)
where rno>3

?可以选择大于3的记录

?

第四.如果要选择一个区间的记录,也要使用子查询,注意事项同上三的一二

?

?

select * from
(
   select rownum rno, t.id, t.province_code, t.province_name from card_province t where rownum <10
)
where rno>3

?可以选择3到10之间的数据

?

第五.要使用rownum排序也要使用子查询,如:

?

select rownum ,p.province_code,p.province_name from
(
  select t.province_code,t.province_name from card_province t
  group by t.province_code,t.province_name
)p where rownum <10

?这样所有的记录group by后就是按照rownum排序的了

?

当然我们也可以使用row_number()来选择区间数据

select province_code,province_name from
(
   select province_code,province_name ,row_number()over(order by province_code)as rnum from card_province
)
where rnum between 3 and 10
?但是这两者之间的开销呢?

?

rownum分析

?

我们在看row_number()函数的分析

?

很明显同样的3到10的区间选择使用row_number()函数开销更大