-----------这种写法找不出一条数据----------
select my_table.*,rownum from
(
select student_id,NAME from student
union
select student_id,cno from sc
)my_table where rownum>10 and rownum<21
------红色字体是不是oracle自带的一种计算条数的变量
------------这种写法就可以查询到结果(10至20条数据)------------
------蓝色字体是什么意思
select * from
(
select my_table.*,rownum my_rownum from
(
select student_id,NAME from student
union
select student_id,cno from sc
)my_table where rownum<21
)where my_rownum>10 ------解决方案-------------------- ROWNUM只适用于小于或小于等于,如果进行等于判断,那么只能等于1,不能进行大于的比较。
ROWNUM的返回很简单,ROWNUM总是从1开始,不管当前的记录是否满足查询结果,ROWNUM返回的值都是1,如果这条记录的值最终满足所有的条件,那么ROWNUM会递加,下一条记录的ROWNUM会返回2,否则下一条记录的ROWNUM仍然返回1。
理解了这一点,就清楚为什么一般的ROWNUM大于某个值或等于某个不为1的值是无法返回结果的,因此对于每条记录的ROWNUM都是1,而ROWNUM为1不满足查询的结果,所以下一条记录的ROWNUM不会递增,仍然是1,因此所有的记录都不满足条件。 ------解决方案-------------------- rownum 不是 my_table 中的字段, 可以理解为一个递增的常量。
这样的话,在where 中时取不到rownum 的值的。。。
select * from
(
select my_table.*,rownum my_rownum from
(
select student_id,NAME from student
union
select student_id,cno from sc
)my_table where rownum<21
)where my_rownum>10