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;
どちらも同じ結果になりますので、可読性の観点から好みの方を選択するとよいでしょう。ページング処理を実装する際には、このオフセットの考え方が非常に役立ちます。
-
MySQLで現在の日付・時刻を挿入する方法を解説
MySQLで現在の日付や時刻をテーブルに挿入したい場合、NOW()関数を使用するのが最も簡単な方法です。この記事では、実際の例を通して具体的な手順をわかりやすく解説します。1. テーブルを作成するまず、日付・時刻を格納するためのテーブルを作成します。テーブルの作成にはCREATE TABLEコマンドを使用します。mysql> create table CurrentDateTime -> ( -> CurrentTime datetime -> ); Query OK, 0 rows affected (1.14 sec)ここでは「CurrentDateTime」という
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected