Oracle中rownum与order by的执行顺序
来源:互联网 发布:主域名服务器 编辑:程序博客网 时间:2024/04/29 02:11
执行顺序
Oracle会先设置行的rownum,再进行order by
执行顺序:rownum > order by
举例
有以下数据,现在要倒序后取前三条记录。
SQL> select sysdate + level level_ from dual connect by level <= 10;LEVEL_-----------2017/8/5 192017/8/6 192017/8/7 192017/8/8 192017/8/9 192017/8/10 12017/8/11 12017/8/12 12017/8/13 12017/8/14 1
错误的写法
select * from (select rownum rno, t.* from (select sysdate + level level_ from dual connect by level <= 10) t order by level_ desc) t1 where t1.rno <= 3;
如上所说,因为rownum比order by优先级高,Oracle会先执行进行rownum赋行值,如下
select rownum rno, t.* from (select sysdate + level level_ from dual connect by level <= 10) t;结果: RNO LEVEL_---------- ----------- 1 2017/8/5 19 2 2017/8/6 19 3 2017/8/7 19 4 2017/8/8 19 5 2017/8/9 19 6 2017/8/10 1 7 2017/8/11 1 8 2017/8/12 1 9 2017/8/13 1 10 2017/8/14 1
再进行order by排序,如下:
RNO LEVEL_---------- ----------- 10 2017/8/14 1 9 2017/8/13 1 8 2017/8/12 1 7 2017/8/11 1 6 2017/8/10 1 5 2017/8/9 19 4 2017/8/8 19 3 2017/8/7 19 2 2017/8/6 19 1 2017/8/5 19
再取前三条记录,最终结果如下
RNO LEVEL_---------- ----------- 3 2017/8/7 19 2 2017/8/6 19 1 2017/8/5 19
正确的写法
正确的写法应该是先order by,先包一层查询,再赋rownum值
select * from (select rownum rno, t1.* from (select * from (select sysdate + level level_ from dual connect by level <= 10) t order by level_ desc) t1) t2 where t2.rno <= 3结果: RNO LEVEL_---------- ----------- 1 2017/8/14 1 2 2017/8/13 1 3 2017/8/12 1
阅读全文
0 0
- Oracle中rownum与order by的执行顺序
- rownum与order by 子句的执行顺序关系
- ORACLE数据库中的ROWNUM和ORDER BY执行顺序
- Oracle数据库中的ROWNUM和ORDER BY执行顺序
- Oracle数据库中的ROWNUM和ORDER BY执行顺序
- Oracle查询中rownum与Order by查询的关系
- rownum的特点以及它与order by 子句的执行顺序关系
- oracle rownum与order by
- oracle rownum与order by
- Oracle 中 ROWNUM order by
- Oracle中rownum与order by排序问题
- ORACLE中rownum和order by 的关系
- Oracle查询中rownum与Order by查询的关系(取数据的前几条)
- Oracle查询中rownum与Order by查询的关系(取数据的前几条)
- Oracle中的rownum、order by与分页
- oracle中的rownum、order by与分页
- oracle中的rownum、order by与分页
- oracle中的rownum、order by与分页
- 创建Cocoapods Private 踩过的那些坑
- 企业级 Web 网站安全解决方案揭秘
- 典型静态方法的实现(algs4)
- UVA 133
- 实现半圆环状UI排版
- Oracle中rownum与order by的执行顺序
- vector
- Codeforces R374 Div2
- C# 生成强命名程序集,并添加到GAC
- 2017多校训练赛第四场 HDU 6070(二分答案+线段树+扫描线)
- 51nod(第K大的数)
- 转载--时间与空间复杂度总结
- 【php】ThinkPHP搭建百度Ueditor富文本编辑器
- 64位centos7安装mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz