- 浏览: 626174 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (448)
- 字符串相关 (16)
- Struts2页面显示 (15)
- Hibernate错误记录 (6)
- linux命令 (2)
- java项目测试 (5)
- 个人作品 (10)
- hibernate应用 (15)
- struts1 (7)
- 数据库(除了hibernate) (42)
- J2ME/WAP (37)
- servlet/jsp (49)
- java桌面应用+java综合 (14)
- 服务器配置,报错解决 (24)
- Myeclipse配置,抛错解决 (8)
- linux (18)
- JavaScript+jquery+ajax (45)
- div css 页面设计 (16)
- 互联网综合运营 (14)
- 编程工具类 (3)
- 论文 报告 文献 (14)
- PHP (26)
- struts2 (9)
- spring (1)
- 我的IT生活 (14)
- Resin (6)
- java项目记录 (14)
- https安全 (11)
- 支付技术 (3)
最新评论
-
yihaijunyxr:
很好呀,我好久没用iteye了,今天找出两个帐号(yihaij ...
c/c++的监听tmlisten启动缓慢解决 -
yihaijun:
好像这不算是技术博客,是工作博客
c/c++的监听tmlisten启动缓慢解决 -
ml365:
后来还优化了webservice的前置框架,不用cxf,用了另 ...
c/c++的监听tmlisten启动缓慢解决 -
Jayliuying:
有点晚哈 但是也支持一下 楼主
java相关论文的参考文献【转】 -
gqsunrise:
...
我是项目经理,我的项目管理日记【20120229】
如何正确利用Rownum来限制查询所返回的行数?
软件环境:
1、Windows NT4.0+ORACLE 8.0.4
2、ORACLE安装路径为:C:\ORANT
含义解释:
1、rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,
依此类推,这个伪字段可以用于限制查询返回的总行数。
2、rownum不能以任何基表的名称作为前缀。
使用方法:
现有一个商品销售表sale,表结构为:
month char(6) --月份
sell number(10,2) --月销售金额
create table sale (month char(6),sell number);
insert into sale values('200001',1000);
insert into sale values('200002',1100);
insert into sale values('200003',1200);
insert into sale values('200004',1300);
insert into sale values('200005',1400);
insert into sale values('200006',1500);
insert into sale values('200007',1600);
insert into sale values('200101',1100);
insert into sale values('200202',1200);
insert into sale values('200301',1300);
insert into sale values('200008',1000);
commit;
SQL>; select rownum,month,sell from sale where rownum=1;(可以用在限制返回记录条数的地方,保证不出错,如:隐式游标)
ROWNUM MONTH SELL
--------- ------ ---------
1 200001 1000
SQL>; select rownum,month,sell from sale where rownum=2;(1以上都查不到记录)
没有查到记录
SQL>; select rownum,month,sell from sale where rownum>;5;
(由于rownum是一个总是从1开始的伪列,Oracle 认为这种条件不成立,查不到记录)
没有查到记录
只返回前3条纪录
SQL>; select rownum,month,sell from sale where rownum<4;
ROWNUM MONTH SELL
--------- ------ ---------
1 200001 1000
2 200002 1100
3 200003 1200
如何用rownum实现大于、小于逻辑?(返回rownum在4—10之间的数据)(minus操作,速度会受影响)
SQL>; select rownum,month,sell from sale where rownum<10
2 minus
3 select rownum,month,sell from sale where rownum<5;
ROWNUM MONTH SELL
--------- ------ ---------
5 200005 1400
6 200006 1500
7 200007 1600
8 200101 1100
9 200202 1200
想按日期排序,并且用rownum标出正确序号(有小到大)
SQL>; select rownum,month,sell from sale order by month;
ROWNUM MONTH SELL
--------- ------ ---------
1 200001 1000
2 200002 1100
3 200003 1200
4 200004 1300
5 200005 1400
6 200006 1500
7 200007 1600
11 200008 1000
8 200101 1100
9 200202 1200
10 200301 1300
查询到11记录.
可以发现,rownum并没有实现我们的意图,系统是按照记录入库时的顺序给记录排的号,rowid也是顺序分配的
SQL>; select rowid,rownum,month,sell from sale order by rowid;
ROWID ROWNUM MONTH SELL
------------------ --------- ------ ---------
000000E4.0000.0002 1 200001 1000
000000E4.0001.0002 2 200002 1100
000000E4.0002.0002 3 200003 1200
000000E4.0003.0002 4 200004 1300
000000E4.0004.0002 5 200005 1400
000000E4.0005.0002 6 200006 1500
000000E4.0006.0002 7 200007 1600
000000E4.0007.0002 8 200101 1100
000000E4.0008.0002 9 200202 1200
000000E4.0009.0002 10 200301 1300
000000E4.000A.0002 11 200008 1000
查询到11记录.
正确用法,使用子查询
SQL>; select rownum,month,sell from (select month,sell from sale group by month,sell) where rownum<13;
ROWNUM MONTH SELL
--------- ------ ---------
1 200001 1000
2 200002 1100
3 200003 1200
4 200004 1300
5 200005 1400
6 200006 1500
7 200007 1600
8 200008 1000
9 200101 1100
10 200202 1200
11 200301 1300
按销售金额排序,并且用rownum标出正确序号(有小到大)
SQL>; select rownum,month,sell from (select sell,month from sale group by sell,month) where rownum<13;
ROWNUM MONTH SELL
--------- ------ ---------
1 200001 1000
2 200008 1000
3 200002 1100
4 200101 1100
5 200003 1200
6 200202 1200
7 200004 1300
8 200301 1300
9 200005 1400
10 200006 1500
11 200007 1600
查询到11记录.
利用以上方法,如在打印报表时,想在查出的数据中自动加上行号,就可以利用rownum。
返回第5—9条纪录,按月份排序
SQL>; select * from (select rownum row_id ,month,sell
2 from (select month,sell from sale group by month,sell))
3 where row_id between 5 and 9;
ROW_ID MONTH SELL
---------- ------ ----------
5 200005 1400
6 200006 1500
7 200007 1600
8 200008 1000
9 200101 1100
软件环境:
1、Windows NT4.0+ORACLE 8.0.4
2、ORACLE安装路径为:C:\ORANT
含义解释:
1、rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,
依此类推,这个伪字段可以用于限制查询返回的总行数。
2、rownum不能以任何基表的名称作为前缀。
使用方法:
现有一个商品销售表sale,表结构为:
month char(6) --月份
sell number(10,2) --月销售金额
create table sale (month char(6),sell number);
insert into sale values('200001',1000);
insert into sale values('200002',1100);
insert into sale values('200003',1200);
insert into sale values('200004',1300);
insert into sale values('200005',1400);
insert into sale values('200006',1500);
insert into sale values('200007',1600);
insert into sale values('200101',1100);
insert into sale values('200202',1200);
insert into sale values('200301',1300);
insert into sale values('200008',1000);
commit;
SQL>; select rownum,month,sell from sale where rownum=1;(可以用在限制返回记录条数的地方,保证不出错,如:隐式游标)
ROWNUM MONTH SELL
--------- ------ ---------
1 200001 1000
SQL>; select rownum,month,sell from sale where rownum=2;(1以上都查不到记录)
没有查到记录
SQL>; select rownum,month,sell from sale where rownum>;5;
(由于rownum是一个总是从1开始的伪列,Oracle 认为这种条件不成立,查不到记录)
没有查到记录
只返回前3条纪录
SQL>; select rownum,month,sell from sale where rownum<4;
ROWNUM MONTH SELL
--------- ------ ---------
1 200001 1000
2 200002 1100
3 200003 1200
如何用rownum实现大于、小于逻辑?(返回rownum在4—10之间的数据)(minus操作,速度会受影响)
SQL>; select rownum,month,sell from sale where rownum<10
2 minus
3 select rownum,month,sell from sale where rownum<5;
ROWNUM MONTH SELL
--------- ------ ---------
5 200005 1400
6 200006 1500
7 200007 1600
8 200101 1100
9 200202 1200
想按日期排序,并且用rownum标出正确序号(有小到大)
SQL>; select rownum,month,sell from sale order by month;
ROWNUM MONTH SELL
--------- ------ ---------
1 200001 1000
2 200002 1100
3 200003 1200
4 200004 1300
5 200005 1400
6 200006 1500
7 200007 1600
11 200008 1000
8 200101 1100
9 200202 1200
10 200301 1300
查询到11记录.
可以发现,rownum并没有实现我们的意图,系统是按照记录入库时的顺序给记录排的号,rowid也是顺序分配的
SQL>; select rowid,rownum,month,sell from sale order by rowid;
ROWID ROWNUM MONTH SELL
------------------ --------- ------ ---------
000000E4.0000.0002 1 200001 1000
000000E4.0001.0002 2 200002 1100
000000E4.0002.0002 3 200003 1200
000000E4.0003.0002 4 200004 1300
000000E4.0004.0002 5 200005 1400
000000E4.0005.0002 6 200006 1500
000000E4.0006.0002 7 200007 1600
000000E4.0007.0002 8 200101 1100
000000E4.0008.0002 9 200202 1200
000000E4.0009.0002 10 200301 1300
000000E4.000A.0002 11 200008 1000
查询到11记录.
正确用法,使用子查询
SQL>; select rownum,month,sell from (select month,sell from sale group by month,sell) where rownum<13;
ROWNUM MONTH SELL
--------- ------ ---------
1 200001 1000
2 200002 1100
3 200003 1200
4 200004 1300
5 200005 1400
6 200006 1500
7 200007 1600
8 200008 1000
9 200101 1100
10 200202 1200
11 200301 1300
按销售金额排序,并且用rownum标出正确序号(有小到大)
SQL>; select rownum,month,sell from (select sell,month from sale group by sell,month) where rownum<13;
ROWNUM MONTH SELL
--------- ------ ---------
1 200001 1000
2 200008 1000
3 200002 1100
4 200101 1100
5 200003 1200
6 200202 1200
7 200004 1300
8 200301 1300
9 200005 1400
10 200006 1500
11 200007 1600
查询到11记录.
利用以上方法,如在打印报表时,想在查出的数据中自动加上行号,就可以利用rownum。
返回第5—9条纪录,按月份排序
SQL>; select * from (select rownum row_id ,month,sell
2 from (select month,sell from sale group by month,sell))
3 where row_id between 5 and 9;
ROW_ID MONTH SELL
---------- ------ ----------
5 200005 1400
6 200006 1500
7 200007 1600
8 200008 1000
9 200101 1100
发表评论
-
备份和还原数据库【转】
2011-09-01 17:03 931使用软件备份mysql数据库(以Navicat为例) 1)打 ... -
插入数据库类型为Date的方法
2011-07-20 17:12 1529控制端用的是webwork,表单类型text 传入后用stri ... -
MySQL错误1042-Can't get hostname for your address解决方法[原]
2011-07-14 14:07 4320本人最近在linux上部署php环境,在利用xampp部署后有 ... -
因为用class12.jar去做10i的驱动报错的解决【原创】
2011-07-13 18:35 900Connection refused(DESCRIPTION ... -
运用PowerDesigner建模和建表
2011-02-21 17:20 26231 建工作空间 File -- new model – ph ... -
Tomcat自带连接池应用【转】
2011-01-28 15:54 1102tomcat6.0连接mysql数据库连接池[原创]1 下载T ... -
spring jdbc queryForList出来的数据获取内幕!【体会】
2011-01-24 10:05 3442对于一般的hibernate查询,返回的往往是一个我们熟悉的l ... -
c3p0和jdbcTemplate配置oracle集群RAC记录【原】
2011-01-17 10:26 3736领导给了一串连接串给我,如下: PERAC = (DESC ... -
指定索引/*+INDEX(TABLE INDEX_NAME)*/等优化Oracle查询效率的总结
2010-12-15 21:00 4754在之前的项目有一个很痛苦的查询,用了太多的跨数据库访问,加上数 ... -
oracle跨数据库授权【原创】
2010-12-12 22:23 1878对于oracle数据库,某个用户跨数据库访问另一个用户的表,有 ... -
oracle远程连接查询【原创】
2010-12-12 22:21 988对于不在本库的表,需要练级查询的话,可以再oracle里面 ... -
转:深入浅出SQL之左连接、右连接和全连接
2010-12-12 22:10 820为了从两个或多个表中选出数据,我们一般使用表连接来实 ... -
左连接语句【原创】
2010-12-12 16:50 791语句如下: Query q = sessionFa ... -
存储过程详解【转载】
2010-12-12 11:20 909存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信 ... -
为什么要使用存储过程及其书写方法【原创+转载】
2010-12-12 11:18 935你想要是要处理很多数据,全部交由java去处理的时候,从数据库 ... -
.Mdf文件如何导入到SqlServer数据库【转】
2010-12-12 11:11 1857任务:将PUBS重新导入可以这样用sp_attach_db ... -
proxool 链接sqlserver的配置【转】
2010-12-12 11:08 1183配置之前必须引入proxool-0.9.0RC1.jar包 ... -
如何连接SQL Server数据库(Java版)【转】
2010-12-12 11:08 1324用Java连接SQL Server2000数据库有多种方法 ... -
一个比较规范的jdbc连接方法类
2010-12-11 22:40 811主要是留意里面的关闭连接释放资源的写法~ public ... -
sql中limit用法【转】
2010-12-11 11:17 1941$query="select * from tb ...
相关推荐
Oracle配置par参数文件做备份,可以对tables=(表1,表2...),query='where rownum做导出行数控制,#exp parfile=jpf.par
为了避免这些问题,我们可以使用子查询和 ROWNUM 结合来实现 Top N 结果输出。例如: ```sql select * from ( select a.*, rownum as rn from ( select * from css_bl_view a where capture_phone_num = ...
有了以上从不同方面建立起来的对 rownum 的概念,那我们可以来认识使用 rownum 的几种现像 1. select rownum,c1 from t1 where rownum != 10 为何是返回前9条数据呢?它与 select rownum,c1 from tablename where ...
`ROWNUM`始终从1开始,并递增,但仅在查询结果集中有效,也就是说,它基于查询语句所返回的行数来计数。 ### 使用`ROWNUM`的常见场景及限制 #### 场景1:限制返回的行数 例如,`SELECT * FROM table WHERE ROWNUM...
注意:对 rownum(伪列) 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据 例:查询工资前20名的员工姓名,工资 ,工资由高到低 Select rownum,first_name,salary from (Select first_name, salary ...
总结一下,`ROWNUM`在Oracle中用于限制查询返回的行数,但它的行为并不直观,特别是在与`ORDER BY`一起使用时。理解`ROWNUM`的生成原理以及其与`ORDER BY`的交互对于优化SQL查询和获取预期结果至关重要。在实际的...
Oracle ROWNUM学习 Oracle ROWNUM是Oracle系统顺序分配的行号,用于限制查询返回的总行数。ROWNUM是一个伪字段,不能以任何表的名称作为前缀。...但是,需要注意ROWNUM的限制和使用子查询来解决一些查询问题。
我们可以使用子查询的方式,先使用 DISTINCT 返回结果,然后再使用 ROWNUM 限制结果: SELECT c.access_id, c.link_id FROM ( SELECT DISTINCT a.access_id, a.link_id FROM asn_access a, asn_res_link b ...
- 当需要限制返回的行数时,可以结合`WHERE ROWNUM 和`ORDER BY`一起使用,以获取前n行。 - 若要选择特定范围的行,可以使用子查询和临时变量,例如`SELECT * FROM (SELECT ..., ROWNUM r FROM table WHERE ...) ...
尝试使用 `rownum > n` (n 为某个正整数) 来查询时,由于 `rownum` 从 1 开始,直接使用这样的条件将不会返回任何结果。这是因为 Oracle 认为 `rownum > n` (n > 1) 的条件始终为假。 **示例 SQL**: ```sql SELECT ...
Oracle的ROWNUM是一个非常重要的概念,它在数据库查询中起到限制返回结果数量和进行特定行选择的作用。ROWNUM是一个伪列,表示从查询结果中返回的每一行的序列号,从1开始递增。 首先,当使用ROWNUM等于某个特定值...
接下来,我们可以使用 `ROWNUM` 来查询特定行数的记录: ```sql SELECT ROWNUM, MONTH, SELL FROM SALE WHERE ROWNUM = 1; ``` 此查询将返回表中第一行的数据: ```plaintext ROWNUM MONTH SELL ----------------...
- 如果需要结合其他查询条件使用`ROWNUM`,可以先使用一个子查询来确保`ROWNUM`的正确应用: ```sql SELECT * FROM (SELECT * FROM tab ORDER BY column_name) WHERE ROWNUM ; ``` #### SQL Server SQL Server...
包内目录: 1、ORACLE 体系结构 2、sql_plus函数 3、sqlplus常用命令 4、sql 5、锁和表分区 6、数据库对象 7、oop 8、PLSQL ...13、如何正确利用rownum来限制查询所返回的行数 每个目录都是单个文件
在SQL查询中,Rownum可以用于限制返回的行数,例如,如果你想获取前10条记录,可以使用以下语句: ```sql SELECT * FROM ( SELECT /*+ FIRST_ROWS(10) */ column1, column2, ... FROM your_table ) WHERE ROWNUM ...
- 在复杂查询中,可以通过嵌套子查询来使用 ROWNUM。例如: ```sql SELECT * FROM (SELECT ROWNUM no, id, name FROM student) WHERE no > 2; ``` 这个例子中,外层查询通过 WHERE 子句筛选内层子查询的结果集...
此方法通过在子查询中使用`ORDER BY`来保证结果集的正确排序,同时使用`BETWEEN`子句来限制结果集范围,从而实现高效分页。 通过以上介绍可以看出,`ROWNUM`在Oracle数据库中是一个非常实用的功能,它不仅可以帮助...
解析 Oracle 的 ROWNUM Oracle 中的 ROWNUM 是一个伪列,用于对查询返回的行进行编号,返回的第一行分配的是 ...我们可以通过使用 ROWNUM 来限制查询返回的总行数,并且可以使用子查询来解决查找大于某值的记录问题。
### 伪列(pseudo column)ROWNUM介绍 #### ROWNUM伪列概述 在Oracle数据库中,`ROWNUM`是一个非常有用的伪列(也被...通过结合使用子查询、别名以及绑定变量等技术,我们可以更高效地利用`ROWNUM`来满足各种查询需求。