MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで最後の30行を取得する方法(ORDER BY DESCとLIMITの使い方)

MySQLでテーブルの最後の30行を取得したい場合は、ORDER BY DESC(降順ソート)とLIMIT 30を組み合わせるのが基本です。降順に並べ替えることで、最新(またはIDが大きい)レコードが先頭に来るため、先頭から30件を取り出すことで実質的に「最後の30行」が取得できます。

基本構文

SELECT * FROM テーブル名 ORDER BY カラム名 DESC LIMIT 30;

それでは、実際にサンプルテーブルを作成して動作を確認していきましょう。

1. テーブルの作成

まず、以下のようにテーブルを作成します。

mysql> create table DemoTable1567
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY
    -> );
Query OK, 0 rows affected (0.82 sec)

2. レコードの挿入

次に、INSERTコマンドを使って複数のレコードを挿入します。VALUESに空のかっこを並べることで、AUTO_INCREMENTにより自動的に連番が採番されます。

mysql> insert into DemoTable1567 values(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),();
Query OK, 37 rows affected (0.37 sec)
Records: 37  Duplicates: 0  Warnings: 0

この例では37件のレコードが登録されました。

3. 全レコードの確認

SELECT文ですべてのレコードを表示してみます。

mysql> select * from DemoTable1567;

実行結果は以下のとおりです。

+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
|  7 |
|  8 |
|  9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
| 21 |
| 22 |
| 23 |
| 24 |
| 25 |
| 26 |
| 27 |
| 28 |
| 29 |
| 30 |
| 31 |
| 32 |
| 33 |
| 34 |
| 35 |
| 36 |
| 37 |
+----+
37 rows in set (0.00 sec)

IDが1から37まで昇順で登録されていることがわかります。

4. 最後の30行を取得するクエリ

ここで本題のクエリです。ORDER BY Id DESCで降順に並べ替え、LIMIT 30で先頭の30件だけを取得します。

mysql> select * from DemoTable1567 order by Id DESC LIMIT 30;

実行結果は以下のとおりです。

+----+
| Id |
+----+
| 37 |
| 36 |
| 35 |
| 34 |
| 33 |
| 32 |
| 31 |
| 30 |
| 29 |
| 28 |
| 27 |
| 26 |
| 25 |
| 24 |
| 23 |
| 22 |
| 21 |
| 20 |
| 19 |
| 18 |
| 17 |
| 16 |
| 15 |
| 14 |
| 13 |
| 12 |
| 11 |
| 10 |
|  9 |
|  8 |
+----+
30 rows in set (0.00 sec)

補足:結果を昇順に並べ直すには

上記のクエリでは、結果が降順(37→8)で返ってきます。「最後の30行を昇順(古い順)で表示したい」という場合は、サブクエリを使って外側でもう一度ORDER BYを指定します。

mysql> select * from (
    ->   select * from DemoTable1567 order by Id DESC LIMIT 30
    -> ) AS t order by Id ASC;

このようにすることで、IDが8〜37の30行が昇順で取得できます。

まとめ

  • MySQLで末尾のN行を取得するには、「ORDER BY カラム名 DESC LIMIT N」を使用します。
  • 降順で取得した結果を昇順に戻したい場合は、サブクエリを利用します。
  • 大量データの場合は、ORDER BYで指定するカラムにインデックスを張っておくとパフォーマンスが向上します。
  1. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected

  2. MySQLで最新50件のレコードからランダムに5行だけ抽出する方法

    MySQLでテーブルの末尾(最新)50件の中から、さらにランダムに5行だけ取り出したい場合は、サブクエリと ORDER BY RAND() を組み合わせるのが効果的です。この記事では、実際にテーブルを作成しながら手順を解説します。1. サンプルテーブルを作成するまずは動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1853 ( UserId int NOT NULL AUTO_INCREMENT, PRIMARY KEY(UserId) ); Query OK, 0 rows affected (0.00 s