博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle查询中rownum与Order by查询的关系(取数据的前几条)
阅读量:7030 次
发布时间:2019-06-28

本文共 885 字,大约阅读时间需要 2 分钟。

  hot3.png

在开发应用的时候,把数据按照一定的规则排序后再取前几条数据这种操作是很平常的事情。我们在中常用的就

是order by,然后取得rownum小于多少的数据这种方法。不过如果对Oracle不熟悉,也许就会发现你写的SQL语句检索

出来的值不正确,这个是为什么呢.

因为Oracle在检索的时候,会首先把数据都检索出来,然后在排序段中进行排序(也就是说,先有rownum值,然后才

order by排序)。假如你有一个SQL语句如下所示。

select  emp_no  from  emp  where  rownum < 10  order by  emp_no;

在检索的时候,会首先把数据检索出来,也就是把EMP表数据都检索出来,然后再Order by排序操作。因为

ROWNUM 数据是在排序前就检索出来的了,所以不能利用ROWNUM来取得排序后的前10条操作。那么应该如何操作

呢。其实很简单,利用子查询,先排序,再取ROWNUM。如下所示

select  emp_no  from  (select  emp_no from emp order by  emp_no)  where  rownum<10;

这样你就会发现你最后可以检索到你需要的结果了,但是这样写的缺点就是比上一个执行的会慢,性能上可能不是很好。

====扩展实例:查找最近4条记录========

select * from (                    select * from (                    select * from t_accepted_witnessvideo where  cust_name='myname' and reject_time is not null order by reject_time desc                    ) where  rownum <= 4                    ) where rownum > 0;

 

转载于:https://my.oschina.net/bysu/blog/823709

你可能感兴趣的文章
JS数据结构0x004:链表
查看>>
以太坊钱包开发系列1 - 创建钱包账号
查看>>
社交系统 ThinkSNS+ V2.1.1 更新播报
查看>>
理解CPU分支预测,提高代码效率
查看>>
javascript调试接口
查看>>
Python基础系列:初识python引用计数与弱引用
查看>>
javascript继承方法以及优缺点
查看>>
tab 切换下划线跟随实现
查看>>
20+个很棒的Android开源项目
查看>>
跨域、vue双向绑定相关面试题
查看>>
Web Components(一)入门
查看>>
mpvue打包没有app.json等配置文件的解决方法
查看>>
树莓派配置swoole环境
查看>>
JavaScript 工作原理之十二-网络层探秘及如何提高其性能和安全性
查看>>
搭建基于react项目的心得
查看>>
react-native踩坑记录
查看>>
HTTP API 设计入坑指南(一)
查看>>
OkHttp源码分析
查看>>
【挖坑系列】跨域问题相关
查看>>
使用cronolog切割nginx访问日志,定时清理旧日志
查看>>