データ テーブルに数万のデータがある場合、テーブル内のすべてのデータを一度にクエリすると、データが返される速度が低下し、データベース サーバーに大きな負荷がかかります。この時点で、LIMIT キーワードを使用して、クエリ結果によって返されるレコードの数を制限できます。
LIMIT は MySQL の特別なキーワードで、クエリ結果がどのレコードから表示され、合計で何レコード表示されるかを指定するために使用されます。
LIMITキーワードの使い方には、初期位置を指定する方法、初期位置を指定しない方法、OFFSETと組み合わせて使用する方法の3つがあります。
初期位置を指定
LIMIT キーワードは、照会結果を表示するレコードと表示するレコード数を指定できます。
初期位置を指定する LIMIT の基本的な構文形式は次のとおりです。
LIMIT 初期位置、レコード数
このうち、「初期位置」は表示を開始するレコードを示し、「レコード数」は表示されたレコードの数を示します。最初のレコードの位置は 0 で、2 番目のレコードの位置は 1 です。後続のレコードの後に類推が続きます。
注: LIMIT の後の両方のパラメーターは、正の整数でなければなりません。
例 1
tb_students_info テーブルで、LIMIT 句を使用して、4 番目のレコードから始まる 5 つのレコードを返す SQL ステートメントと実行結果は次のとおりです。
mysql> SELECT * FROM tb_students_info LIMIT 3,5;
+----+-------+---------+------+------+--------+------------+
| id | name | dept_id | age | sex | height | login_date |
+----+-------+---------+------+------+--------+------------+
| 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |
| 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 |
| 6 | John | 2 | 21 | M | 172 | 2015-11-11 |
| 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 |
| 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 |
+----+-------+---------+------+------+--------+------------+
5 rows in set (0.00 sec)
結果からわかるように、ステートメントは 4 番目のレコードから始まる 5 つのレコードを返します。LIMIT キーワードの後の最初の数字「3」は 4 行目から開始することを意味し (レコード位置は 0 から始まり、4 行目の位置は 3)、2 つ目の数字 5 は返される行数を意味します。
初期位置が指定されていません
LIMIT キーワードで開始位置を指定しない場合、最初のレコードから表示されます。表示されるレコードの数は、LIMIT キーワードによって指定されます。
初期位置を指定しない LIMIT の基本的な構文形式は次のとおりです。
LIMIT 件のレコード
ここで、「レコード数」は、表示されたレコードの数を示す。「レコード数」の値がクエリ結果の総数に満たない場合、最初のレコードから指定した数のレコードが表示されます。「レコード数」の値がクエリ結果の総数より大きい場合、クエリされたすべてのレコードが直接表示されます。
例 2
tb_students_info テーブルのクエリ結果の最初の 4 行を表示します。SQL ステートメントと実行結果は次のとおりです。
mysql> SELECT * FROM tb_students_info LIMIT 4;
+----+-------+---------+------+------+--------+------------+
| id | name | dept_id | age | sex | height | login_date |
+----+-------+---------+------+------+--------+------------+
| 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 |
| 2 | Green | 3 | 23 | F | 158 | 2016-10-22 |
| 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 |
| 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |
+----+-------+---------+------+------+--------+------------+
4 rows in set (0.00 sec)
結果には 4 つのレコードのみが表示されます。これは、「LIMIT 4」が表示されるレコードの数を 4 に制限していることを示しています。
例 3
tb_students_info テーブルのクエリ結果の最初の 15 行を表示します。SQL ステートメントと実行結果は次のとおりです。
mysql> SELECT * FROM tb_students_info LIMIT 15;
+----+--------+---------+------+------+--------+------------+
| id | name | dept_id | age | sex | height | login_date |
+----+--------+---------+------+------+--------+------------+
| 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 |
| 2 | Green | 3 | 23 | F | 158 | 2016-10-22 |
| 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 |
| 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |
| 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 |
| 6 | John | 2 | 21 | M | 172 | 2015-11-11 |
| 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 |
| 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 |
| 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 |
| 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 |
+----+--------+---------+------+------+--------+------------+
10 rows in set (0.26 sec)
結果に表示されるレコードは 10 件のみです。LIMIT キーワードは 15 レコードの表示を指定していますが、照会結果には 10 レコードしかありません。したがって、データベース システムでは、これら 10 件のレコードがすべて表示されます。
1 つのパラメーターを使用する LIMIT は、クエリ結果の最初の行から開始することを指定し、唯一のパラメーターは返される行の数を示します。つまり、"LIMIT n" は "LIMIT 0, n" と同じ結果を返します。2 つのパラメーターを指定した LIMIT は、任意の位置から始まる指定された行数のデータを返します。
LIMIT と OFFSET の組み合わせ
LIMIT は OFFSET と組み合わせて使用できます。構文は次のとおりです。
LIMIT レコード数 OFFSET 初期位置
このパラメーターは LIMIT 構文のパラメーターと同じ意味を持ち、「開始位置」は表示を開始するレコードを指定し、「レコード番号」は表示されるレコードの数を示します。
例 4
tb_students_info テーブルで、LIMIT OFFSET を使用して、4 番目のレコードから行番号が 5 のレコードを返す SQL ステートメントと実行結果は次のとおりです。
mysql> SELECT * FROM tb_students_info LIMIT 5 OFFSET 3;
+----+-------+---------+------+------+--------+------------+
| id | name | dept_id | age | sex | height | login_date |
+----+-------+---------+------+------+--------+------------+
| 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |
| 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 |
| 6 | John | 2 | 21 | M | 172 | 2015-11-11 |
| 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 |
| 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 |
+----+-------+---------+------+------+--------+------------+
5 rows in set (0.00 sec)
結果からわかるように、ステートメントは 4 番目のレコードから始まる 5 つのレコードを返します。つまり、"LIMIT 5 OFFSET 3" は 4 番目のレコードから始まる次の 5 レコードを取得することを意味し、"LIMIT 3, 5" によって返される結果は同じです。
ダーク ホース プログラマー MySQL データベース エントリから習熟まで、mysql のインストールから高度な mysql まで、mysql の最適化をすべて網羅