Access データベース クエリ ページネーション方法

データベースに多くのレコードがある状況では、クエリを実行するときにページングが必要です. 以下では、Access データベースの 2 つのページング方法について説明します. 他のデータベースには、より良い方法があるようです. ここでは、Access データベースについてのみ説明します.

1 アクセスクエリ結果のページネーション方法 1

1.1 方法

ページあたりのレコード数を CntPerPage とすると、ページ 1 のクエリ結果を取得するには、次の SQL ステートメントを使用します。

SELECT * FROM (
SELECT TOP CntPerPage * FROM(
SELECT TOP Page*CntPerPage * FROM TableName WHERE Query_Conditionm ORDER BY OrderField
) ORDER BY OrderField DESC
) ORDER BY OrderField

このうち、TableName はテーブル名、Query_Condition はクエリ条件、OrderField はソートに使用するフィールド名です。

1.2 原則

3 ステップ クエリのネストされた使用:
クエリの最初のステップ: 現在のページと以前のすべてのページのレコードをクエリし、並べ替えフィールドに従って降順に並べ替えます。

SELECT TOP Page*CntPerPage * FROM TableName WHERE Query_Conditionm ORDER BY OrderField

クエリの 2 番目のステップ: クエリしたレコードの最初の CntPerPage レコードをクエリします (降順で並べ替えます) (降順を維持します)。これらはすべて Page のレコードです。

SELECT TOP CntPerPage * FROM( 第一步查询结果 ) ORDER BY OrderField DESC

クエリの 3 番目のステップ: クエリの前のステップでは、Page ページのすべてのレコードを実際にクエリしましたが、それらは降順で並べられています. 3 番目のステップは、取得したばかりのデータを正の順序に変更するだけです. 順序が不要な場合、またはプログラム内に他のデータ並べ替えプロセスがある場合は、この手順を省略できます。

SELECT * FROM ( 第二步查询结果 ) ORDER BY OrderField

1.3 例

Student テーブルで、年齢が 20 歳未満のすべてのレコードをクエリし、名前で並べ替え、ページあたりのレコード数が 100 で、5 ページのクエリ結果を取得するには、次の SQL ステートメントを使用します。

SELECT * FROM (SELECT TOP 100 * FROM( SELECT TOP 500 * FROM Student  WHERE age<20 ORDER BY name ) ORDER BY name DESC) ORDER BY name

2 インターネットでよく使われる NOT IN メソッド

これはウェブでページネーションの方法を検索したときに出てくる最も一般的な方法です。
方法:

SELECT TOP CntPerPage * FROM TableName WHERE Query_Conditionm AND id NOT IN (
SELECT TOP (Page-1)*CntPerPage id FROM TableName WHERE Query_Conditionm ORDER BY id
) ORDER BY id

原則:
2 段階のクエリ:
ステップ 1: このページの前にすべての適格なレコード ID を選択する

SELECT TOP (Page-1)*CntPerPage id FROM TableName WHERE Query_Conditionm ORDER BY id

ステップ 2: クエリ条件「id は、今選択した id クエリ結果にありません」を追加し、最初の CntPerPage レコードを取得して、クエリ結果が前の Page-1 ページのすべてのデータをフィルタリングするようにしてから、最初のページ ページ上のすべてのレコード。

SELECT TOP CntPerPage * FROM TableName WHERE Query_Conditionm AND id NOT IN (第一步查询结果) ORDER BY id

3 ページング クエリの効率

実際のテスト効率はどちらも似たようなものですが、個人的には後者のNOT IN判定の効率はあまり高くないほうがいいと思いますので、レコード数が比較的少ない場合は前者の方が効率的だと思います。大きい。

Supongo que te gusta

Origin blog.csdn.net/hangl_ciom/article/details/98473409
Recomendado
Clasificación