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的值。

上一篇下一篇

猜你喜欢

热点阅读