鍏抽敭瀛? oracle鐨剅ownum鍘熺悊鍜屼嬌鐢?/strong>
Oracle鐨剅ownum鍘熺悊鍜屼嬌鐢?
鍦∣racle涓紝瑕佹寜鐗瑰畾鏉′歡鏌ヨ鍓峃鏉¤褰曪紝鐢ㄤ釜rownum灝辨悶瀹氫簡銆?
select * from emp where rownum <= 5
鑰屼笖涔︿笂涔熷憡璇紝涓嶈兘瀵箁ownum鐢?>"錛岃繖涔熷氨鎰忓懗鐫錛屽鏋滀綘鎯崇敤
select * from emp where rownum > 5
鍒欐槸澶辮觸鐨勩傝鐭ラ亾涓轟粈涔堜細澶辮觸錛屽垯闇瑕佷簡瑙ownum鑳屽悗鐨勬満鍒訛細
1 Oracle executes your query.
2 Oracle fetches the first row and calls it row number 1.
3 Have we gotten past row number meets the criteria? If no, then Oracle discards the row, If yes, then Oracle return the row.
4 Oracle fetches the next row and advances the row number (to 2, and then to 3, and then to 4, and so forth).
5 Go to step 3.
浜嗚В浜嗗師鐞嗭紝灝辯煡閬搑ownum>涓嶄細鎴愬姛錛屽洜涓哄湪絎笁姝ョ殑鏃跺欐煡璇㈠嚭鐨勮宸茬粡琚涪寮冿紝絎洓姝ユ煡鍑烘潵鐨剅ownum浠嶇劧鏄?,榪欐牱姘歌繙涔熶笉浼氭垚鍔熴?
鍚屾牱閬撶悊錛宺ownum濡傛灉鍗曠嫭鐢?,涔熷彧鏈夊湪rownum=1鏃舵墠鏈夌敤銆?
瀵逛簬rownum鏉ヨ瀹冩槸oracle緋葷粺欏哄簭鍒嗛厤涓轟粠鏌ヨ榪斿洖鐨勮鐨勭紪鍙鳳紝榪斿洖鐨勭涓琛屽垎閰嶇殑鏄?錛岀浜岃鏄?錛屼緷姝ょ被鎺紝榪欎釜浼瓧孌靛彲浠ョ敤浜庨檺鍒舵煡璇㈣繑鍥炵殑鎬昏鏁幫紝鑰屼笖rownum涓嶈兘浠ヤ換浣曡〃鐨勫悕縐頒綔涓哄墠緙銆?
涓句緥璇存槑錛?
渚嬪琛細student(瀛︾敓)琛紝琛ㄧ粨鏋勪負錛?
ID銆銆銆 char(6)銆銆銆銆銆 --瀛﹀彿
name銆銆銆銆VARCHAR2(10)銆銆銆--濮撳悕
create table student (ID char(6), name VARCHAR2(100));
insert into sale values('200001',‘寮犱竴’);
insert into sale values('200002',‘鐜嬩簩’);
insert into sale values('200003',‘鏉庝笁’);
insert into sale values('200004',‘璧靛洓’);
commit;
(1) rownum 瀵逛簬絳変簬鏌愬肩殑鏌ヨ鏉′歡
濡傛灉甯屾湜鎵懼埌瀛︾敓琛ㄤ腑絎竴鏉″鐢熺殑淇℃伅錛屽彲浠ヤ嬌鐢╮ownum=1浣滀負鏉′歡銆備絾鏄兂鎵懼埌瀛︾敓琛ㄤ腑絎簩鏉″鐢熺殑淇℃伅錛屼嬌鐢╮ownum=2緇撴灉鏌ヤ笉鍒版暟鎹傚洜涓簉ownum閮芥槸浠?寮濮嬶紝浣嗘槸1浠ヤ笂鐨勮嚜鐒舵暟鍦╮ownum鍋氱瓑浜庡垽鏂槸鏃惰涓洪兘鏄痜alse鏉′歡錛屾墍浠ユ棤娉曟煡鍒皉ownum = n錛坣>1鐨勮嚜鐒舵暟錛夈?
SQL> select rownum,id,name from student where rownum=1;錛堝彲浠ョ敤鍦ㄩ檺鍒惰繑鍥炶褰曟潯鏁扮殑鍦版柟錛屼繚璇佷笉鍑洪敊錛屽錛氶殣寮忔父鏍囷級
SQL> select rownum,id,name from student where rownum=1;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200001 寮犱竴
SQL> select rownum,id,name from student where rownum =2;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
錛?錛塺ownum瀵逛簬澶т簬鏌愬肩殑鏌ヨ鏉′歡
濡傛灉鎯蟲壘鍒頒粠絎簩琛岃褰曚互鍚庣殑璁板綍錛屽綋浣跨敤rownum>2鏄煡涓嶅嚭璁板綍鐨勶紝鍘熷洜鏄敱浜巖ownum鏄竴涓繪槸浠?寮濮嬬殑浼垪錛孫racle 璁や負rownum> n(n>1鐨勮嚜鐒舵暟)榪欑鏉′歡渚濇棫涓嶆垚绔嬶紝鎵浠ユ煡涓嶅埌璁板綍
SQL> select rownum,id,name from student where rownum >2;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
閭e浣曟墠鑳芥壘鍒扮浜岃浠ュ悗鐨勮褰曞憖銆傚彲浠ヤ嬌鐢ㄤ互涓嬬殑瀛愭煡璇㈡柟娉曟潵瑙e喅銆傛敞鎰忓瓙鏌ヨ涓殑rownum蹇呴』瑕佹湁鍒悕錛屽惁鍒欒繕鏄笉浼氭煡鍑鴻褰曟潵錛岃繖鏄洜涓簉ownum涓嶆槸鏌愪釜琛ㄧ殑鍒楋紝濡傛灉涓嶈搗鍒悕鐨勮瘽錛屾棤娉曠煡閬搑ownum鏄瓙鏌ヨ鐨勫垪榪樻槸涓繪煡璇㈢殑鍒椼?
SQL>select * from(select rownum no ,id,name from student) where no>2;
NO ID NAME
---------- ------ ---------------------------------------------------
3 200003 鏉庝笁
4 200004 璧靛洓
SQL> select * from(select rownum,id,name from student)where rownum>2;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
錛?錛塺ownum瀵逛簬灝忎簬鏌愬肩殑鏌ヨ鏉′歡
濡傛灉鎯蟲壘鍒扮涓夋潯璁板綍浠ュ墠鐨勮褰曪紝褰撲嬌鐢╮ownum<3鏄兘寰楀埌涓ゆ潯璁板綍鐨勩傛樉鐒秗ownum瀵逛簬rownum<n錛?n>1鐨勮嚜鐒舵暟錛夌殑鏉′歡璁や負鏄垚绔嬬殑錛屾墍浠ュ彲浠ユ壘鍒拌褰曘?
SQL> select rownum,id,name from student where rownum <3;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200001 寮犱竴
2 200002 鐜嬩簩
緇間笂鍑犵鎯呭喌錛屽彲鑳芥湁鏃跺欓渶瑕佹煡璇ownum鍦ㄦ煇鍖洪棿鐨勬暟鎹紝閭f庝箞鍔炲憖浠庝笂鍙互鐪嬪嚭rownum瀵瑰皬浜庢煇鍊肩殑鏌ヨ鏉′歡鏄漢涓簍rue鐨勶紝rownum瀵逛簬澶т簬鏌愬肩殑鏌ヨ鏉′歡鐩存帴璁や負鏄痜alse鐨勶紝浣嗘槸鍙互闂存帴鐨勮瀹冭漿涓鴻涓烘槸true鐨勩傞偅灝卞繀欏諱嬌鐢ㄥ瓙鏌ヨ銆備緥濡傝鏌ヨrownum鍦ㄧ浜岃鍒扮涓夎涔嬮棿鐨勬暟鎹紝鍖呮嫭絎簩琛屽拰絎笁琛屾暟鎹紝閭d箞鎴戜滑鍙兘鍐欎互涓嬭鍙ワ紝鍏堣瀹冭繑鍥炲皬浜庣瓑浜庝笁鐨勮褰曡錛岀劧鍚庡湪涓繪煡璇腑鍒ゆ柇鏂扮殑rownum鐨勫埆鍚嶅垪澶т簬絳変簬浜岀殑璁板綍琛屻備絾鏄繖鏍風殑鎿嶄綔浼氬湪澶ф暟鎹泦涓獎鍝嶉熷害銆?
SQL> select * from (select rownum no,id,name from student where rownum<=3 ) where no >=2;
NO ID NAME
---------- ------ ---------------------------------------------------
2 200002 鐜嬩簩
3 200003 鏉庝笁
錛?錛塺ownum鍜屾帓搴?
Oracle涓殑rownum鐨勬槸鍦ㄥ彇鏁版嵁鐨勬椂鍊欎駭鐢熺殑搴忓彿錛屾墍浠ユ兂瀵規寚瀹氭帓搴忕殑鏁版嵁鍘繪寚瀹氱殑rowmun琛屾暟鎹氨蹇呴』娉ㄦ剰浜嗐?
SQL> select rownum ,id,name from student order by name;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
3 200003 鏉庝笁
2 200002 鐜嬩簩
1 200001 寮犱竴
4 200004 璧靛洓
鍙互鐪嬪嚭錛宺ownum騫朵笉鏄寜鐓ame鍒楁潵鐢熸垚鐨勫簭鍙楓傜郴緇熸槸鎸夌収璁板綍鎻掑叆鏃剁殑欏哄簭緇欒褰曟帓鐨勫彿錛宺owid涔熸槸欏哄簭鍒嗛厤鐨勩備負浜嗚В鍐寵繖涓棶棰橈紝蹇呴』浣跨敤瀛愭煡璇?
SQL> select rownum ,id,name from (select * from student order by name);
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200003 鏉庝笁
2 200002 鐜嬩簩
3 200001 寮犱竴
4 200004 璧靛洓
榪欐牱灝辨垚浜嗘寜name鎺掑簭錛屽茍涓旂敤rownum鏍囧嚭姝g‘搴忓彿錛堟湁灝忓埌澶э級

]]>