rownum使用的时候注意点
2017-01-25 本文已影响100人
悠悠神代不曾闻
rownum不能随便用“>、>=、=、between...and”
运算符,
只能用如下运算符号“<、<=、!=”
并非说用“>、>=、=、between..and”
时会提示SQL语法错误,而是经常是一条数据也查不出来,
举例:rownum>2
,没有查询到任何记录,因为rownum
总是从1开始的,第一条不满足去掉的话,
第二条的rownum
又成了1,依此类推,所以永远没有满足条件的记录。
解决方法:
可以使用下面的子查询方法来解决。
注意子查询中的rownum
必须要有别名,否则仍然会查不到记录,这是因为rownum
不是某个表的列。
如果不起别名的话,无法知道rownum
是子查询的列,还是主查询的列。
例:SQL>select rownum,id,age,name
from(select rownum rn ,id,age,name
from loaddata)
where rn > 2;
可能有时候需要查询rownum
在某区间的数据,从上可以看出rownum
对小于某值的查询条件是认为true
的。
rownum对于大于某值的查询条件直接认为是false
的,但是可以间接的让它转为认为是true
的,那就必须使用子查询。
例如要查询rownum
在第二行到第三行之间的数据,包括第二行和第三行数据,那么只能写以下语句,先让它返回小于等于三的记录行,
然后在主查询中判断新的rownum
的“别名列”大于等于二的记录行。
但是这样的操作会在大数据集中影响到检索速度。
例:SQL>select *
from (select rownum rn,id,age,name
from loaddata
where rownum <= 3 )
where rn >= 2;
必须是里面小,外面大。
rownum
是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。
简单的说rownum
是对符合条件结果的序列号。
它总是从1开始排起的。所以,选出的结果不可能没有1,反而有其他大于1的值。