資源描述:
《oracle中rownum函數(shù)用法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、Oraclerownum用法程序里常常會(huì)遇到分頁(yè)的問(wèn)題,因?yàn)橛胔ibernate,所以一直就是用setMaxResult(),setFirstResult()之類的來(lái)搞定,可萬(wàn)一不讓用hibernate怎么辦?直接用SQL怎么搞定呢?解析oracle的rownum對(duì)于rownum來(lái)說(shuō)它是oracle系統(tǒng)順序分配為從查詢返回的行的編號(hào),返回的第一行分配的是1,第二行是2,依此類推,這個(gè)偽字段可以用于限制查詢返回的總行數(shù),而且rownum不能以任何表的名稱作為前綴。舉例說(shuō)明:例如表:student(學(xué)生)表,表結(jié)構(gòu)為:sql代碼1.ID
2、????char(6) --學(xué)號(hào)??2.name VARCHAR2(10) --姓名????3.createtablestudent(IDchar(6),nameVARCHAR2(100));???4.insertintosalevalues('200001',‘張一’);???5.insertintosalevalues('200002',‘王二’);???6.insertintosalevalues('200003',‘李三’);???7.insertintosalevalues('200004',‘趙四’);???
3、8.commit;???(1)rownum對(duì)于等于某值的查詢條件如果希望找到學(xué)生表中第一條學(xué)生的信息,可以使用rownum=1作為條件。但是想找到學(xué)生表中第二條學(xué)生的信息,使用rownum=2結(jié)果查不到數(shù)據(jù)。因?yàn)閞ownum都是從1開(kāi)始,但是1以上的自然數(shù)在rownum做等于判斷是時(shí)認(rèn)為都是false條件,所以無(wú)法查到rownum=n(n>1的自然數(shù))。sql代碼1.SQL>selectrownum,id,namefromstudentwhererownum=1;(可以用在限制返回記錄條數(shù)的地方,保證不出錯(cuò),如:隱式游標(biāo))???2.SQL
4、>selectrownum,id,namefromstudentwhererownum=1;???3.????ROWNUMID?????NAME??4.-------------------------------------------------------------------??5.?????????1200001張一???6.SQL>selectrownum,id,namefromstudentwhererownum=2;????7.????ROWNUMID?????NAME??8.----------------------
5、---------------------------------------------??(2)rownum對(duì)于大于某值的查詢條件如果想找到從第二行記錄以后的記錄,當(dāng)使用rownum>2是查不出記錄的,原因是由于rownum是一個(gè)總是從1開(kāi)始的偽列,Oracle認(rèn)為rownum>n(n>1的自然數(shù))這種條件依舊不成立,所以查不到記錄sql代碼1.SQL>selectrownum,id,namefromstudentwhererownum>2;???2.ROWNUMID?????NAME??3.---------------------
6、----------------------------------------------??那如何才能找到第二行以后的記錄呀。可以使用以下的子查詢方法來(lái)解決。注意子查詢中的rownum必須要有別名,否則還是不會(huì)查出記錄來(lái),這是因?yàn)閞ownum不是某個(gè)表的列,如果不起別名的話,無(wú)法知道rownum是子查詢的列還是主查詢的列。sql代碼1.SQL>select*from(selectrownumno,id,namefromstudent)whereno>2;???2.????????NOID?????NAME??3.-----------
7、--------------------------------------------------------??4.?????????3200003李三???5.?????????4200004趙四???6.SQL>select*from(selectrownum,id,namefromstudent)whererownum>2;???7.????ROWNUMID?????NAME??8.-------------------------------------------------------------------??(3)ro
8、wnum對(duì)于小于某值的查詢條件如果想找到第三條記錄以前的記錄,當(dāng)使用rownum<3是能得到兩條記錄的。顯然rownum對(duì)于rownum1的自然數(shù))的條件認(rèn)為是成立的,所以可以找到