a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 124|回复: 0

[考试试题] Oracle常见面试题及答案详解12

[复制链接]
发表于 2012-8-4 14:01:27 | 显示全部楼层 |阅读模式
12.  存在表T(a,b,c,d),要根据字段c排序后取第21—30条记录显示,请给出sql ' g+ A! C. _0 Q. E
    SELECT   * 6 R& o1 O" h0 Y2 P# \% S* G
        FROM (SELECT ROWNUM AS row_num, tmp_tab.* ( j) @, B: e; l0 u3 n
                FROM (SELECT   a, b, c, d + O, g# x$ f7 u' A5 J  O9 O
                          FROM T # H) C0 s# i  [8 s! \" g2 T6 n) S
                      ORDER BY c) tmp_tab
5 F5 j2 S7 f# }# m9 e( e" t: w9 g               WHERE ROWNUM = 20 : S  ?( N  c9 h: [! S4 `
ORDER BY row_num;
+ L6 d8 Z7 @8 r  8 n% L+ Y2 X. n8 o2 M. `; W
create table t(a number(,b number(,c number(,d number();
- q8 X, N$ N% F8 |, U/  
% n$ q# X8 n2 [; fbegin  - p8 M% N$ j9 e4 h$ _* j
for i in 1 .. 300 loop  ; H6 _* X5 d) U1 }
insert into t values(mod(i,2),i/2,dbms_random.value(1,300),i/4);  ) E- e" q0 \! |+ Y6 }
end loop;
$ `* ]- |* P" g" @5 Z0 t- Qend;  - S% M7 `5 R  ?, x2 j
/
+ z% z% N0 F" G. M6 Wselect * from (select c.*,rownum as rn from (select * from t order by c desc) c) where rn between 21 and 30; 8 k  W  C1 _' C5 N# e6 b
/
+ o# S( X# E2 T: e* G' cselect * from (select * from test order by c desc) x where rownum < 30
& C7 Q- J7 v/ J+ sminus
4 F" }  v9 |7 ?& x- L8 v& g( Lselect * from (select * from test order by c desc) y where rownum < 20 order by 3 desc  
. G) N# x& ?8 S0 C相比之 minus性能较差
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-29 12:35 , Processed in 0.396023 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表