帮忙看下这两条sql的区分

来源:百度知道 编辑:UC知道 时间:2024/05/07 15:08:56
下面两条sql具体有什么不同?请帮帮忙 :)谢谢
select * from (select t.rt_id,rownum Rown from sysmgr_cue t) where Rown<= 10 and Rown>=1

select * from (select t.rt_id,rownum from sysmgr_cue t) where rownum<= 10 and rownum>=1
查询结果一样吗?

不一样
第一句:Rown代表 (select t.rt_id,rownum Rown from sysmgr_cue t)这句话查询出来的rownum
第二句:rownum代表的是外层select * from的rownum,意义不一样。

在你的这两句话中,恰好结果是一样的,但是如果你把 【>=1】的条件改成【>=2】或者其他不等于1的数字,结果就不一样了。

原因:rownum是oracle的隐藏列,他的值是自动从1开始编号,每选择出一个满足条件的值后其值自动加1.
这样如果你写 rownum ,因为是从1开始的=号条件成立选择出一条记录rownum+1直到rownum=10.
但是如果是rownum>=2就不对了,由于rownum初始值1<2,所以没有记录产生,这样rownum就不会自动+1,所以rownum永远是1,因此也就什么值也选择不出来。

你可以试验一下。

--------------
以上,希望对你有所帮助。

不对,不一样,要用上面的
select * from (select t.rt_id,rn from sysmgr_cue t order by 1 desc)
where rn<= 10
这样试的结果就不一样了

你这个例子里面应该是一样的结果,但2句话的意思是不一样的

查询结果(数据)一样
但是结果集显示不一样
第一个
rt_id Rown
1 2
2 3
第二个
rt_id rownum
1 2
2 3