oracle数据库取前几行,Oracle数据库实现获取前几条数据的方法
如何在Oracle数据库中实现获取前几条数据的方法呢?就是类似SQL语句中的SELECT TOP N的方法。本文将告诉您答案,举例说明了哟!1.在Oracle中实现SELECT TOP N :由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。简单地说,实现方法如下所示:SELECT 列名1...列名
如何在Oracle数据库中实现获取前几条数据的方法呢?就是类似SQL语句中的SELECT TOP N的方法。本文将告诉您答案,举例说明了哟!
1.在Oracle中实现SELECT TOP N :
由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。
简单地说,实现方法如下所示:
SELECT 列名1...列名n FROM
(SELECT 列名1...列名n
FROM 表名ORDER BY 列名1...列名n)
WHERE ROWNUM <= N(抽出记录数)
ORDER BY ROWNUM ASC
下面举个例子简单说明一下。
顾客表customer(id,name)有如下数据:
ID NAME
01 first
02 Second
03 third
04 forth
05 fifth
06 sixth
07 seventh
08 eighth
09 ninth
10 tenth
11 last
则按NAME的字母顺抽出前三个顾客的SQL语句如下所示:
SELECT * FROM
(SELECT * FROM CUSTOMER ORDER BY NAME)
WHERE ROWNUM <= 3
ORDER BY ROWNUM ASC
输出结果为:
ID NAME
08 eighth
05 fifth
01 first
2.在TOP N纪录中抽出第M(M <= N)条记录:
在得到了TOP
N的数据之后,为了抽出这N条记录中的第M条记录,我们可以考虑从ROWNUM着手。我们知道,ROWNUM是记录表中数据编号的一个隐藏子段,所以可以
在得到TOP N条记录的时候同时抽出记录的ROWNUM,然后再从这N条记录中抽取记录编号为M的记录,即是我们希望得到的结果。
从上面的分析可以很容易得到下面的SQL语句:
SELECT 列名1...列名nFROM
(
SELECT ROWNUM RECNO, 列名1...列名nFROM
(SELECT 列名1...列名nFROM 表名ORDER BY 列名1...列名n)
WHERE ROWNUM <= N(抽出记录数)
ORDER BY ROWNUM ASC
)
WHERE RECNO = M(M <= N)
同样以上表的数据为基础,那么得到以NAME的字母顺排序的第二个顾客的信息的SQL语句应该这样写:
SELECT ID, NAME FROM
(
SELECT ROWNUM RECNO, ID, NAME FROM
(SELECT * FROM CUSTOMER ORDER BY NAME)
WHERE ROWNUM <= 3
ORDER BY ROWNUM ASC )
WHERE RECNO = 2
结果则为:
ID NAME
05 fifth
3.抽出按某种方式排序的记录集中的第N条记录:
在2的说明中,当M = N的时候,即为我们的标题第三点所讲的结果。实际上,第二点的做法在里面N>M的部分的数据是基本上不会用到的,我们仅仅是为了说明方便而采用。
如上所述,则SQL语句应为:
SELECT 列名1...列名nFROM
(
SELECT ROWNUM RECNO, 列名1...列名nFROM
(SELECT 列名1...列名nFROM 表名ORDER BY 列名1...列名n)
WHERE ROWNUM <= N(抽出记录数)
ORDER BY ROWNUM ASC
)
WHERE RECNO = N
那么,2中的例子的SQL语句则为:
SELECT ID, NAME FROM
(
SELECT ROWNUM RECNO, ID, NAME FROM
(SELECT * FROM CUSTOMER ORDER BY NAME)
WHERE ROWNUM <= 2
ORDER BY ROWNUM ASC
)
WHERE RECNO = 2
结果为:
ID NAME
05 fifth
4.抽出按某种方式排序的记录集中的第M条记录开始的X条记录:
上一点所讲的仅仅是抽取一条记录的情况,当我们需要抽取多条记录的时候,此时在第二点中的N的取值应该是在N >= (M + X -
1)这个范围内,当然最经济的取值就是取等号的时候了。当然最后的抽取条件也不是RECNO = N了,应该是RECNO BETWEEN M AND
(M + X - 1)了,所以随之而来的SQL语句则为:
SELECT 列名1...列名nFROM
(
SELECT ROWNUM RECNO, 列名1...列名nFROM
(
SELECT 列名1...列名nFROM 表名ORDER BY 列名1...列名n)
WHERE ROWNUM <= N (N >= (M + X - 1))
ORDER BY ROWNUM ASC
)
WHERE RECNO BETWEEN M AND (M + X - 1)
同样以上面的数据为例,则抽取NAME的字母顺的第二条记录开始的3条记录的SQL语句为:
SELECT ID, NAME FROM
(
SELECT ROWNUM RECNO, ID, NAME FROM
(SELECT * FROM CUSTOMER ORDER BY NAME)
WHERE ROWNUM <= (2 + 3 - 1)
ORDER BY ROWNUM ASC
)
WHERE RECNO BETWEEN 2 AND (2 + 3 - 1)
结果如下:
ID NAME
05 fifth
01 first
04 forth
以此为基础,再扩展的话,做成存储过程,将开始记录数以及抽取记录数为参数,就可以轻松实现分页抽取数据。
不同数据库,查询前n条数据的SQL语句
不同的数据库,支持的SQL语法略有不同,以下是不同数据库查询前n条数据的SQl语句 SQL Server(MSSQL) SELECT TOP n * FROM table_name ORACLE SE ...
Oracle查询前几条数据的方法
在Oracle中实现select top N:由于Oracle不支持select top 语句,所以在Oracle中经常是用order by 跟rownum的组合来实现select top n的查询. ...
关于sql server远程访问Oracle数据库 OpenQuery查询返回多条数据的问题
在Sql Server远程访问Oracle 中的数据库表时: 远程语法通常为: select * from OpenQuery(Oracle链接服务器名称,‘查询语句’) eg: select * f ...
Linq排序,获取前5条数据
_dic = _dic.OrderByDescending(x => x.Value).ToDictionary(x=>x.Key,x=>x.Value); var Num = _d ...
oracle取分组的前N条数据
select * from(select animal,age,id, row_number()over(partition by animal order by age desc) row_num ...
oracle数据库只查询前n条
select * from (select * from tablename order by createdate desc) aaa -- 按创建时间倒排序 where rownum &l ...
Oracle 获取前几行数据问题的陷阱
查询用户数据表,需要根据时间正序排序,然后获取时间最早的前三条数据,是不是第一印象想这么写: select * from users where rownum<4 order by datati ...
MySQL 分组后取每组前N条数据
与oracle的 rownumber() over(partition by xxx order by xxx )语句类似,即:对表分组后排序 创建测试emp表 1 2 3 4 5 6 7 8 9 ...
各个数据库中,查询前n条记录的方法
SQL查询前10条的方法为: 1.select top X * from table_name --查询前X条记录,可以改成需要的数字,比如前10条. 2.select top X * from ...
随机推荐
NOIP2015 Revenge
辣鸡出题人,毁我比赛,颓我精神,耗我钱财,废我青春. 去年成绩惨不忍睹就不说了...好像是100+80+0+100+50+60. 大概列一下算法. 幻方:模拟 #include
Android中的四种动画(一)
TweenAnimation 变换动画(也叫作"补间动画"),有四种(alpha scale translate rote). FrameAnimation(也叫DrawableA ...
【转】angular学习笔记(十四)-$watch(1)
本篇主要介绍$watch的基本概念: $watch是所有控制器的$scope中内置的方法: $scope.$watch(watchObj,watchCallback,ifDeep) watchObj: ...
yii下多条件多表组合查询以及自写ajax分页
多条件组合查询主要用到yii的CDbCriteria,这个类很多oem框架都有,非常好用. 前台表单 前台查询表单效果是这样的,多个条件组,每个组里放多个input,name为数组.当任何一个复选框被 ...
[置顶]
 Xamarin android 调用Web Api(ListView使用远程数据)
xamarin android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...
Java数字签名——ECDSA算法
ECDSA 例如微软产品的序列号的验证算法. Elliptic Curve Digital Signature Algorithm,椭圆曲线数字签名算法. 速度快,强度高,签名短 —————————— ...
PHP MySQL Order By 关键词
ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词 ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词默认对记录进行升序排序. 如果你想降序 ...
什么是语义化的HTML
语义化的HTML使用每个html标签都特定的用途,例如p标签放大段文字, h1~h6常用于标题,strong加粗强掉….. 语义化的好处: 1:去掉或样式丢失的时候能让页面呈现清晰的结构: html本 ...
Java 获取指定日期的方法汇总
import java.text.DateFormat; import java.text.ParsePosition; import java.text.SimpleDateFormat; impo ...

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)