MySQLでLIMITを使って取得するレコード数を制限する方法!

MySQL MySQL

MySQLでLIMITを使って、取得するレコードを制限する方法について書いています。
SELECT文の実行時にLIMITを使うことで、取得してくるレコード数を制限することができます。

公式の記事には、SELECTのページに書いていました。
載せているSQLについては、MySQLのバージョン8.0.33を使って動作を確認しています。

MySQLでLIMITを使う方法

MySQLでLIMITを使うと、取得するレコード数を制限できます。
LIMITは下記のように使うことができます。

SELECT * FROM テーブル名 LIMIT レコード数;

こうすると、FROMの後に書いたテーブルから、LIMITの後のレコード数を取得することができます。
SELECT文で取得したレコードから、指定したレコード数が返ってきます。

例えば、usersテーブルから3レコード取得する場合には、下記のようになります。

SELECT * FROM users LIMIT 3;

取得できたusersテーブルのレコードから先頭の3行が表示されます。

OFFSETを使う

LIMITと一緒に、OFFSETを使うことができます。
例えば、下記のように使います。

SELECT * FROM users LIMIT 2 OFFSET 3;

こうすると、usersテーブルをOFFSETで指定した「3」の後の4行目から取得することができます。
取得できるレコード数は、4行目からLIMITで指定した2レコードです。

カンマを使う

OFFSETをカンマで指定することもできます。
例えば、先ほどと同じSQLをカンマで書くと、下記のように使うことができます。

SELECT * FROM users LIMIT 3, 2;

LIMITで「3, 2」と指定していますが、これで3行目から2レコード取得できます。

LIMITで降順に取得したい

基本的には取得したレコードの先頭から、LIMITで指定したレコード数を取得できます。
レコードの順を制御したいときには、ORDERを使って並び替えた後にLIMITを指定すると良いです。

例えば、下記のように記載することができます。

SELECT * FROM users ORDER BY id DESC LIMIT 3;

こうすると、usersテーブルのidカラムを降順に並べた後に、3レコード取得できます。

LIMITを使うサンプル4つ

実際にMySQLでLIMITを使うサンプルSQLを4つ試してみました。

テストデータ

こちらのusersテーブルを使います。

CREATE TABLE users (
  id BIGINT NOT NULL AUTO_INCREMENT,
  name VARCHAR(128),
  birthday DATE,
  PRIMARY KEY (id)
);

データは下記のように10レコード入った状態です。

id name birthday
1 rieko 1973-04-17
2 tomo 1989-10-01
3 naoko 1982-01-10
4 tokio 1993-12-15
5 mitimasa 1980-03-20
6 jiro 2000-01-01
7 koji 1975-07-28
8 shinji 1983-03-30
9 makoto 1979-02-17
10 rika 1952-11-24

LIMITを使う

LIMITを使って、指定したレコード数を取得してみます。

SELECT * FROM users LIMIT 5;

こうすると、usersテーブルから5レコード取得できます。
SQLを実行すると、下記のようにレコードが返ってきました。

SELECT * FROM users LIMIT 5;
+----+----------+------------+
| id | name     | birthday   |
+----+----------+------------+
|  1 | rieko    | 1973-04-17 |
|  2 | tomo     | 1989-10-01 |
|  3 | naoko    | 1982-01-10 |
|  4 | tokio    | 1993-12-15 |
|  5 | mitimasa | 1980-03-20 |
+----+----------+------------+
5 rows in set (0.00 sec)

LIMITとOFFSETを使う

OFFSETを使って、usersテーブルからレコードを返す行を指定してみます。

SELECT * FROM users LIMIT 3 OFFSET 3;

こうすると、OFFSETが3なので、4行目から取得できます。
LIMITの後に3を指定しているので、3レコード返ってきます。

SQLを実行すると、下記のように指定したOFFSETからレコードが3つ返ってきました。

mysql> SELECT * FROM users LIMIT 3 OFFSET 3;
+----+----------+------------+
| id | name     | birthday   |
+----+----------+------------+
|  4 | tokio    | 1993-12-15 |
|  5 | mitimasa | 1980-03-20 |
|  6 | jiro     | 2000-01-01 |
+----+----------+------------+
3 rows in set (0.00 sec)

カンマでOFFSET指定する

OFFSETと返すレコードをカンマで指定することもできます。

SELECT * FROM users LIMIT 5, 3;

こうすると、「5」がOFFSETで6行目からレコードを取得できます。
取得する行数は「3」行になります。

SQLを実行すると、下記のように6行目から3レコード返ってきました。

mysql> SELECT * FROM users LIMIT 5, 3;
+----+--------+------------+
| id | name   | birthday   |
+----+--------+------------+
|  6 | jiro   | 2000-01-01 |
|  7 | koji   | 1975-07-28 |
|  8 | shinji | 1983-03-30 |
+----+--------+------------+
3 rows in set (0.00 sec)

LIMITして降順で取得する

降順でレコードを取得するには、ORDERした後にLIMITを使うと良いです。

SELECT * FROM users ORDER BY id DESC LIMIT 3;

こうすると、usersテーブルのidカラムの値が大きい順に並べて、3レコード取得できます。
SQLを実行すると、下記のようにレコードの後ろから3レコード取得できました。

mysql> SELECT * FROM users ORDER BY id DESC LIMIT 3;
+----+--------+------------+
| id | name   | birthday   |
+----+--------+------------+
| 10 | rika   | 1952-11-24 |
|  9 | makoto | 1979-02-17 |
|  8 | shinji | 1983-03-30 |
+----+--------+------------+
3 rows in set (0.01 sec)

MySQLのLIMITについてまとめ

今回はMySQLのLIMITについてまとめました。
記事の内容をまとめると、下記のようになります。

・LIMITを使うことで、指定したレコード数を取得することができる。
・OFFSETを設定して、指定したレコード行から指定したレコード数を返すことができた。
・カンマを使うことでも、OFFSETを指定することができた。
・ORDERを使うことで、並べ替えた後に指定レコード数を取得できた。

コメント

タイトルとURLをコピーしました