PostgreSQLのOFFSET完全入門|並び替えと組み合わせてデータをスキップする方法を初心者向けに解説
生徒
「PostgreSQLでデータを表示していたら、最初の何件かを飛ばして表示したい場面がありました。そんなことはできるんですか?」
先生
「できますよ。OFFSETという仕組みを使うと、最初のデータをスキップして表示できます」
生徒
「パソコンをほとんど触ったことがなくても理解できますか?」
先生
「大丈夫です。本のページをめくる感覚で説明します」
1. SQLとは何か?
SQLは、データベースに保存されている情報を操作するための言葉です。データベースは、たくさんの情報を表の形で整理して保存する場所です。SQLを使うことで、その表から必要な情報を取り出したり、順番を変えて表示したりできます。
紙の名簿を思い浮かべてください。名前順に並び替えたり、途中のページだけを見ることがあります。SQLは、それをコンピューターにお願いするための命令文です。
2. OFFSETとは何かをやさしく理解しよう
OFFSETは、「最初の何件を飛ばすか」を指定するための命令です。スキップという言葉がぴったり当てはまります。
例えば、本の名簿で最初の3人を読み飛ばして、4人目から読み始めるようなイメージです。この「読み飛ばす人数」を指定するのがOFFSETです。
PostgreSQLでは、OFFSETは単独で使うよりも、LIMITやORDER BYと一緒に使われることが多いです。
3. サンプルテーブルを確認しよう
ここではusersテーブルを使って、OFFSETの動きを確認します。まずはSQL実行前のテーブルを見てみましょう。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 22 | jiro@example.com
5 | 伊藤美咲 | 28 | misaki@example.com
6 | 田中健太 | 35 | kenta@example.com
この表には6件のデータがあります。この中からOFFSETを使って表示範囲を調整していきます。
4. OFFSETだけを使ってデータをスキップする
まずはOFFSETだけを使ったシンプルな例です。次のSQLは、最初の2件を飛ばして表示します。
SELECT *
FROM users
OFFSET 2;
これは「最初の2行は無視して、3行目以降を表示してください」という意味になります。
実行結果
id | name | age | email
---+------------+-----+-------------------
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 22 | jiro@example.com
5 | 伊藤美咲 | 28 | misaki@example.com
6 | 田中健太 | 35 | kenta@example.com
5. LIMITとOFFSETを組み合わせて使う
OFFSETはLIMITと一緒に使うことで、より実用的になります。LIMITは「何件表示するか」を指定する命令です。
例えば「3件目から2件分だけ表示したい」という場合、次のように書きます。
SELECT *
FROM users
LIMIT 2
OFFSET 2;
これは、最初の2件を飛ばし、その後の2件だけを表示するという意味です。ページ分割のような仕組みでよく使われます。
6. ORDER BYとOFFSETを一緒に使う理由
OFFSETを使うときは、ORDER BYと一緒に使うのが基本です。並び順を決めないと、毎回表示される順番が変わる可能性があるからです。
SELECT *
FROM users
ORDER BY age ASC
LIMIT 3
OFFSET 1;
これは、年齢が若い順に並べたあと、最初の1件を飛ばして3件表示します。名簿を年齢順に並べて、2番目から見る感覚です。
7. OFFSETがよく使われる場面
OFFSETは、一覧画面やページ送りの仕組みでよく使われます。例えば、1ページに10件ずつ表示し、次のページでは最初の10件を飛ばして表示する、といった使い方です。
検索結果が多いときに、一度に全部表示しないためにも役立ちます。初心者のうちは「途中から見るための命令」と覚えておくと分かりやすいです。
8. OFFSETを使うときの注意点
OFFSETは便利ですが、データが非常に多い場合は処理が重くなることがあります。これは、内部的には最初のデータも数えた上で飛ばしているためです。
ただし、基本的な学習や小規模なデータでは気にする必要はありません。まずはOFFSETの動きを正しく理解することが大切です。