对于 rownum 来说它是 oracle 系统顺序分配为从查询返回的行的编号,返回的第一行分配的是 1 ,第二行是 2 ,依此类推,这个伪字段可以用于限制查询返回的总行数,而且 rownum 不能以任何表的名称作为前缀。
(1) rownum
对于等于某值的查询条件
如果希望找到学生表中第一条学生的信息,可以使用
rownum=1
作为条件。但是想找到学生表中第二条学生的信息,使用
rownum=2
结果查不到数据。因为
rownum
都是从
1
开始,但是
1
以上的自然数在
rownum
做等于判断是时认为都是
false
条件,所以无法查到
rownum = n
(
n>1
的自然数)。
(
2
)
rownum
对于大于某值的查询条件
如果想找到从第二行记录以后的记录,当使用
rownum>2
是查不出记录的,原因是由于
rownum
是一个总是从
1
开始的伪列,
Oracle
认为
rownum> n(n>0
的自然数,n=0则查询全部
)
这种条件依旧不成立,所以查不到记录。
(
3
)
rownum
对于小于某值的查询条件
如果想找到第三条记录以前的记录,当使用
rownum<3
是能得到两条记录的。显然
rownum
对于
rownum<n
(
(n>1
的自然数)的条件认为是成立的,所以可以找到记录。
综上几种情况,可能有时候需要查询
rownum
在某区间的数据,那怎么办呀从上可以看出
rownum
对小于某值的查询条件是人为
true
的,
rownum
对于大于某值的查询条件直接认为是
false
的,但是可以间接的让它转为认为是
true
的。那就必须使用子查询。例如要查询
rownum
在第二行到第三行之间的数据,包括第二行和第三行数据,那么我们只能写以下语句,先让它返回小于等于三的记录行,然后在主查询中判断新的
rownum
的别名列大于等于二的记录行。但是这样的操作会在大数据集中影响速度。