做分頁要用到SQL的LIMIT,但悲哀的是Oracle 11g居然沒有LIMIT...

例如在MYSQL為

SELECT * FROM table1 ORDER BY column1 LIMIT offset, count

offset是要偏移的row數,count為要取的row的總數,假設offset為2,count為4如下

SELECT * FROM table1 ORDER BY column1 LIMIT 2, 4;

則僅會取出的資料第三列及第四列的資料,依column1排序。

 

例如目前資料表table1內全部的資料如下

以下面的句子查詢

SELECT * FROM table1 ORDER BY id LIMIT 2, 4;

 

但在Oracle 11g沒有類似LIMIT的用法,要改用ROWNUM,達到同樣目地的語法如下

SELECT a.* FROM
(
       SELECT b.*, ROWNUM AS RNUM FROM
       (
               SELECT c.* FROM table1 c ORDER BY column1
       ) b
       WHERE ROWNUM <= 4
) a
WHERE RNUM > 2;

ROWNUM為Oracle SQL的關鍵字,代表一個假欄位(pseudocolumn),在查詢後會分配由1, 2, 3,...依序累加的數字至查詢結果的每一列。

所以上述的語法代表先從table1資料表查詢全部結果並以column1的值排序(綠色語句,最內層),

然後再從這結果中查詢並限制條件ROWNUM<=4的,則查詢結果為row1 ~ row4,ROWNUM給與別名RUM(藍色語句,第二層),

最後再從此結果查詢並限制條件RNUM>2,則結果為row3~row4(紅色語句,最外層)

真是有夠麻煩。

請參考Oracle , Stackoverflow

創作者介紹

菲比傻大姐&肉豬

phoebelin0606 發表在 痞客邦 PIXNET 留言(0) 人氣()