There will be requirement where you might need to select the first n rows, or do pagination in Oracle. This can be achieved using Rownum. 
Lets create sample table and data to understand the logic.
create table Employees (
  id     number  primary key,
  name   varchar2(30),
  age  number(2)
);
insert into Employees values ( 1, 'Anand Sharma',     19);
insert into Employees values ( 2, 'Pankaj Kumar',     22);
insert into Employees values ( 3, 'Aditya Raturi',    23);
insert into Employees values ( 4, 'Pawan Shukla',     20);
insert into Employees values ( 5, 'Poojan Garg',      34);
insert into Employees values ( 6, 'Amit Sharma',      54);
insert into Employees values ( 7, 'Chandan Ahluwalia',33);
insert into Employees values ( 8, 'Ankur Sinha',      34);
insert into Employees values ( 9, 'Sumit Vyas',       26);
insert into Employees values (10, 'Nagraj K',         43);
insert into Employees values (11, 'Praveen Saini',    54);
insert into Employees values (12, 'Pooja Verma',      56);
insert into Employees values (13, 'Pramod Pandey',    33);
insert into Employees values (14, 'Ketan Kumar',      35);
insert into Employees values (15, 'Akhil Pratap',     53);
insert into Employees values (16, 'Shaili Sharma',    32);
insert into Employees values (17, 'Kabir Kumar',      31);
insert into Employees values (18, 'Chetan Kapoor',    30);
insert into Employees values (19, 'Esha Khan',        29);
insert into Employees values (20, 'Kamala Rani',      39);
insert into Employees values (21, 'Vimal Wasan',      27);
Now let say requirement is to get first 5 records, this can  be achieved using following query:
select name, age from Employees where rownum < 6;
Following, would be the result, please view its same order as it was inserted:
Anand Sharma    19
Pankaj Kumar    22
Aditya Raturi   23
Pawan Shukla    20
Poojan Garg     34
Now let say you want to do pagination in your application. For that requirement would be to get data from database in slots. For example, in first page first 10 records are displayed and on second page next 10 records are displayed.
Query to get first 10 record would be:
select name, age 
  from (
  select rownum r, name, age 
    from Employees
  )
where r >  0 and
      r < 11;
And result for it would be:
Anand Sharma        19
Pankaj Kumar        22
Aditya Raturi       23
Pawan Shukla        20
Poojan Garg         34
Amit Sharma         54
Chandan Ahluwalia   33
Ankur Sinha         34
Sumit Vyas          26
Nagraj K            43
Query to get next 10 records for page 2 would be:
select name, age 
  from (
  select rownum r, name, age 
    from Employees
  )
where r >  10 and
      r < 21;
And result for it would be:
Praveen Saini    54
Pooja Verma      56
Pramod Pandey    33
Ketan Kumar      35
Akhil Pratap     53
Shaili Sharma    32
Kabir Kumar      31
Chetan Kapoor    30
Esha Khan        29
Kamala Rani      39    
Now let say requirement was to have order by age in the query, following would be query for it:
select name, age
  from (
    select name, age, row_number() over (order by age) r
      from Employees
  )
where r between 1 and 5; 
And result for it would be:
Anand Sharma    19
Pawan Shukla    20
Pankaj Kumar    22
Aditya Raturi   23
Sumit Vyas      26
Please note following query won't give correct order by result which is displayed below:
select name, age
  from (
    select name, age, rownum r
      from Employees order by age
  )
where r between 1 and 5; 
Please note though end record should have 'Sumit Vyas' with Age 26, but it is having 'Poojan Garg' Age 34.
Anand Sharma    19
Pawan Shukla    20
Pankaj Kumar    22
Aditya Ratur    23
Poojan Garg     34
                       
                    
0 Comment(s)