Oracle前10条记录
在Oracle怎样查询表中的top10条记录呢?
select *
from test
where rownum <=10
下面是关于rownum的介绍
================================
Rownum和row_number() over()的使用
ROWNUM是Oracle从8开始提供的一个伪列,是把SQL出来的结果进行编号,始终从1开始,常见的用途就是用来分页输出.
比如
SELECT *
FROM torderdetail a
WHERE ROWNUM <= 10
这条语句就是输出前10条纪录,在这里用途上类似于sql sever的top,不过rownum对于指定编号区间的输出应该说更强大
SELECT *
FROM (SELECT a.*, ROWNUM rn
FROM torderdetail a)
WHERE rn >= 10 AND rn <= 20
这条语句即是输出第10到第20条纪录,这里之所以用rownum rn,是把rownum转成实例,因为rownum本身只能用 <=的比较方式,只有转成实列,这样就可做 >=的比较了。
在实际用途中,常常会要求取最近的几条纪录,这就需要先对纪录进行排序后再取rownum <=
一般常见的
SELECT *
FROM (SELECT a.*
FROM torderdetail a
ORDER BY order_date DESC)
WHERE ROWNUM <= 10
而在CSDN曾经发生过讨论,关于取近的10条纪录,有人给出这样的语句
SELECT a.*
FROM torderdetail a
WHERE ROWNUM <= 10
ORDER BY order_date DESC
之所以会出现这样的语句,主要是从效率上的考虑,前面条语句,是要进行全表扫描后再排序,然后再取10条纪录,后一条语句则不会全表扫描,只会取出10条纪录,很明显后条语句的效率会高许多。
那为什么会有争议呢,那就在于在执行顺序上争议,是先执行排序取10条纪录,还是取10条纪录,再排序呢?两种顺序取出来的结果是截然相反的, 先排序再取10条,就是取最近的10条,而先取10条,再排序,则取出的最早的10条纪录。对于此语句,普遍的认为执行顺序是先取10条纪录再排序的。所 以此语句应该是错误。但实际上并非如此,此语句的执行顺序和order by的字段有关系,如果你order by 的字段是pk,则是先排序,再取10条(速度比第一种语句快),而排序字段不是PK 时,是先取10条再排序,此时结果就与要求不一样了,所以第二种写法一定要在排序字段是主键的情况下才能保证结果正确。
Row_number() over()这个分析函数是从9I开始提供的,一般的用途和rownum差不多。
一般写法row_number() over( order by order_date desc) 生成的顺序和rownum的语句一样,效率也一样(对于同样有order by 的rownum语句来说),所以在这种情况下两种用法是一样的。
而对于分组后取最近的10条纪录,则是rownum无法实现的,这时只有row_number可以实现,row_number() over(partition by 分组字段 order by 排序字段)就能实现分组后编号,比如说要取近一个月的每天最后10个订单纪录
SELECT *
FROM (SELECT a.*,
ROW_NUMBER () OVER (PARTITION BY TRUNC (order_date) ORDER BY order_date DESC)
rn
FROM torderdetail a)
WHERE rn <= 10
Rownum的另类用法,有时候我们会遇到这种需求,要求输出当月的所有天数,许多人会烦恼,数据库里又没有这样的表,怎么输出一个月的所有天数呢?用rownum就能解决:
SELECT TRUNC (SYSDATE, 'MM') + ROWNUM - 1
FROM DUAL
CONNECT BY ROWNUM <= TO_NUMBER (TO_CHAR (LAST_DAY (SYSDATE), 'dd'))
:
http://soft.chinabyte.com/database/27/11420027.shtml
Oracle前10条记录相关推荐
- oracle 取前10条记录
1.oracle 取前10条记录 1) select * from tbname where rownum < 11; 2) select * from (select * from tbnam ...
- oracle以10个记录为一页查询,SQL查询前10条记录(SqlServermysqloracle)语法分析
SQL查询前10条记录(SqlServer/mysql/oracle)语法分析 Sql Server : Sql代码 select top X * from table_name --查询前X条记录, ...
- sql 取表的前10条记录,任意中间几行的记录
取表的前10条记录 with a as(select *,row_number()over(order by department)rn from _SucceedStaff ) select * f ...
- mysql查询前10条记录
select * from no_primary_key order by id limit 10; # 显示从id=1到id=10的前10条记录: select * from no_primary_ ...
- 如何取得select结果数据集的前10条记录。postgresql
我用的是POSTGRESQL. select name from t_personal order by personal_id desc 我想取得上面结果数据的,前10条记录.SQL语句怎么改. 我 ...
- SQL查询前10条记录(SqlServer/mysql/oracle)[语法分析]
Sql Server : Sql代码 select top X * from table_name --查询前X条记录,可以改成需要的数字. select top n * from (select t ...
- oracle分页查询前10条,Oracle查询前十条记录及分页查询(第5条到第10记录)
Oracle查询前10条记录及分页查询(第5条到第10记录) 如果你想了解Oracle查询前10条记录的相关实际应用方案的话,你就可以点击以下的文章对其在实际相关操作中的正确用法,有一个更加完善的认识 ...
- oracle查询最近十条数据_Oracle-查询最近更新的前10条数据
在实际用途中,常常会要求取最近的几条纪录,这就需要先对纪录进行排序后再取rownum <= 一般常见的 SELECT * FROM (SELECT a.* FROM torderdetail a ...
- 各个数据库取前10行记录
SQL查询前10条的方法为: 1.select top X * from table_name --查询前X条记录,可以改成需要的数字,比如前10条. 2.select top X * from ...
- 各种数据库获取前10行记录实例
SQL查询前10条的方法为: select top X * from table_name --查询前X条记录,可以改成需要的数字,比如前10条. select top X * from table_ ...
最新文章
- 总量迈过90万亿元关口 中国经济交出稳健答卷
- 40种为网页设计师准备的高品质和免费的多媒体PSD文件
- 三个获取浏览器URL中参数值的方法
- 现实迷途 第九章 N夜情(上)
- 关于自主开发和研究代码
- 嵌套循环连接,哈希连接,排序合并连接(2015-2-4学习日记)
- JDBC(Java Data Base Connectivity,java数据库连接)
- VC使用flash简易教程
- Python模块: ConfigParser
- 判断按键值_Pygame(九)按键事件(2)
- Python学习之路和隐藏特征
- DWR第五篇之文件上传
- 《How to Write and Publish a Scientifc Paper》个人笔记
- java异步编程书籍_《Java异步编程实战》隆重上市!!!
- voms下的反射大师_VOMS虚拟大师
- [ 成为架构师系列 ] 2. 深入理解 Cookie 与 Session ,Facade 设计模式, 分布式 Session...
- 电子元件-电感、磁珠
- 使用重力感应传感器和Arduino的手机控制机器人车
- YOLOV5训练代码train.py注释与解析
- 操作系统:实验一 进程调度算法
热门文章
- Django+MySQLDB配置
- HTML sublime :Please wait a bit while PyV8 binary is being downloaded 及代码和注释颜色 ,大小调节
- Sass中使用@each循环
- Linux_access the file or directory which start with -
- CentOS 7 (RHEL 7)服务管理命令的变化
- 安装scrapy报错问题解决
- 调整home和根分区大小
- MeiTuanLocateCity
- 【HDOJ】【3415】Max Sum of Max-K-sub-sequence
- 普通摄像头游戏——空中飞车