有大佬知道,oracle中的rownum 是什么时候产生的?求解释!

oracle 中的rownum 是什么时候产生的?
在一个查询语句中
select a,*, rownum from test
group by a.sysid
等到的rownum并不是按顺序排的。

HUWWW
浏览 400回答 3
3回答

胡子哥哥

rownum是在你操作数据的时候,会默认生成一个序号从1开始,一直到记录的总条数,数字不会跳跃。几种常见的用法:select rownum,c1 from t1 where rownum != 10 返回的结果是前9条,原因很简单,取出来前9条后,跳过第10条,后面的会继续补充第10条,这样一直到结尾都还是第十条,不满足条件,也就是前面的 9条。select rownum,c1 from t1 where rownum  between 1 and 10;查询的结果是1到10条,从序号1到10的数据。select rownum,c1 from t1 where rownum  between 2 and 10;查询结果为空,因为跳过第一条,下一条记录继续rownum为1.一直到数据结束也还是1.也就不存在从2开始的数据。

aluckdog

在我说什么时候产生的之前,我想说一下SELECT这个查询语句的执行顺序问题:语法是:select * from table_namewhere conditons1group by some_columnhaving conditions2order by some_column;执行时是这样的:先从表中查询出所有的数据,然后conditions1中筛选出符合条件的数据,然后对数据进行分组,having是对分组后的数据进行筛选,最后进行排序,不过聚合函数与group by一起出现时,聚合函数会后执行.明白这个之后,rownum这个伪列就不可能会在where之后出现,所以不管查询有什么条件,在完成select * from table_name这个时候,它就出现了,就会在表的每一行上按顺序加上rownum.比如你说的这个查询如果想按顺序出现rownum应该这样写:select a.*,rownum a_rownum from(select * from test group by a.sysid) a;当然了里面的子查询要正确;如果说你想对test表中的数据查询出来之后,按SYSID这一列进行排序后查询3到5条数据,类似于小数据量(千万条以内)的先排序后分页:语句可以这样写select * from (select a.*,rownum t_rownum from (select * from test order by sysid)) where t_rownum between 3 and 5;总之就是说:select a.* ,rownum a_rownum from table_name a时就会在列上按顺序加上rownum.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL
Oracle