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

MySQLでOFFSETを使って2行をスキップし、その後の行を選択する方法

MySQLでは、OFFSET句を使用することで、指定した行数をスキップして結果セットを取得できます。本記事では、具体的なサンプルを通じて、先頭の2行をスキップした後に次の行を選択する方法を詳しく解説します。

テーブルの作成

まず、動作確認用のテーブルを作成しましょう。以下のコマンドを実行します。

mysql> create table DemoTable617(Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,FirstName varchar(100));
Query OK, 0 rows affected (1.70 sec)

レコードの挿入

続いて、INSERTコマンドを使ってテーブルに複数のレコードを挿入します。

mysql> insert into DemoTable617(FirstName) values('John');
Query OK, 1 row affected (0.39 sec)
mysql> insert into DemoTable617(FirstName) values('Sam');
Query OK, 1 row affected (0.39 sec)
mysql> insert into DemoTable617(FirstName) values('Carol');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable617(FirstName) values('Mike');
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable617(FirstName) values('David');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable617(FirstName) values('Bob');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable617(FirstName) values('Robert');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable617(FirstName) values('Chris');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable617(FirstName) values('Mike');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable617(FirstName) values('Adam');
Query OK, 1 row affected (0.49 sec)

全レコードの確認

SELECT文を使用して、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable617;

上記のクエリを実行すると、以下のような出力が得られます。

+----+-----------+
| Id | FirstName |
+----+-----------+
| 1  | John      |
| 2  | Sam       |
| 3  | Carol     |
| 4  | Mike      |
| 5  | David     |
| 6  | Bob       |
| 7  | Robert    |
| 8  | Chris     |
| 9  | Mike      |
| 10 | Adam      |
+----+-----------+
10 rows in set (0.00 sec)

2行をスキップして次の行を選択するクエリ

ここからが本題です。まずORDER BY DESCで降順に並べ替えを行い、その後LIMIT 5 OFFSET 2を組み合わせることで、2行をスキップして5行分のデータを取得します。

mysql> select tbl.* from (select *from DemoTable617 order by FirstName DESC LIMIT 5 OFFSET 2) AS tbl ORDER BY tbl.Id;

このクエリのポイントは以下の通りです。

  • サブクエリ内でFirstName DESCにより名前を降順ソートしています。
  • OFFSET 2によって、並べ替え後の先頭2行がスキップされます。
  • LIMIT 5で、スキップ後の5行のみを取得します。
  • 最後に外側のクエリでtbl.Id順に並べ替えることで、元のID順の見やすい結果にしています。

上記のクエリを実行すると、以下の出力が得られます。

+----+-----------+
| Id | FirstName |
+----+-----------+
| 1  | John      |
| 4  | Mike      |
| 5  | David     |
| 8  | Chris     |
| 9  | Mike      |
+----+-----------+
5 rows in set (0.00 sec)

まとめ

このように、MySQLではOFFSET句とLIMIT句を組み合わせることで、任意の行数をスキップした上で必要な件数だけデータを取得できます。ページネーション機能の実装などでも頻繁に使われるテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで次の自動インクリメントIDを取得する方法

    MySQLには、自動採番(オートインクリメント)を実現するためのAUTO_INCREMENTキーワードが用意されています。開始値はデフォルトで「1」に設定されており、新しいレコードが挿入されるたびに1ずつ加算されていきます。 MySQLで次の自動インクリメントIDを取得したい場合は、last_insert_id()関数を使う方法と、information_schemaのAUTO_INCREMENT値をSELECT文で参照する方法の2つがあります。本記事では後者の方法を具体的な例とともに解説します。 1. 自動インクリメント付きテーブルの作成 まず、「id」カラムを自動インクリメントに設定したテ

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

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