TODO: tutorial
[sqlgg.git] / sql / rownum.sql
blob94d8c4fd1e028f7ecadf4fbb95a8702ddcca3acc
1 -- http://explainextended.com/2009/05/06/oracle-row_number-vs-rownum/
2 -- Oracle
4 CREATE TABLE mytable (
5         id NUMBER(10) NOT NULL,
6         paginator NUMBER(10) NOT NULL,
7         `value` VARCHAR2(50)
8 );
10 ALTER TABLE mytable
11 ADD CONSTRAINT pk_mytable_id PRIMARY KEY (id);
14 CREATE INDEX ix_mytable_paginator_id ON mytable(paginator, id);
17 INSERT
18 INTO    mytable(id, paginator, `value`)
19 SELECT  level, level / 10000, 'Value ' || level
20 FROM    dual
21 CONNECT BY
22         level <= 1000000;
24 SELECT  *
25 FROM    (
26         SELECT  t.*, ROW_NUMBER() OVER (ORDER BY paginator, id) AS rn
27         FROM    mytable t
28         )
29 WHERE   rn BETWEEN 900001 AND 900010;
31 SELECT  *
32 FROM    (
33         SELECT  t.*, ROWNUM AS rn
34         FROM    mytable t
35         ORDER BY
36                 paginator, id
37         )
38 WHERE   rn BETWEEN 900001 AND 900010;
40 SELECT  *
41 FROM    (
42         SELECT  t.*, ROWNUM AS rn
43         FROM    mytable t
44         ORDER BY
45                 paginator, id
46         )
47 WHERE   rn >= 900001
48         AND rownum <= 10;