結果の制限およびオフセットの指定

LIMIT句を使用して、SELECT文から戻される結果の数を制限できます。たとえば、表に1000行ある場合、LIMIT値を指定して返される行の数を制限します。LIMITおよびOFFSETをORDER BY句とともに使用することをお薦めします。そうしない場合、結果はランダムな順序で戻され、結果が予測できなくなります。

LIMITおよびOFFSETを使用する場合の適切なユースケース/例は、結果のアプリケーション・ページングです。たとえば、アプリケーションで1ページ当たり4つの結果を表示するとします。制限およびオフセットを使用して、アプリケーションでステートレス・ページングを実装できます。1ページ当たりn (たとえば4)の結果を表示する場合、m (たとえば2)ページの結果が表示されて、オフセットは(n*m-1) (この例では4)となり、制限はn (ここでは4)になります。

例1: アプリケーションで1ページに4つの結果を表示できます。最後に確認されたステーションがJTRである乗客の、最初のページでアプリケーションによってフェッチされた詳細をフェッチします。
SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time
FROM BaggageInfo $bag, 
$bag.bagInfo[].lastSeenTimeGmt $flt_time
WHERE $bag.bagInfo[].lastSeenStation=any "JTR" 
ORDER BY $flt_time LIMIT 4

説明: 最後に確認されたステーションに基づいてBaggageInfo表のデータをフィルタ処理し、最後に確認された時刻に基づいて結果をソートします。ネストされていない配列を使用して、データをフラット化します。つまり、bagInfo配列はフラット化され、最後に確認された時刻がフェッチされます。結果セットの最初の4行のみを表示する必要があります。

出力:
{"fullName":"Michelle Payne","tagNum":"17657806247861","flt_time":"2019-02-02T23:59:00Z"}
{"fullName":"Gerard Greene","tagNum":"1765780626568","flt_time":"2019-03-07T16:01:00Z"}
{"fullName":"Lorenzo Phil","tagNum":["17657806240001","17657806340001"],"flt_time":"2019-03-12T15:05:00Z"}
{"fullName":"Lucinda Beckman","tagNum":"17657806240001","flt_time":"2019-03-12T15:05:00Z"}
例2: アプリケーションで、1ページに4つの結果を表示できます。最後に確認されたステーションがJTRである乗客の、2ページ目でアプリケーションによってフェッチされた詳細をフェッチします。
SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time 
FROM BaggageInfo $bag, 
$bag.bagInfo[].lastSeenTimeGmt $flt_time 
WHERE $bag.bagInfo[].lastSeenStation=any "JTR" 
ORDER BY $flt_time LIMIT 4 OFFSET 4

説明: 最後に確認されたステーションに基づいてBaggageInfo表のデータをフィルタ処理し、最後に確認された時刻に基づいて結果をソートします。ネストされていない配列を使用して、データをフラット化します。2ページ目の内容を表示する必要があるため、OFFSET 4を設定します。4行に制限されますが、合計結果セットは5行のみであるため、1行のみが表示されます。最初の複数個がスキップされ、5番目が表示されます。

出力:
{"fullName":"Lorenzo Phil","tagNum":["17657806240001","17657806340001"],
"flt_time":"2019-03-12T16:05:00Z"}