MB blog

エンタープライズソフトウェアのプリセールス 兼 小さな宿泊施設のマーケターによる、ちょっとテクニカルな話題のメモです。

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句に指定できないので、
わざわざ入れ子にして別名をつける必要あり。ジャマくさいわね。