ROWNUMで結果のレコード数を制限する
スポンサードリンク
あるカラムでソートした結果の、上位n件だけを抽出したい・・・というときに便利な
LIMIT句というものがあります。
select * from EMPLOYEES order by EMPLOYEE_ID asc limit 10;
これで、EMPLOYEE_IDのトップ10件のみ取得できます。
しかし、悲しいことにOracleではLIMIT句がサポートされていない・・・
代替として ROWNUM擬似列なるものを使って取得する必要があります。
ROWNUMとは、ある結果のセットに、仮想的なレコード番号を振ったものです。
このROWNUMを条件句にセットし、結果を制限します。
上記SQLと同様のことがしたい時は、以下のような感じになります。
select * from ( select rownum rn, s.* from ( select * from EMPLOYEES order by EMPLOYEE_ID ) s ) a where a.rn <= 10 order by a.rn;
注意点として、rownumは、直接where句やorder by句に指定できないので、
わざわざ入れ子にして別名をつける必要あり。ジャマくさいわね。