没有合适的资源?快使用搜索试试~ 我知道了~
Oracle中ROWNUM的使用技巧.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 192 浏览量
2023-09-06
14:35:24
上传
评论
收藏 88KB DOCX 举报
温馨提示
试读
17页
ROWNUM 是一种伪列,它会根据返回记录生成一个序列化的数字。利用ROWNUM,我们可以生产一些原先难以实现的结果输出,但因为它是伪列的这个特殊性,我们在使用时也需要注意一些事项,不要掉入“陷阱”。
资源推荐
资源详情
资源评论
Oracle 中 ROWNUM 的使用技巧
ROWNUM
是一种伪列,它会根据返回记录生成一个序列化的数字。利用ROWNUM,我们可
以生产一些原先难以实现的结果输出,但因为它是伪列的这个特殊性,我们在使用时也需
要注意一些事项,不要掉入“陷阱”。下面就介绍一下它的使用技巧及注意事项。
1
特殊结果输出
利用 ROWNUM,我们可以做到一些特殊方式的输出。
Top N 结果输出
我们如果希望取输出结果的前面几条数据,通过ROWNUM 可以轻松实现:
SQL> select * from t_test4
2 where rownum <= 5;
USERNAME
USER_ID CREATED
WOW
CS2
3
DMP
PROFILER
71 26-APR-07
70 15-JAN-07
69 01-NOV-06
68 12-OCT-06
67 05-SEP-06
但是,如果你希望对一个排序结果取 Top N 数据的话,使用ROWNUM 存在一些“陷
阱”,我们后面部分会介绍这些“陷阱”并且说明如何避免。
SQL> select * from css_bl_view a
2
where capture_phone_num = '(1) 925-4604800'
3
and rownum <= 10
4
minus
5
select * from css_bl_view a
6
where capture_phone_num = '(1) 925-4604800'
7
and rownum <= 5
8 ;
Execution Plan
0
1
2
3
4
SELECT STATEMENT Optimizer=CHOOSE (Cost=5920 Card=10 Bytes=8970)
0 MINUS
1
2
3
SORT (UNIQUE) (Cost=2960 Card=10 Bytes=5980)
COUNT (STOPKEY)
TABLE ACCESS (FULL) OF 'CSS_BL_VIEW' (Cost=2770 Card=2183
Bytes=1305434)
5
1 SORT (UNIQUE) (Cost=2960 Card=5 Bytes=2990)
6
5 COUNT (STOPKEY)
7
6 TABLE ACCESS (FULL) OF 'CSS_BL_VIEW' (Cost=2770 Card=2183
Bytes=1305434)
分页查询
利用 ROWNUM 对结果进行分页,下面返回结果中的第 6 到第 10 条记录:
SQL> select * from
2
(
3
select a.*, rownum as rn from css_bl_view a
4 where capture_phone_num = '(1) 925-4604800'
5
) b
6
where b.rn between 6 and 10;
6 rows selected.
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2770 Card=2183 Bytes =7166789)
1 0 VIEW (Cost=2770 Card=2183 Bytes=7166789)
2
1 COUNT
3
2 TABLE ACCESS (FULL) OF 'CSS_BL_VIEW' (Cost=2770 Card=2183
Bytes=1305434)
Statistics
0
recursive calls
0 db block gets
29346 consistent gets
29190
physical reads
0
redo size
7328
bytes sent via SQL*Net to client
234
bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
0
sorts (memory)
0
sorts (disk)
5
rows processed
另外一种实现方式:
OWNER
NAME
STRMADMIN
APARKMAN
STREAMS_QUEUE
JOB_QUEUE
第三种实现方式:
SQL> select * from
2
(
3
select a.*, rownum as rn from css_bl_view a
4
where capture_phone_num = '(1) 925-4604800'
5
and rownum <= 10
6
) b
7
where b.rn > 5;
Execution Plan
0
SELECT STATEMENT Optimizer=CHOOSE (Cost=2770 Card=10 Bytes=32830)
1
0 VIEW (Cost=2770 Card=10 Bytes=32830)
2
1 COUNT (STOPKEY)
3
2 TABLE ACCESS (FULL) OF 'CSS_BL_VIEW' (Cost=2770 Card=2183
Bytes=1305434)
Statistics
0
recursive calls
0
db block gets
35
consistent gets
30
physical reads
0
redo size
7271
bytes sent via SQL*Net to client
234
bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
0
sorts (memory)
0
sorts (disk)
5
rows processed
这里特地将三种实现方式的查询计划及统计数据打印出来,大家可以比较一下 3 中方
式的性能。
利用 ROWNUM 做分组子排序
对于以下表 T_TEST4 的内容:
Statistics
0
recursive calls
0
db block gets
62
consistent gets
50
physical reads
0
redo size
7232
bytes sent via SQL*Net to client
234
bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
2
sorts (memory)
0
sorts (disk)
5
rows processed
剩余16页未读,继续阅读
资源评论
小小哭包
- 粉丝: 1900
- 资源: 3864
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功