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 までのデータが入っています。
例えば、この test テーブルを降順にソートした結果の最初から 5 レコード取り出したい時は次のようにできます。
SELECT *
FROM test
ORDER BY test_id DESC
LIMIT 5;
[実行結果]
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;
[実行結果]
test_id の降順なので 20 から 11 までの 10 レコードをスキップして、11 番目のレコードの test_id = 10 から 6 までの 5 レコードが取得できていますね。
次のように指定しても同じ結果になります。
SELECT *
FROM test
ORDER BY test_id DESC
LIMIT 10, 5;
[実行結果]
以上、MySQL の LIMIT 句についてご説明しました。