2.5. LIMIT と OFFSET

SELECT select_list FROM table_expression [ORDER BY sort_spec] [LIMIT { number | ALL }] [OFFSET number]

LIMIT を使うことで、問い合わせの実行で生成された行の一部を取り出す ことができます。リミットカウントが指定されると、それを越える数の行 は返されません。オフセットが指定されると、指定した分だけ返す行の開 始位置を飛ばします。

LIMITを使用するときは、ユニークな順序に結果の行を強制する、ORDER BY 句を使用するのが良いでしょう。さもなければ、予知できない問い合わせ の行のサブセットを得ることになるでしょう。10番目から20番目の行を問 い合わせることもあるでしょうが、10番目から20番目というのは、どうい う順序で並んでいたものでしょうか? ORDER BY を指定しなければ、並び順 は分かりません。

問い合わせのオプティマイザは、問い合わせ計画が生成されたときにLIMIT を考慮に入れます。そこで、LIMITと OFFSETに与えたものによって、おそ らく(異なる行の順序を生む)異なったプランを得ることになります。 このように、一つの問い合わせ結果から異なるサブセットを選び出すため に、異なる LIMIT/OFFSERT の値を使用することは、ORDER BY で結果の順 序を強制しない限りは、矛盾した結果を生むでしょう。 これはバグではありません。ORDER BYを使って順序を強制することがな い限り、SQL は特定の順序で問い合わせの結果を渡さない、という事実 に固有の成り行きです。