成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle分頁小談

數(shù)據(jù)庫 Oracle
今天突然看到這篇文章,回想了一下原來,好像大家關(guān)注MySQL和SQL Server的分頁多一些,不知道是否也有人關(guān)注Oracle的分頁呢?,借這個機會和大家分享一下Oracle的分頁吧!

【小編碎語】今天突然看到這篇文章,回想了一下原來,好像大家關(guān)注MySQL和SQL Server的分頁多一些,不知道是否也有人關(guān)注Oracle的分頁呢?借這個機會和大家分享一下Oracle的分頁吧!閑言到此,下面我們開始吧!

今天做項目時要實現(xiàn)分頁功能,以前只在mysql上弄過,oracle倒沒試過,但知道有這樣一個rownum這個東西。

但這個東西也不是那么容易用的,還是有蠻多地方要注意的。它不是物理上存在的一列,而是oracle自己在結(jié)果集中進行添加的。

首先我們來看一下我們的表結(jié)構(gòu)先:

我們新建一個表:

也就一個字段ID而已,這方便我們直接地看到結(jié)果。

我們先隨便插入幾條數(shù)據(jù):

先弄進去5條吧。

我們直接來一個:

  1. select rownum,id from test; 

我們看到結(jié)果:

 

很高興吧,都是一模一樣的,ronwum和ID是一樣的,方便我們看。

但結(jié)果看到的結(jié)果可能就會讓你郁悶啦。

繼續(xù)下來,我們刪除幾條數(shù)據(jù)再插入幾條:

看到結(jié)果,我們是刪除了后面兩條,4,5這兩條記錄,而插入了8,9這兩條記錄。我們再來執(zhí)行查詢:

  1. select rownum,id from test; 

我們看到ID為8,9的已經(jīng)取代了之前的4,5得到了rownum為4,5。這個說明了什么,說明了rownum并不是物理存在的,如果是物理存在的那么它肯定會隨著4,5的刪除而把rownum的4,5都刪除了,但它并沒有,而是把新插入的記錄的rownum作為此值,這說明rownum肯定只是一個邏輯上的列,它有一個專門的名稱——偽列。

下面我們繼續(xù)插入數(shù)據(jù),方便做下面的實驗:

如果我們需要取得前5條記錄,我們會怎么做呢?我們看到前面的rownum是根據(jù)我們查出來的結(jié)果來進行賦值的,那么我們就明白了,也許可以這樣:

  1. select rownum,id from test where rownum <= 5 order by id; 

但很杯具的是,我們錯了,看看結(jié)果:

為什么錯呢?

原因就是rownum會在我們查詢出來結(jié)果還沒排序前就進行編號。由于是這個原因,我們只要加個字查詢就OK啦。

  1. select rownum,id from (select * from test order by id) where rownum <= 5; 

我們看看結(jié)果:  

現(xiàn)在沒問題了,已經(jīng)按照rownum來排序了,也就是實現(xiàn)了我們的要求,查出前5個。

不要高興的太早,查前5個沒問題,那中間的記錄呢,第2到5個呢,或者大于5呢。我們來看看:

  1. select rownum,id from (select * from test order by id) where rownum >=1 and rownum <= 4; 

看看結(jié)果:

這個有數(shù)據(jù),而且正常,很好。

但不要高興,我們分頁一般不會只要***條開始吧,如果要中間呢?我們看看:

  1. select rownum,id from (select * from test order by id) where rownum >= 2 and rownum <= 4; 

這次不要大跌眼睛了:

杯具了吧。

為什么我們剛才拿到的>=1時會有呢,而現(xiàn)在>=2沒有呢?

原因就是oracle在賦值rownum的時候會從1開始賦值,而當(dāng)我們進行rownum >=1時,由于=1這個條件是成立的,所以它可以繼續(xù)取下一條rownum,繼續(xù)賦值到2,接連賦值下去。

而當(dāng)我們用rownum >=2時,由于=2這個條件是不成立的,因為當(dāng)取到***條rownum=1時,會把它丟棄,而當(dāng)取到下一條時,rownum還是為1,還是不滿足,一直這樣的循環(huán),***的結(jié)果就是沒數(shù)據(jù)可查出了。

但我們分頁確實要這樣要進行,怎么辦呢?

其實也簡單,還是子查詢的方式,不是直接用rownum那我們把子查詢中的rownum命一個別名然后通過它來限定不就OK了。

我們看看:

  1. select rn,id from (select rownum as rn,id from (select * from test order by id) ) where rn >=2 and rn <= 4; 

也許很多朋友看不明白是什么意思,我們先看看結(jié)果:

很正常,沒問題吧。

但為什么這樣就沒問題呢?其實我們在上面的子查詢中,直接把rownum用rn作為別名,它就被完全記錄下來了,這里我們用它來作限定條件已經(jīng)不關(guān)原來的rownum的事了。之所以要用兩個子查詢是因為***個排序需要作為子查詢才可以取到正確的rownum,才可以定義別名。

相信看到這,大家都應(yīng)該知道怎么用oracle來實現(xiàn)分頁啦。

這幾天工作忙啊,BlogWriter暫時進展不大,努力啊。

原文鏈接:http://cxshun.iteye.com/blog/1095793

【編輯推薦】

  1. PL/SQL開發(fā)中動態(tài)SQL的使用與過程分頁
  2. 詳解Oracle的幾種分頁查詢語句
  3. 談?wù)凧ava調(diào)用SQL Server分頁存儲過程
  4. 淺述asp.net海量分頁數(shù)據(jù)存儲過程
責(zé)任編輯:艾婧 來源: 編程人生
相關(guān)推薦

2014-03-21 09:05:40

2011-09-09 09:50:40

Oracle

2012-09-18 09:39:57

Linq項目高效

2009-11-02 18:03:25

Oracle用戶表空間

2011-07-28 09:22:56

Oracle WDPOracle數(shù)據(jù)庫

2010-10-27 10:11:07

Oracle分頁查詢

2012-08-23 14:09:20

函數(shù)

2019-05-30 09:25:59

2010-11-18 13:32:12

Oracle分頁查詢

2015-12-27 23:28:19

云存儲

2009-09-10 14:18:59

Functional F#

2016-01-04 13:32:46

云計算互聯(lián)網(wǎng)云存儲

2010-04-16 16:12:51

jdbc分頁

2010-05-04 15:15:39

Oracle分頁查詢

2010-10-26 14:50:11

oracle存儲過程

2012-07-23 14:30:33

Oracle

2009-04-09 13:14:09

Oracle分頁查詢CBO

2015-08-21 14:25:27

2018-09-17 13:50:28

2010-03-23 16:43:39

負載均衡互聯(lián)網(wǎng)鏈路深信服科技
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧洲妇女成人淫片aaa视频 | caoporn地址| 性做久久久久久免费观看欧美 | 国产91一区 | 国产精品乱码一区二区三区 | 色呦呦网站 | 蜜桃五月天 | 综合色播 | 国产一区二区三区视频 | 亚洲视频在线观看 | 中文字幕精 | 久久精品av| 九色网址| 国产人成精品一区二区三 | 欧美精品在线免费 | 欧美成人高清视频 | 日韩欧美视频 | 国产成年人小视频 | 天堂av免费观看 | www.亚洲精品 | 国产精品自拍视频 | 成年人视频在线免费观看 | 综合国产在线 | 国产精品一区二区av | 亚洲精品电影网在线观看 | 色婷婷精品国产一区二区三区 | 亚洲一区播放 | 欧美高清视频一区 | 午夜激情影院 | 国产欧美一区二区三区在线看 | 国产丝袜一区二区三区免费视频 | 超碰免费在线 | 国产丝袜一区二区三区免费视频 | 中文字幕一区二区三区四区五区 | 成人精品免费视频 | 香蕉超碰 | 91久久久久久久久 | 国产精品久久久久久久久久不蜜臀 | 瑟瑟免费视频 | 91av久久久| 午夜影院在线观看版 |