順序付けられたOracleクエリの結果セットを制限
oracleのROWNUM
pseudocolumnはmysqlのLIMIT
句とは異なります。 ROWNUM
は、前に>句が処理される前に割り当てられます。 したがって、ORDER BY
を直接使用すると、ROWNUM
の順序付け後にが制限されません。これを達成するには、サブクエリを使用します:
<code class="language-sql">SELECT * FROM (SELECT * FROM emp ORDER BY sal DESC) WHERE ROWNUM <= n;</code>
テーブルを最初に注文します。次に、外部クエリはemp
を使用して、出力を上部sal
行に制限します。
ROWNUM
上限と下限の両方を必要とするより複雑なシナリオの場合、ネストされたサブクエリが必要です。
n
Oracle 12cおよびそれ以降
<code class="language-sql">SELECT * FROM (SELECT a.*, ROWNUM rnum FROM (SELECT * FROM your_table ORDER BY your_column) a WHERE ROWNUM <= :MAX_ROW_TO_FETCH) WHERE rnum >= :MIN_ROW_TO_FETCH;</code>
Oracle 12c(および後のバージョン)は、と:
を使用して、より合理化された構文を提供します。
これにより、これにより、FETCH FIRST
が注文した後、結果が最初の10行に直接制限されます。 オフセットを指定するには(例:最初の20行をスキップして次の10を取得します)、OFFSET
句を使用してください:
<code class="language-sql">SELECT * FROM sometable ORDER BY name FETCH FIRST 10 ROWS ONLY;</code>
包括的な例とパフォーマンス最適化戦略については、公式のOracleドキュメントを参照してください。
以上が注文後にOracleクエリの行を制限する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。