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句を組み合わせることで、任意の行数をスキップした上で必要な件数だけデータを取得できます。ページネーション機能の実装などでも頻繁に使われるテクニックなので、ぜひ覚えておきましょう。
-
MySQLで次の自動インクリメントIDを取得する方法
MySQLには、自動採番(オートインクリメント)を実現するためのAUTO_INCREMENTキーワードが用意されています。開始値はデフォルトで「1」に設定されており、新しいレコードが挿入されるたびに1ずつ加算されていきます。 MySQLで次の自動インクリメントIDを取得したい場合は、last_insert_id()関数を使う方法と、information_schemaのAUTO_INCREMENT値をSELECT文で参照する方法の2つがあります。本記事では後者の方法を具体的な例とともに解説します。 1. 自動インクリメント付きテーブルの作成 まず、「id」カラムを自動インクリメントに設定したテ
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected