Oracle 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>1的自然数)这种条件依旧不成立,所以查不到记录

SQL>select * from(select rownum no ,id,name from student) where no>2;

从上可以看出rownum对小于某值的查询条件是人为true的,rownum对于大于某值的查询条件直接认为是false的,但是可以间接的让它转为认为是true的。那就必须使用子查询。例如要查询rownum在第二行到第三行之间的数据,包括第二行和第三行数据,那么我们只能写以下语句,先让它返回小于等于三的记录行,然后在主查询中判断新的rownum的别名列大于等于二的记录行。但是这样的操作会在大数据集中影响速度。
SQL> select * from (select rownum no,id,name from student where rownum<=3 ) where no >=2;

select ts.* from ts_user ts where rownum between 21 and 30   //查不出数据

select * from (select ts.*,rownum rownum_ from ts_user ts ) where rownum_  between 21 and 30

时间: 2024-10-30 07:21:50

Oracle rownum的相关文章

Oracle rownum影响执行计划

今天调优一条SQL语句,由于SQL比较复杂,用autotrace很难一眼看出哪里出了问题,直接上10046. SELECT AB.* FROM (SELECT A.*, rownum RN FROM (SELECT * from (SELECT DISTINCT (D.DEVICE_ID), F.FUNCTION_LOCATION_ID from GG_device D, GG_CLASSIFY_CARD C, GG_function_location F, GG_fl_device L, GG

[Oracle] ROWNUM和分页

rownum是oracle的一个伪劣,它的顺序根据从表中获取记录的顺序递增,这里要注意的是:由于记录在表中是无序存放的,因此你无法通过简单的rownum和order by的组合获得类似TOP N的结果. 我们的测试数据如下: select * from test; ID NAME ---------- -------------------- 1 A 3 C 4 C 8 C 10 D 2 B 5 C 7 C 6 C 9 D 通过rownum<=5可以获得前5行数据: select * from

利用oracle rownum让表排序字段值连续

利用oracle rownum让表排序字段值连续 1.需求说明 表(eval_index)中有字段如下: 表字段 描述 说明 ID 主键 GROUP_ID 分组编号 SORT_NUM 排序序号 按照分值编号并排序:1.2.- 由于删除或其他操作,导致sort_num序号不连续:需要不改变原来的排序,保持其编号连续. 2.利用rownum功能实现 update eval_index a seta.sort_num = ( select b.rn from (select rownum rn ,id

Oracle rownum原理和使用

对于查询返回的每一行,使用rownum伪列返回一个数字,表示oracle从表中选择行或将加入行的顺序. 选择的第一行rownum为1,第二行为2,以此类推. 可以使用rownum来限制由查询返回的行数,如下例子: select * from test where rownum < 10; 如果一个order by子句和rownum在同一个查询,那么行会由order by子句中重新排序,看如下例子 select rownum, name, address, birthday from test w

oracle rownum 注意事项

1.使用rownum一定要包含第一条记录,如果不包含第一条记录,则不会返回结果.因为rownum是伪列,是有结果集之后再加上的列.而且是从1开始排列的. 2.在使用rownum时,只有东order by的字段是主键时,查询结果才会先排序后再计算rownum,反之,如果排序字段不是主键,则会出现先有rownum,在对结果集进行排序的情况. 3.排序分页是注意,oracle对排序结果及做了优化,如果排序字段存在多条相同记录时,可能在多页中出现相同的记录:解决方法是排序时,除了使用原本的排序字段,在加

oracle rownum ( 原:http://blog.csdn.net/lg312200538/article/details/4587455)

Oracle中rownum用法总结 2009-09-24 10:29 5068人阅读 评论(0) 收藏 举报 oracle数据库csql 对于Oracle的rownum问题,很多资料都说不支持>,>=,=,between……and,只能用以上符号(<.<=.!=),并非说用>,>=,=,between……and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个rownum伪列的意义就不应该感到惊奇,同样是伪列,r

oracle: Rownum原理

Rownum原理: 1 Oracle executes your query. 执行查询操作 2 Oracle fetches the first row and calls it row number 1. 将第一行的row num置为1 3 Have we gotten past row number meets the criteria? If no, then Oracle discards the row, If yes, then Oracle return the row. 将得到

Oracle ROWNUM用法和分页查询总结

********************************************************************************************************** [转载] Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询格式(一):http://yangtingkun.itpub.net/post/468/100278 Oracle分页查询格式(二):http://yangtingkun.itpub.ne

oracle rownum对排序的影响

1. 标准的rownum分页查询使用方法: select *       from (select c.*, rownum rn from content c)      where rn >= 1        and rn <= 5 2. 但是如果, 加上order by addtime 排序则数据显示不正确 select *       from (select c.*, rownum rn from content c order by addtime)      where rn &