MySQL の LIMIT

ここでは MySQL の LIMIT 句についてご説明します。

MySQL の LIMIT の使い方

MySQL の SELECT 文では、LIMIT句を使って、結果セットが返すレコード数を指定することができます。

ページネーションなどで、結果セットの一部のデータのみを取得したいような時に便利です。

よく使う基本の SELECT 文の構文は次の通りで、LIMIT 句は以下の位置に追加します。

SELECT select_expr
[ FROM table_references ] 
[ WHERE where_condition ] 
[ GROUP BY {col_name | expr | position} ] 
[ HAVING where_condition ] 
[ ORDER BY {col_name | expr | position} [ ASC | DESC ] ]
[ LIMIT {[offset,] row_count | row_count OFFSET offset} ];

LIMIT 句では [offset,] row_count と row_count OFFSET offset の 2 通り、指定する方法があります。

row_count は SELECT 文が返すレコード数で、offset は何番目のレコードから返すかを指定します。

offset のインデックスは 0 から始まるので、offset に 10 と指定すると、11 番目のレコードからということになります。


MySQL の LIMIT を使ってレコードを取得する

それでは、実際に LIMIT 句を使ってデータを取得してみましょう。

次のスクリプトを実行して作った test テーブルがあります。

CREATE TABLE test (
    test_id INT NOT NULL AUTO_INCREMENT,
    test_data VARCHAR(10) NOT NULL,
	PRIMARY KEY (test_id)
);

INSERT INTO test
		(test_data)
	VALUES 
		('data1'),('data2'),('data3'),('data4'),('data5'),
        ('data6'),('data7'),('data8'),('data9'),('data10'),
		('data11'),('data12'),('data13'),('data14'),('data15'),
        ('data16'),('data17'),('data18'),('data19'),('data20');

test_id が 1 ~ 20 までのデータが入っています。

MySQL の LIMIT 1


例えば、この test テーブルを降順にソートした結果の最初から 5 レコード取り出したい時は次のようにできます。

SELECT 	* 
FROM 	test
ORDER BY test_id DESC
LIMIT 5;

[実行結果]

MySQL の LIMIT 2

test_id の降順なので 20 から 16 まで、5 レコードが取得できています。


test テーブルを降順にソートした結果の、11 レコード目から 5 レコード取り出したい時は次のようにできます。

offset を使って何番目のレコードから返すかを指定するのでしたが、インデックスは 0 から数えるので、OFFSET には 11 ではなく 10 を指定します。

SELECT 	* 
FROM 	test
ORDER BY test_id DESC
LIMIT 5 OFFSET 10;

[実行結果]

MySQL の LIMIT 3

test_id の降順なので 20 から 11 までの 10 レコードをスキップして、11 番目のレコードの test_id = 10 から 6 までの 5 レコードが取得できていますね。


次のように指定しても同じ結果になります。

SELECT 	* 
FROM 	test
ORDER BY test_id DESC
LIMIT 10, 5;

[実行結果]

MySQL の LIMIT 4


以上、MySQL の LIMIT 句についてご説明しました。

© 2024 MySQL 入門