【Oracle SQL*Plus】レコード行番号:ROWNUM
備忘録になります。ROWNUMはレコード行番号を示します。
SQL> SELECT * FROM TEST_TABLE;
2,NAME-B , 2,B
3,NAME-C , 3,C
4,NAME-D , 4,D
5,NAME-E , 5,E
1,NAME-A , 1,A
SQL> SELECT ROWNUM FROM TEST_TABLE;
1
2
3
4
5
ROWNUMを使うケースとして、行番号指定での表示に利用します。
SQL> SELECT * FROM TEST_TABLE
2 WHERE ROWNUM <= 3;
2,NAME-B , 2,B
3,NAME-C , 3,C
4,NAME-D , 4,D
注意点としてWHERE句に利用する場合、ORDER BYやGROUP BYより優先順位が高いため、ソート後やグループ化後の結果に対しての行番号を使いたい場合は工夫が必要です。
SQL> SELECT * FROM TEST_TABLE
2 ORDER BY ID;
1,NAME-A , 1,A
2,NAME-B , 2,B
3,NAME-C , 3,C
4,NAME-D , 4,D
5,NAME-E , 5,E
SQL> SELECT * FROM TEST_TABLE
2 WHERE ROWNUM <= 3
3 ORDER BY ID;
2,NAME-B , 2,B
3,NAME-C , 3,C
4,NAME-D , 4,D
上記クエリは項目名:IDが1~3のレコードを表示させたいが、ソートが効かず、2~4が表示されています。解決法として、私はサブクエリを使って回避しています。
SQL> SELECT * FROM (
2 SELECT * FROM TEST_TABLE
3 ORDER BY ID)
4 WHERE ROWNUM <= 3;
1,NAME-A , 1,A
2,NAME-B , 2,B
3,NAME-C , 3,C
関連記事