关于子查询中不能使用order by 的理解

select * from (select * from emp e where e.sal < 1000 order by e.empno) t order by t.sal desc;

这条SQL的子查询里面 包含了子查询 就可以执行
而下面这条SQL
[quote]select * from emp where dept in
(select dept from valid_deps
where dept_head='sally'
order by dept);[/quote]
在执行的时候则会报[img]“ORA-00907:缺失右括号”[/img]

具体原因:
在8i以前,子查询中不能包含Order By子句。

从8i开始,子查询可以有Order By,但必须是有top-n的这种子查询时才能用。

所谓的top-N查询就是:
TOP-N一般是指最大的n条记录或着是最小的n条记录。
如:
select rownum , t.col1, t.col2, ... from
( select col1, col2, ... from tab
order by col1 ) t
where rownum <= n;

参考文章:[url]http://blog.csdn.net/lee576/article/details/2685647[/url]

你可能感兴趣的:(oracle)