【Oracle SQL*Plus】先頭から指定された行数(=レコード数)を表示:WHERE ROWNUM
備忘録になります。先頭から指定された行数(=レコード数)を表示させる場合はWHERE, 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 * 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
関連記事