ywork2020.com

Title

指定件数のデータを抽出する

目次 (INDEX)

LIMIT とは

ここで説明する LIMIT とは次の語句からなる SQL です。
limit
読み: リミット
意味: 限度、限界

目次に戻る

LIMIT 句の概要

これは MySQL にレコードの抽出件数を指定できます。
つまり、何行目から何行目までを取り出すかという意味になります。

これは ORDER BY 句に続けて書くことになります。

目次に戻る

サンプル テーブルの構造

データ抽出用のサンプルテーブルが必要でしたので事前に作成しています。
ここではテーブル作成までのクエリを簡易的に書いておきます。

現在、データベースにはサンプルとして以下に示す構造の japan テーブルを作成しており、 そのテーブルに 47都道府県のデータを登録した状態になっています。

サンプルコード: テーブルの作成

サンプルテーブルを以下のクエリで作成しました。

CREATE TABLE japan(
	県番号 int(11),
	都道府県 varchar(10),
	県庁所在地 varchar(10),
	地方 varchar(10)
);
カラム1
(県番号)
カラム2
(都道府県)
カラム3
(県庁所在地)
カラム4
(地方)
データデータデータデータ
データデータデータデータ

目次に戻る

サンプルコードと実行結果

ここからは実際に稼働しているデータベースに接続してクエリを実行していきます。 下記に配置された各ボタンをクリックすると、ボタンに書かれているサンプルクエリを実行して結果を表示します。

サンプルコード: SQL (SELECT 文の基本的な使い方)

SELECT * FROM テーブル名;

これはテーブルデータを抽出するための基本構文です。
指定したテーブルのデータを全件、全フィールドで抽出します。 この単純なクエリはデータ量が少ない場合や開発段階では利用することが多いと思いますが、実際の運用では使いません。

実行:

サンプルコード: SQL (LIMIT 句で抽出件数を指定する)

SELECT * FROM テーブル名 ORDER BY カラム名 LIMIT 抽出開始行, 抽出行数;
実行:

説明:
サンプルを実行して確認していただきたいのですが、抽出を開始する行番号はインデックス値となります。
つまり 0 からスタートする番号なので 0 を指定すると 1行目ということになります。
サンプルではインデックス番号 10 から 20 件のレコードを取り出すという意味になりますので、実際に取り出されるのは 11 行目スタートで 20件の取り出しということになり、つまりは県番号 11 から 30 までが抽出されることになります。

目次に戻る

他のデータベースでの書き方

MySQL の LIMIT 句は他のデータベースでは使えませんので、 補足として MySQL 以外のデータベースでの抽出結果として近しいサンプルクエリも参考として記載しておきます。

SQL Server の場合
SELECT TOP (20) カラム名A FROM テーブル名 ORDER BY カラム名A; (件数指定)
SELECT TOP (20) PERCENT カラム名A FROM テーブル名 ORDER BY カラム名A; (パーセント指定)

Oracleの場合
SELECT * FROM テーブル名 WHERE ROWNUM BETWEEN 先頭行 AND 最終行;

PostgreSQLの場合
SELECT * FROM テーブル名 ORDER BY カラム名 OFFSET 先頭行 LIMIT 最終行;

目次に戻る

SQL の仕様上の注意点

※ SQL の予約句はアルファベットの大文字と小文字を区別しませんが、 任意で作成したデータベースやテーブル、カラムの名前などは区別されるので注意が必要です。

目次に戻る