Skip to main content
LIMIT 句は、クエリ結果として返される行数を制御します。行は件数と OFFSET で選択するか、LIMIT ... AFTER ... UNTIL で行の範囲の開始と終了を指定する条件によって選択できます。

基本構文

先頭の行を取得:
結果の先頭 m 行を返します。結果が m 行未満の場合は、すべてのレコードを返します。 TOP の代替構文 (MS SQL Server 互換) :
これは LIMIT m と同等で、Microsoft SQL Server のクエリとの互換性のために使用できます。 OFFSET を指定した SELECT:
先頭のn行をスキップし、その次のm行を返します。 どちらの形式でも、nとmは 0 以上の整数である必要があります。 条件による範囲の取得:
start_expr が true となる最初の行から、その開始位置以降で end_expr が true となる最初の行の直前までの行を返します。AFTER を省略した場合は、ストリームの先頭から開始します。n はその範囲の長さの上限を指定します。AFTER start_expr ALL は、一致するすべての行で範囲を開始します。以下の LIMIT … AFTER … UNTIL を参照してください。

負の LIMIT

負の値を使用すると、result set の末尾から行を選択できます。 LIMIT -n, -m 構文は LIMIT -m OFFSET -n と同等です。

小数指定の制限

0 から 1 の間の小数値を使用して、行の割合を指定できます。
  • 小数は、0 より大きく 1 より小さい Float64 値である必要があります。
  • 小数で指定した行数は、次の整数に切り上げられます。

LIMIT の種類を組み合わせる

通常の整数と、小数または負の OFFSET を組み合わせて使用できます。
範囲 form は、通常の行数とのみ組み合わせられます。LIMIT 3 AFTER start_expr は、範囲の開始位置から最大3行を取得します。OFFSET、小数および負の件数、WITH TIES は、AFTER または UNTIL と併用できません。LIMIT BY 句は同じクエリ内で範囲の前に指定でき、limit 設定は引き続き結果の上限を設定します。

LIMIT … WITH TIES

WITH TIES 修飾子は、制限された最後の行と同じ ORDER BY 値を持つ追加の行も含めます。これは count および OFFSET による limit にのみ適用され、範囲 form と組み合わせて使用することはできません。
WITH TIES を使用すると、最後の値と一致するすべての行が含まれます。
6 行目は、5 行目と同じ値 (2) であるため含まれます。 OFFSET を OFFSET キーワードで指定した場合も同様です。
最初の2行をスキップして3行を取得すると、通常は 1, 1, 2 が返されますが、2つ目の 2 も最後の行と同順位のため含まれます。 WITH TIES は負の limit と OFFSET でも機能します。最初に選択された行と同じ ORDER BY 値を持つ追加の行も含めます。
WITH TIES がない場合、結果は 1, 1, 2, 2 になります。WITH TIES を使用すると、最初に選択された行と同順位であるため、値 1 の行がさらに 3 行含まれます。 この修飾子は、ORDER BY ... WITH FILL 修飾子と組み合わせて使用できます。

LIMIT … AFTER … UNTIL (conditions による範囲指定)

2 つの boundary condition に挟まれた行の 範囲 に結果を絞り込むことができます:
  • AFTER start_expr: start_expr が true となる最初の行から出力を開始します (その行を含む) 。
  • AFTER start_expr ALL: start_expr が true となる位置から始まる、すべての一致範囲のユニオンを出力します。範囲が重複しても、行は重複しません。
  • UNTIL end_expr: 各範囲は、その開始位置以降で end_expr が true となる最初の行の直前で終了します (その行は含まれません) 。
  • n: 任意の行数。ALL を指定しない場合、1 つの開始済み範囲の最大長です。AFTER ... ALL を指定した場合は、開始された各範囲の長さとなるため、結果の合計は n を超えることがあります (たとえば、LIMIT 2 AFTER number IN (2, 6) ALL は最大 4 行を返すことがあります) 。結果行の合計数を制限するには、範囲の後にグローバル制限として適用される limit 設定を使用します。
