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 は特定の順序で問い合わせの結果を渡さない、という固有の 成り行きの結果です。