日期:2014-05-16 浏览次数:20478 次
实验加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?但是这两者之间的开销呢?
?
?
我们在看row_number()函数的分析
?
很明显同样的3到10的区间选择使用row_number()函数开销更大