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についてまとめました。
記事の内容をまとめると、下記のようになります。
・OFFSETを設定して、指定したレコード行から指定したレコード数を返すことができた。
・カンマを使うことでも、OFFSETを指定することができた。
・ORDERを使うことで、並べ替えた後に指定レコード数を取得できた。
コメント