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 サイトの他の関連記事を参照してください。