2016年4月16日 星期六

12c 的 OFFSET (DML 十四)

取出資料的前幾筆或中間的資料(就是MS SQL的top),終於在12c有了,官網連結,搜尋「OFFSET」可找到語法,再搜尋「Row Limiting: Examples」,有範例可參考

要放在SELECT的最下面,複習一下語法:
1.SELECT:必要
2.FROM:必要
3.WHERE:選擇使用
4.GROUP BY :選擇使用
5.HAVING:有GROUP BY才可用
6.ORDER BY:選擇使用
7.OFFSET:選擇使用


語法如下(自己想的,不一定正確,看下方的紅字):
[OFFSET n [ROW|ROWS]] FETCH [FIRST|NEXT] n [PERCENT] [ROW|ROWS] [ONLY|WITH TIES]

※最後的PERCENT和ONLY要寫其中一個

※筆數是從0開始的

※OFFSET不指定,預設是 OFFSET 0 [ROW|ROWS],表示從第0筆開始

※OFFSET後的數字給負的,都表示0;如果給null或大於等於返回的行數,那就沒有結果返回

※FETCH [FIRST|NEXT] 表示取出幾筆資料,官方說不指定會將全部的結果返回,但我試的結果,不加就是編譯錯誤

※PERCENT是取百分筆用的(官方寫兩種,都一定是給數字,我懷疑它要如何分辯),如果給負數視同0;給null沒有結果返回
官方說如不給數字,預設是1,但我試的結果是編譯錯誤

※ONLY|WITH TIES兩者選者其一,但官方有說使用WITH TIES要配合ORDER BY使用,不然沒有結果會返回,但我試的結果和ONLY一樣

※最後一定要有 ROW ONLY、ROW WITH TIES、ROWS ONLY、ROWS WITH TIES 這四者其中之一語法才是正確的


※範例

SELECT * FROM emp OFFSET 10 ROWS FETCH NEXT 2 ROW ONLY;
SELECT * FROM emp OFFSET 10 ROWS;
SELECT * FROM emp FETCH FIRST 3 ROWS ONLY;
SELECT * FROM emp FETCH NEXT 10 PERCENT ROWS ONLY;
SELECT * FROM emp FETCH FIRST 10 PERCENT ROWS WITH TIES;

※第一條SQL表示忽略前10筆,取兩筆記錄,所以顯示第11和12筆

※第二條SQL表示從第11筆之後開始到最後

※第三條SQL表示取出前三筆

※第四、五條SQL都表示取10%的記錄,因為全部有14筆,所以是1.4
官方說小數會被截斷,可是我試的結果並不是,也不會四捨五入,直接進1,結果是2條記錄

沒有留言:

張貼留言