实验加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()函数开销更大