5

ネットで Oracle ページング クエリを検索したところ、ほとんどのクエリを 2 回ラップするように言われました。

SELECT * 
  FROM (SELECT t.*, ROWNUM rn 
          FROM tableName t 
         WHERE ROWNUM < 200) 
 WHERE rn > 100

次のように入力できるかどうか疑問に思っています。

SELECT *, ROWNUM rn 
  FROM tableName t 
 WHERE ROWNUN BETWEEN 100 AND 200

2つ目もうまくいくようです。これら 2 つのクエリに (パフォーマンス) 違いはありますか?

4

2 に答える 2

4

ROWNUM を使用する適切な方法は次のとおりです。

SELECT x.* 
  FROM (SELECT t.*, 
               ROWNUM rn 
          FROM tableName t) AS x
 WHERE x.rn > 100
   AND x.rn < 200

BETWEENは包括的であるため、2 つのクエリは同一のロジックではありません。

ROWNUM の詳細については、このリンク (Oracle ドキュメントへのリンクを含む) を参照してください。

于 2011-08-16T03:52:49.780 に答える