ホームページ >データベース >mysql チュートリアル >注文後にOracleクエリで行の結果を制限する方法は?

注文後にOracleクエリで行の結果を制限する方法は?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-25 08:37:10515ブラウズ

How to Limit Row Results in Oracle Queries After Ordering?

Oracle データベースでのソート後の結果の行数を制限します

多くのデータベース ユーザーは、ソート後に特定の範囲の行を取得するために MySQL の LIMIT 句に依存しています。ただし、Oracle 自体は同様の機能をサポートしていません。 Oracle は、ORDER BY の前に計算される ROWNUM 疑似列を使用します。この動作により、並べ替えに基づいて行数を制限しようとすると、予期しない結果が発生する可能性があります。

Oracle で MySQL のような制限機能を実現するための 1 つの解決策は、サブクエリを使用することです。次の例を考えてみましょう:

<code class="language-sql">SELECT *
FROM (
    SELECT *
    FROM emp
    ORDER BY sal DESC
)
WHERE ROWNUM <= 5;</code>

このクエリは、sal 列の降順で最初の 5 行を取得します。

さらに柔軟性を高めるために、次の方法を使用できます:

<code class="language-sql">SELECT *
FROM (
    SELECT *, ROWNUM AS rnum
    FROM (
        SELECT *
        FROM emp
        ORDER BY sal DESC
    ) AS a
)
WHERE rnum >= :MIN_ROW_TO_FETCH AND rnum <= :MAX_ROW_TO_FETCH;</code>

このサブクエリを使用すると、行を取得するための下限と上限を指定できます。

さらに、Oracle 12c (12.1) では新しい構文が導入されています:

<code class="language-sql">-- 获取前10个结果
SELECT *
FROM sometable
ORDER BY name
FETCH FIRST 10 ROWS ONLY;

-- 获取第20-30个结果行
SELECT *
FROM sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;</code>

この構文は、並べ替えに基づいて結果行の数を制限するより明確な方法を提供します。

以上が注文後にOracleクエリで行の結果を制限する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。