「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Oracleクエリの結果を効率的に制限およびオフセットする方法は?

Oracleクエリの結果を効率的に制限およびオフセットする方法は?

2025-04-20に投稿しました
ブラウズ:254

How to Efficiently Limit and Offset Query Results in Oracle?

Oracleクエリで行の制限と相殺をマスターする

Oracleの rownum pseudocolumnは、結果セット制限に頻繁に使用され、注文と組み合わせると独自の課題を提示します。並べ替え後に適用されるmysqlの lime 句とは異なり、 rownum の前に句の前に順序で処理されます。 これは、単に rownum を使用することを意味します。

標準的なアプローチ(すべてのOracleバージョン):

mysqlの

lime

機能に相当するものを達成するには、ネストされたクエリを使用します:

select * から ( select * Empから SAL DESCによる注文 )) ここでrownum SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM rownum

フィルターを適用し、上位5の最高給与が返品されるようにします。

結果の相殺と制限:

より洗練されたコントロールの場合、オフセットと制限の両方を指定するには、少し複雑なクエリが必要です。

select * から ( a。*、rownum rnumを選択します から ( select *-句ごとに注文したメインクエリ some_tableから some_columnで注文します )a ここで、rownum =:min_row_to_fetch;

SELECT *
FROM (
    SELECT a.*, ROWNUM rnum
    FROM (
        SELECT *  -- Your main query with ORDER BY clause
        FROM some_table
        ORDER BY some_column
    ) a
    WHERE ROWNUM = :MIN_ROW_TO_FETCH;
and

:min_row_to_fetch を希望の上限と下限に置き換えます。 これにより、注文後に特定の範囲内に行が取得されます。 Oracle 12c and Beyond:

fetch

句: Oracle 12c(および後のバージョン)は、 fetch

句を使用して、よりエレガントなソリューションを提供します。

- 最初の10行を取得します select * いつかから 名前で注文します 最初の10行のみを取得します。 - 行20-30を取得します select * いつかから 名前で注文します 20行をオフセットしてください

fetch
句は、結果を制限およびオフセットするためのよりクリーンで読みやすい方法を提供し、Oracle 12c以降の優先方法になります。  古いバージョンの場合、ネストされたクエリアプローチが必要です。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3