ページの先頭行へ戻る
Symfoware Server V10.0.0 SQLリファレンス

2.9 ROWNUM

機能

ROWNUMには、FROM句の結果の表に対して、WHERE句の探索条件を適用した結果の行に、1から振った順番号が入ります。

記述形式

一般規則

使用例

例1

在庫表から在庫数量が100以下の行を、先頭から5行分取り出します。

SELECT 製品番号,製品名,在庫数量
  FROM 在庫管理.在庫表 WHERE 在庫数量 <= 100 AND ROWNUM < 6
例2

在庫表から、製品番号が100から300の製品の数を求めます。ただし、50行を超える検索はしません。

SELECT COUNT(*) FROM 在庫管理.在庫表
 WHERE 製品番号 BETWEEN 100 AND 300 AND ROWNUM < 51
例3

在庫表から、製品番号が100から199で在庫数量が多い順に3行取り出します。

SELECT 製品番号,製品名,在庫数量,倉庫番号
  FROM (SELECT 製品番号, 製品名,在庫数量,倉庫番号 FROM 在庫管理.在庫表
                  WHERE 製品番号 BETWEEN 100 AND 199
                  ORDER BY 在庫数量 DESC) AS D1(製品番号,製品名,在庫数量,倉庫番号)
                          (1)
 WHERE ROWNUM < 4
          (2)

(1) 在庫数量の降順にソートします。

(2) 在庫数量が多い順に3行取り出します。

例4

在庫表から、製品番号が100から200の行を取り出し、取り出した行に1から順に番号を振ります。

SELECT ROWNUM AS "ROWNUM",製品番号,製品名,在庫数量 FROM 在庫管理.在庫表
 WHERE 製品番号 BETWEEN 100 AND 200
5

在庫表から、製品番号が100から300の行の、先頭から11件目以降を取り出します。

SELECT 製品番号,行番号
  FROM (SELECT 製品番号,ROWNUM FROM 在庫管理.在庫表
                         (1)
         WHERE 製品番号 BETWEEN 100 AND 300) AS D1(製品番号,行番号)
 WHERE 行番号 > 10
           (2)

(1) 問合せの結果に対し、1から順に行番号を振ります。

(2) ROWNUMで振った行番号を判定します。

誤った使い方の例

SELECT 製品番号
  FROM 在庫管理.在庫表 WHERE 製品番号 BETWEEN 100 AND 200 AND ROWNUM > 10
                                                                (1)

(1) 結果集合の行にROWNUMの値を1から順に振りますが、探索条件は常に偽になるため、2以上の値が振られることがありません。そのため、結果集合の行はすべて偽になり、検索結果は0件になります。

6

取引先などあるソートキーの昇順に画面を次々にめくっていくような場合、前回の続きから取り出します。

SELECT 行番号,取引先,取引製品,仕入価格
  FROM (SELECT ROWNUM,取引先,取引製品,仕入価格
                (3)
          FROM (SELECT 取引先,取引製品,仕入価格
                  FROM 在庫管理.発注表
                 WHERE 取引先 > 61
                 ORDER BY 取引先) AS D1(取引先,取引製品,仕入価格) 
                      (1)
          WHERE ROWNUM <= 10)
                   (2)
       AS D2(行番号, 取引先,取引製品,仕入価格)
 WHERE 行番号 >= 6
          (4)

(1) 取引先の昇順にソートします。

(2) 取引先が小さい順に10行取り出します。

(3) 取引先でソートした結果に1から順番号を振ります。

(4) 順番号について、6以上の行を取り出します。