ホームページ >データベース >mysql チュートリアル >注文後にOracleクエリで行の結果を制限する方法は?
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 サイトの他の関連記事を参照してください。