ORACLE 12c SQL ROW LIMITI

Bir tablodaki ilk n satırı, son n satırı veya n. satır dan sonraki m satırı getir gibi sorgular için, Oracle 12c ile gelen sorgu biçimlerini göreceğiz.

SYNTAX

Select ....from table_name ....
[ OFFSET offset { ROW | ROWS } ]
[ FETCH { FIRST | NEXT } [ { rowcount | percent PERCENT } ]
    { ROW | ROWS } { ONLY | WITH TIES } ]

FETCH FIRST n ROWS ONLY : Örneğin Employees tablosundaki ilk 5 kaydın employee_id lerini getir dersek

select employee_id from hr.employees FETCH FIRST 5 ROWS ONLY;

100
101
102
103
104

FETCH FIRST n ROWS WITH TIES : Kullanılırsa aynı değerlere sahip satırlar eşleşirse n satır dan falzda döndürebilir. Aşağıda görüldüğü gibi 5. satırdaki 100 ile eşleşen 3 satır olduğu için 9 satır döndürmüştür.

select department_id from hr.employees order by  department_id desc 
        FETCH FIRST 5 ROWS WITH TIES;


110
110
100
100
100
100
100
100

Satır sayısıyla kısıtlamaya ek olarak, yüzde olarak kısıtlamada yapabilmekteyiz. Örneğin tablonun %20 sini getirmek için FETCH FIRST 20 PERCENT ROWS ONLY ifadesi eklenir. 107 satırlık employee tablosunun %10 unu çağırısa 11 satır getirecektir bize.

select department_id  from hr.employees order by department_id 
  fetch first 10 percent rows only

10
20
20
30
30
30
30
30
30
40
50
OFFSET n ROWS FETCH NEXT m ROWS ONLY; n.  satırdan sonraki m satırı getir dersek.
  select salary  from hr.employees 
  offset 10 rows fetch next 5 rows only

8200
7700
7800
6900
11000

OFFSET kullanımında PERCENT ( yüzde) de belirtilebilir. 117 satırlı Employees tablosunda 100 satırdan sonraki satırların %50 sini getir dersek 7 satır getirmesi gerekir.

select salary  from hr.employees 
  offset 100 rows fetch next 50 percent rows only

4400
13000
6000
6500
10000
12008
8300