MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで一度にN行だけデータを取得する方法|LIMIT句の使い方を解説

MySQLで一度にN行のみフェッチする方法

MySQLで大量のデータを扱う際、テーブル内のすべてのレコードを一括で取得するのではなく、一度に指定した行数(N行)だけを取得したいケースはよくあります。ページネーションやパフォーマンスの最適化などにおいて非常に便利な機能です。

このような場合には、LIMIT 句を使用します。基本的な構文は以下のとおりです。

SELECT * FROM テーブル名 LIMIT 開始位置, 行数;

LIMIT の後にカンマ区切りで2つの値を指定できます。1つ目は取得開始位置(オフセット)、2つ目は取得する最大行数です。たとえば LIMIT 0, 10 と書けば、「先頭行から数えて10行」を取得することになります。


サンプルテーブルの作成

まず、動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable
   (
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   Name varchar(20)
   );
Query OK, 0 rows affected (0.25 sec)

次に、INSERT文を使って複数のレコードを挿入します。

mysql> insert into DemoTable(Name) values('John');
Query OK, 1 row affected (0.08 sec)

mysql> insert into DemoTable(Name) values('Larry');
Query OK, 1 row affected (0.07 sec)

mysql> insert into DemoTable(Name) values('Bob');
Query OK, 1 row affected (0.08 sec)

mysql> insert into DemoTable(Name) values('Sam');
Query OK, 1 row affected (0.07 sec)

mysql> insert into DemoTable(Name) values('Mike');
Query OK, 1 row affected (0.07 sec)

mysql> insert into DemoTable(Name) values('David');
Query OK, 1 row affected (0.06 sec)

mysql> insert into DemoTable(Name) values('Carol');
Query OK, 1 row affected (0.05 sec)

mysql> insert into DemoTable(Name) values('Ramit');
Query OK, 1 row affected (0.06 sec)

mysql> insert into DemoTable(Name) values('Adam');
Query OK, 1 row affected (0.03 sec)

mysql> insert into DemoTable(Name) values('Chris');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable(Name) values('Robert');
Query OK, 1 row affected (0.06 sec)

mysql> insert into DemoTable(Name) values('James');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable(Name) values('Jace');
Query OK, 1 row affected (0.05 sec)

テーブル内の全レコードを確認する

SELECT文でテーブルの内容をすべて表示してみます。

mysql> select *from DemoTable;

実行結果は以下のとおりです。

+----+--------+
| Id | Name   |
+----+--------+
|  1 | John   |
|  2 | Larry  |
|  3 | Bob    |
|  4 | Sam    |
|  5 | Mike   |
|  6 | David  |
|  7 | Carol  |
|  8 | Ramit  |
|  9 | Adam   |
| 10 | Chris  |
| 11 | Robert |
| 12 | James  |
| 13 | Jace   |
+----+--------+
13 rows in set (0.00 sec)

合計13件のレコードが登録されていることがわかります。

LIMIT句を使って先頭から10行だけ取得する

それでは、一度に取得する行数を制限するクエリを実行してみましょう。ここでは、先頭から10行だけを取得します。

mysql> select *from DemoTable LIMIT 0,10;

実行結果は以下のとおりです。

+----+-------+
| Id | Name  |
+----+-------+
|  1 | John  |
|  2 | Larry |
|  3 | Bob   |
|  4 | Sam   |
|  5 | Mike  |
|  6 | David |
|  7 | Carol |
|  8 | Ramit |
|  9 | Adam  |
| 10 | Chris |
+----+-------+
10 rows in set (0.00 sec)

このように、LIMIT 0, 10 を指定することで、テーブル全体ではなく先頭の10行のみを取得できました。

オフセットを活用した応用例

LIMIT の1つ目の値(オフセット)を変更すれば、任意の位置から行を取得することも可能です。たとえば、11行目から5行を取得したい場合は次のように記述します。

mysql> select *from DemoTable LIMIT 10,5;

また、MySQLでは LIMIT 行数 OFFSET オフセット という書き方もサポートされています。

mysql> select *from DemoTable LIMIT 5 OFFSET 10;

どちらも同じ結果になりますので、可読性の観点から好みの方を選択するとよいでしょう。ページング処理を実装する際には、このオフセットの考え方が非常に役立ちます。

  1. MySQLで現在の日付・時刻を挿入する方法を解説

    MySQLで現在の日付や時刻をテーブルに挿入したい場合、NOW()関数を使用するのが最も簡単な方法です。この記事では、実際の例を通して具体的な手順をわかりやすく解説します。1. テーブルを作成するまず、日付・時刻を格納するためのテーブルを作成します。テーブルの作成にはCREATE TABLEコマンドを使用します。mysql> create table CurrentDateTime -> ( -> CurrentTime datetime -> ); Query OK, 0 rows affected (1.14 sec)ここでは「CurrentDateTime」という

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected