oracle排序后查询前10条记录

神勇无敌.ZXF 2007-11-28 11:24:57
在sql server中:
select top 10 from users;

而在oracle上网搜到的是:
select * from (select * from users order by userid desc) where rownum<=5;
或select * from users where rownum<=5 order by userid desc;

为什么在from后面可以写select语句啊, 哪位高手解释一下原理? from后面不是接表名吗?
以上两种查询有什么区别? 分别有在什么场合?
...全文
3562 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiongge2005 2012-10-25
  • 打赏
  • 举报
回复
擦 我也是来接分的
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

结帖有分吗
[/Quote]

我勒个去 快5年的帖子也能被你挖出来 不学挖土机专业真是浪费了
hasegawa2011 2012-04-09
  • 打赏
  • 举报
回复
结帖有分吗[Quote=引用 6 楼 的回复:]

KAO
居然是半年多前的贴子,此楼主居然都没结贴,楼主被列为不予回答的行列
[/Quote]
gh_li 2008-06-27
  • 打赏
  • 举报
回复
学习
hebo2005 2008-06-23
  • 打赏
  • 举报
回复
KAO
居然是半年多前的贴子,此楼主居然都没结贴,楼主被列为不予回答的行列
无爱大叔 2008-06-23
  • 打赏
  • 举报
回复
不错,感谢楼上的朋友,给了我很多启发
ShenLiang2025 2007-12-02
  • 打赏
  • 举报
回复
关于这两个语句的执行过程和区别Floor All Above都做了分析
我想说的是from后面为什么一定要跟表呢?不是很像嵌套嘛.如果一张表里可以解决所有查询...
那自然不会有子查询(Subqueries) 、各种Join,Union之类、各种分析函数(Analytic Functions)等等了 ~

可能你习惯了如下的查询:


--:求供应工程J1零件为红色的供应商号SNO

select distinct sno
from spj,p
where spj.jno='j1'
and spj.pno=p.pno
and color='红';

--事实上下面的则更高效

select distinct sno
from spj
where jno='j1'
and exists
(select *
from p
where spj.pno=p.pno and color='红');

--或者

select distinct sno
from spj
where jno='j1'
and pno in
(select pno
from p
where color='红');


ruihuahan 2007-11-29
  • 打赏
  • 举报
回复
为什么在from后面可以写select语句啊
=================================
这就是内嵌视图,这里的select 语句可以看作一个视图。


select * from users where rownum <=5 order by userid desc;
=============================================================
取排序前的前5条记录(很少用)


select * from (select * from users order by userid desc) where rownum <=5;
==============================================================================
取排序后的前5条记录(经常用)
hebo2005 2007-11-28
  • 打赏
  • 举报
回复
两种语法主要用途当然是取最前面的5条纪录,不过目地不同,用法不同

如果只是取查询结果的前五位,那就先ROWNUM再ORDER BY
如果是要取号码最大或者最小的前五位,就必须先ORDER BY再取ROWNUM<=5,要注意的是rownum不能直接跟在order by后面,所以要有子查询
hebo2005 2007-11-28
  • 打赏
  • 举报
回复
from 后面跟select是子查询,用的很多,尤其是类似于TOT,或者多表关联查询

你这两句出来的结果有区别
假设数据
userid
1
3
2
8
6
7
9
5
4

第一句出来的结果是
userid
9
8
7
6
5
第二句出来的结果是
8
6
3
2
1

说明下,rownum可以看作个隐藏的字段,是当前显示的行号,第一句是先降序后,再取rownum的前五位
原始数据
userid rownum
1 1
3 2
2 3
8 4
6 5
7 6
9 7
5 8
4 9
先降序后就变成了
userid rownum
9 1
8 2
7 3
6 4
5 5
4 6
3 7
2 8
1 9
所以出来的结果就是
userid
9
8
7
6
5
而第二句先取前五位,再排序就是

userid rownum
1 1
3 2
2 3
8 4
6 5
然后降序
8
6
3
2
1

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