Oracleページングの書き方

PHPz
リリース: 2023-04-21 10:57:13
オリジナル
1941 人が閲覧しました

Oracle ページングは​​、特に Web アプリケーションや API を開発する場合に非常に一般的な要件です。ページネーションにより、サーバー リソースの使用量が効果的に削減され、より使いやすいエクスペリエンスがユーザーに提供されます。では、Oracle ページングは​​どのように記述すべきでしょうか?以下に紹介しましょう。

まず第一に、ニーズを明確にする必要があります。大量の注文情報が含まれる、orders という名前の注文テーブルがあるとします。ページごとの固定アイテム数に従って、指定されたページ番号データをクエリする必要があります。たとえば、各ページには 10 個の品目が表示され、3 ページ目の注文データがクエリされます。では、どうすればそれを達成できるのでしょうか?次に、いくつかの実装方法を詳しく紹介します。

1. サブクエリを使用してページングを実装する

サブクエリは、Oracle でページングを実装する一般的な方法であり、ROWNUM を使用して実現できます。基本的な考え方は、内部クエリで ROWNUM を使用して並べ替えを行い、次に外部クエリで ROWNUM を使用してページング操作を行うことです。コードは次のとおりです。

SELECT * FROM (
  SELECT orders.*, ROWNUM rnum
  FROM (
    SELECT * FROM orders
    ORDER BY order_date DESC
  ) orders
  WHERE ROWNUM <= 30
) WHERE rnum >= 21;
ログイン後にコピー

上記のコードでは、クエリ ステートメントには 3 レベルのネストが含まれています。最も外側の SELECT ステートメントは、WHERE 句を使用して ROWNUM をフィルタリングし、ページング操作を実装します。内部クエリ ステートメントには、主にデータの並べ替えに使用される ORDER BY ステートメントが含まれています。最も内側の SELECT ステートメントでは、クエリを実行するテーブルの順序を指定します。

2. ROW_NUMBER() 関数を使用してページングを実装する

ページングを実装するもう 1 つの方法は、ROW_NUMBER() 関数を使用することです。このメソッドは、指定した列で並べ替える必要がある場合に非常に便利です。コードは次のとおりです。

SELECT *
FROM (
  SELECT orders.*,
         ROW_NUMBER() OVER(ORDER BY order_date DESC) AS row_num
  FROM orders
) WHERE row_num BETWEEN 21 AND 30;
ログイン後にコピー

上記のコードでは、ROW_NUMBER() 関数を使用して新しいフィールド row_num を生成します。このフィールドは、並べ替え後の各レコードの位置を指定するために使用されます。 WHERE 句を使用すると、指定した範囲内のレコードをフィルタリングできます。

3. OFFSET-FETCH を使用してページングを実装する

Oracle 12c 以降では、OFFSET-FETCH ステートメントを使用する新しいページング実装方法が導入されました。前の 2 つの方法と比較して、この方法はより直観的かつ簡潔であり、コードは読みやすく、理解しやすくなっています。コードは次のとおりです。

SELECT *
FROM orders
ORDER BY order_date DESC
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
ログイン後にコピー

上記のコードでは、OFFSET-FETCH ステートメントを使用してページング操作を実装しています。 OFFSET はオフセット、つまりどの行からクエリを開始するかを指定するために使用され、FETCH はクエリする行数を指定するために使用されます。この方法により、クエリ ステートメントが大幅に簡素化され、クエリの効率が向上します。

要約すると、この記事では、サブクエリ、ROW_NUMBER() 関数、OFFSET-FETCH ステートメントの使用を含む、Oracle ページングを実装する 3 つの方法を紹介します。それぞれの方法には適用可能なシナリオがあり、具体的な実装方法も若干異なります。さまざまなニーズに応じて、Oracle ページングを実装するための対応する方法を選択できます。

以上がOracleページングの書き方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート