MySQL/Oracleなどのデータベースのページング処理

2009/09/08 18:29Update
TAGS: MySQL | Oracle | Mssql | ページング | データベース | SQL | top | limit | row_number()

本文は、MySQLやMssql、Oracleなどのデータベースのページング処理のやり方について解説します。

ページング処理について


データベースクエリで、大量のデータから必要なだけを抽出する手法は「ページング」処理といいます。
例えば、Googleなどの検索サイトでは、あるキーワードを入力し、検索をかけると、「約 1345,000 件中 1 - 10 件目 (0.37 秒) 」のような文字が表示され、1ページ目の10件のデータだけが表示されます。
1345,000件のデータもあるのに、本当に見せてくれるのはわずか10件です。
このように、コンピュータのメモリなどの制限で、一回の検索ですべてのデータを取り出すのはまず無理で、必要もありません。

1ページ目の表示は、1~10件のデータだけを取得し、
2ページ目の表示は、11~20件のデータだけを取得すればよいわけです。

これはいわゆる「ページング」処理です。

MySQLのページング処理


MySQLデータベースでは、limitキーワードでページング処理を行います。
select * from some_table limit 5,10; #6~15行のデータを返します
select * from  some_table limit  0,5; #先頭5行のデータを返します
select * from  some_table limit  5; #先頭5行のデータを返します

Mssql 2000のページング処理


Mssql 2000データベースでは、topキーワードでページング処理を行います。
※2005以降のバージョンでは、rownumもサポートされています。
select top 10 * from some_table
where id not in (select id from some_table where id > 5 ); //6~15行のデータを返します
※10:10レコード数
※5:5行目から

Oracleのページング処理


①rownumキーワードで
SELECT * FROM(
    SELECT a.*, ROWNUM  num
    FROM
        (SELECT * FROM some_table) a
    WHERE
        ROWNUM <= 15)
WHERE num >= 5;
--5~15行のデータを返します

②row_number()分析関数で
SELECT a.* FROM(
    SELECT t.*,row_number() over(ORDER BY o_id) AS num
    FROM some_table t
) a
WHERE num BETWEEN 5 AND 15;
--5~15行のデータを返します

有关作者
Syboos.jp編集長システム設計や開発、保守運営などを行ってます。オープンソース技術に興味があります。

Sponsored Link


Comments