ほとんどの SQL 実装では、クエリで返されるすべての行の "スライディング ウィンドウ" サブセットを選択できるのが一般的です。これの一般的な使用例はページネーションです。たとえば、各ページに 10 件の結果がある検索ページがあるとします。LIMIT
およびOFFSET
キーワードをサポートする実装の場合、各ページの結果を返すために使用されるクエリは次のようになります: ページ 1 は を使用しSELECT ... LIMIT 10 OFFSET 0
、ページ 2 は を使用しSELECT ... LIMIT 10 OFFSET 10
、ページ 3 は を使用します(は の前に有効になるSELECT ... LIMIT 10 OFFSET 20
ことに注意してください)。OFFSET
LIMIT
とにかく、OpenEdge の SQL エンジンでこの機能を模倣しようとしています。SELECT TOP
基本的に と同等であることはすでにわかっていLIMIT
ますが、 に似たものは見つかりません (まったくOFFSET
同等のものはないと思います)。SQL Server と Oracle にも はありませんが、ネストされた選択を使用して動作を模倣するために使用できる、それぞれおよび と呼ばれる疑似列があります (こちらとこちらを参照)。OFFSET
ROWCOUNT
ROWNUM
10.2B SQL リファレンスドキュメントの p49 には、一番下にあるTOP 句というタイトルのサブセクションがあります。
SELECT TOP
Oracle のROWNUM
機能と機能的に同等です。SELECT TOP
は、結果セット サイズの制限に関して単純に定義されており、最適なデータ アクセスのためにこの制限をどのように使用するかはオプティマイザによって決定されることに注意してください。したがって、オラクルの 句SELECT TOP
の意味を定義するために使用されるすべての「手続き上の規則」があるわけではありません。ROWNUM
ただし、 の構文によれば、TOP
can のように述語として使用できないため、これは不正確なようですROWNUM
(たとえば、 I can't say SELECT * FROM Customer WHERE TOP > 5 AND TOP < 10
)。SoTOP
は と機能的に同等ではありませんROWNUM
。
を模倣する方法はありますかOFFSET
、それとも運が悪いのでしょうか?