ページの先頭行へ戻る
Symfoware Server V12.8.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以上の行を取り出します。