Limiting the rows returned by a query (Pagination)
Get first N rows with row limiting clause
Section titled “Get first N rows with row limiting clause”The FETCH clause was introduced in Oracle 12c R1:
SELECT valFROM mytableORDER BY val DESCFETCH FIRST 5 ROWS ONLY;An example without FETCH that works also in earlier versions:
SELECT * FROM ( SELECT val FROM mytable ORDER BY val DESC) WHERE ROWNUM <= 5;Pagination in SQL
Section titled “Pagination in SQL”SELECT valFROM (SELECT val, rownum AS rnum FROM (SELECT val FROM rownum_order_test ORDER BY val) WHERE rownum <= :upper_limit)WHERE rnum >= :lower_limit ;this way we can paginate the table data , just like web serch page
Get N numbers of Records from table
Section titled “Get N numbers of Records from table”We can limit no of rows from result using rownum clause
select * from( select val from mytable) where rownum<=5If we want first or last record then we want order by clause in inner query that will give result based on order.
Last Five Record :
select * from( select val from mytable order by val desc) where rownum<=5First Five Record
select * from( select val from mytable order by val) where rownum<=5Get row N through M from many rows (before Oracle 12c)
Section titled “Get row N through M from many rows (before Oracle 12c)”Use the analytical function row_number():
with t as ( select col1 , col2 , row_number() over (order by col1, col2) rn from table)select col1, col2from twhere rn between N and M; -- N and M are both inclusiveOracle 12c handles this more easily with OFFSET and FETCH.
Skipping some rows then taking some
Section titled “Skipping some rows then taking some”In Oracle 12g+
SELECT Id, Col1FROM TableNameORDER BY IdOFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY;In earlier Versions
SELECT Id, Col1 FROM (SELECT Id, Col1, row_number() over (order by Id) RowNumber FROM TableName)WHERE RowNumber BETWEEN 21 AND 40Skipping some rows from result
Section titled “Skipping some rows from result”In Oracle 12g+
SELECT Id, Col1FROM TableNameORDER BY IdOFFSET 5 ROWS;In earlier Versions
SELECT Id, Col1 FROM (SELECT Id, Col1, row_number() over (order by Id) RowNumber FROM TableName)WHERE RowNumber > 20