ストリーム順序 (行を読み取る順序) によって「最初」の一致が決まります。これを制御するには ORDER BY を使用します。 範囲が開始される前の UNTIL の一致は影響しません。開始行で両方の条件が一致する場合、その範囲は空になります。開始位置以降に UNTIL の一致がない場合、範囲は行数 n に達するまで、またはストリームの終端まで続きます。AFTER ... ALL を指定した場合、先行する範囲が終了した後、後続の AFTER 一致によって新しい範囲を開始できます。 AFTER を指定し ALL を指定しない場合、範囲ステップは開始一致を含む chunk が見つかるまで AFTER を評価します。その後、その chunk および以降の chunk で、範囲が開いている間 UNTIL を評価します。式は chunk 全体に対して評価されるため、開始した chunk 内では開始位置より前の行についても UNTIL が評価されることがあります。 UNTIL に rowNumberInAllBlocks のような stateful function や、クエリ内で非決定論的な関数が含まれる場合、それらの関数の動作を保つために最初の chunk から評価されます。ALL を指定しない場合、AFTER は開始した chunk までしか評価されず、以降の chunk では UNTIL のみが評価されます。開始位置より前の終了一致は、やはり影響しません。 例: number >= 3 となる最初の行から始まる最初の 3 行:
number >= 2 となる最初の行から、number >= 6 となる最初の行 (exclusive) までの行:
n を指定しない場合、AFTER に一致した位置からストリームの終端まで (または UNTIL まで) のすべての行が返されます:
n を指定せず UNTIL のみを指定した場合、範囲は最初に AFTER に一致した箇所から、その位置以降で最初に UNTIL に一致した箇所までとなります:
開始位置より前の UNTIL 一致は無視されます。ここでは number = 1 は影響せず、範囲は number = 6 の直前で終了します:
一致した各行の後に2行を出力し、重複部分は重複して出力しません:
ALL と UNTIL を併用した場合、開いた各範囲は n 行に達した時点、または次に UNTIL に一致した時点のいずれか早い方で終了します。ここでは 6 で開いた範囲が number = 7 によって打ち切られます:
n を指定しない場合、UNTIL の一致により現在の範囲が閉じられ、その後の AFTER の一致によって新しい範囲が開かれます。以降に UNTIL の一致がなければ、その範囲は終端まで続きます:
n も UNTIL も指定しない場合、開いた各範囲はストリームの終端まで続くため、AFTER start_expr ALL は AFTER start_expr と同じ行を返します。
  • WITH TIES、小数または負数の LIMIT/OFFSET、および OFFSET は、AFTER/UNTIL と併用できません。
  • AFTER/UNTIL を使用すると、予備的な LIMIT pushdown は無効になります。
  • AFTER と UNTIL は、その後に境界式が続く場合にのみキーワードとして認識されます。そのため、after または until という名前の識別子も行数として使用できます (LIMIT after、LIMIT after BY x) 。両方に解釈できる場合はキーワードが優先されます。LIMIT after(2) は範囲指定の LIMIT AFTER (2) として解釈されます。after という名前の関数を呼び出すには、LIMIT (after(2)) と記述します。
UNTIL のみを指定した場合、ストリームの先頭から条件が true となる最初の行までの行を返します。
n を指定した場合、UNTIL のみでもストリームの先頭から最大 n 行が返され、最初に一致した時点で停止する動作は変わりません:
範囲は LIMIT BY の後に指定でき、その場合は LIMIT BY によって残された行に適用されます:

注意事項

非決定論的な結果: ORDER BY 句がない場合、返される行は不定であり、クエリを実行するたびに異なる可能性があります。 サーバー側の制限: 返される行数は、limit 設定の影響を受ける場合もあります。

関連項目

  • LIMIT BY — 値の各グループごとに行数を制限します。各カテゴリ内の上位 N 件の結果を取得する場合に便利です。
最終更新日 2026年9月26日