LESSON 30分

LIMITで件数を制限しよう

ストーリー

「先輩、給料の高い上位3人だけ表示したいんですけど...」

「LIMITを使えば件数を絞れるよ」

「リミット...制限ってことですか?」

「そう。ORDER BYと組み合わせると "トップ3" みたいな表示が簡単にできるんだ」


LIMIT句とは

LIMIT = 取得する行数を制限するための句です。

例え話

LIMITは「ここまで」を決めるストッパーのようなもの。

  • 検索結果の「1ページ目だけ」表示する
  • ランキングの「上位5件」だけ取り出す
  • 大量データから「最初の10件」だけ確認する

基本構文

sql
SELECT カラム名 FROM テーブル名 LIMIT 件数;

最初の3件だけ取得

sql
SELECT * FROM employees LIMIT 3;

実行結果:

id  name      department  salary
--  --------  ----------  ------
1   田中太郎  開発部      350000
2   佐藤花子  営業部      320000
3   鈴木一郎  開発部      400000

8人いる社員から、最初の3人だけが表示されました。

ORDER BYを指定しない場合、データの格納順に取得されます。


ORDER BY + LIMIT = Top Nパターン

ORDER BYとLIMITを組み合わせると、「上位N件」 を取り出せます。

給料が高い上位3人

sql
SELECT * FROM employees ORDER BY salary DESC LIMIT 3;

実行結果:

id  name      department  salary
--  --------  ----------  ------
3   鈴木一郎  開発部      400000
1   田中太郎  開発部      350000
8   小林大輔  人事部      330000

これが Top Nパターン です。実務で非常によく使います。

価格が安い商品TOP3

sql
SELECT * FROM products ORDER BY price ASC LIMIT 3;

実行結果:

id  name        category  price  stock
--  ----------  --------  -----  -----
2   マウス      電子機器  2500   100
9   ウェブカメラ 電子機器  5000   25
10  デスクライト 家具      7000   40

最も高い商品TOP5

sql
SELECT name, price FROM products ORDER BY price DESC LIMIT 5;

実行結果:

name          price
------------  -----
ノートPC      89000
チェア        45000
デスク        35000
モニター      32000
ブックシェルフ 18000

OFFSETで先頭をスキップ

OFFSET を使うと、先頭の数件をスキップしてからデータを取得できます。

sql
SELECT * FROM employees ORDER BY salary DESC LIMIT 3 OFFSET 2;

意味:上位2件をスキップして、次の3件を取得

実行結果:

id  name      department  salary
--  --------  ----------  ------
8   小林大輔  人事部      330000
2   佐藤花子  営業部      320000
7   中村美月  営業部      310000

給料1位(鈴木)と2位(田中)をスキップして、3位〜5位を表示しています。


ページネーション(ページ分け)

OFFSETを活用すると、データを「ページ」に分けて表示できます。

1ページ3件の場合

sql
-- ページ1(1〜3件目)
SELECT * FROM employees ORDER BY id LIMIT 3 OFFSET 0;

-- ページ2(4〜6件目)
SELECT * FROM employees ORDER BY id LIMIT 3 OFFSET 3;

-- ページ3(7〜8件目)
SELECT * FROM employees ORDER BY id LIMIT 3 OFFSET 6;

ページネーションの計算式

OFFSET = (ページ番号 - 1) × 1ページあたりの件数
ページLIMITOFFSET表示される行
1ページ目301〜3件目
2ページ目334〜6件目
3ページ目367〜8件目

Webサイトの「次のページ」ボタンの裏側では、このような仕組みが使われています。


実践的な使い方

最も安い商品3つ

sql
SELECT name, price FROM products ORDER BY price ASC LIMIT 3;

在庫が多い商品TOP5

sql
SELECT name, stock FROM products ORDER BY stock DESC LIMIT 5;

給料4位〜6位の社員

sql
SELECT name, salary FROM employees ORDER BY salary DESC LIMIT 3 OFFSET 3;

ハンズオン

SQLiteを起動して、以下のSQLを実行してみましょう。

sql
-- 1. 表示設定(まだの場合)
.mode column
.headers on

-- 2. 社員の最初の3件を表示
SELECT * FROM employees LIMIT 3;

-- 3. 給料が高い上位3人を表示(Top Nパターン)
SELECT * FROM employees ORDER BY salary DESC LIMIT 3;

-- 4. 価格が安い商品TOP5を表示
SELECT name, price FROM products ORDER BY price ASC LIMIT 5;

-- 5. 給料が高い順で、上位2人をスキップして3人表示
SELECT * FROM employees ORDER BY salary DESC LIMIT 3 OFFSET 2;

-- 6. 商品を価格の高い順にページ1(3件ずつ)を表示
SELECT name, price FROM products ORDER BY price DESC LIMIT 3 OFFSET 0;

-- 7. 商品を価格の高い順にページ2を表示
SELECT name, price FROM products ORDER BY price DESC LIMIT 3 OFFSET 3;

まとめ

ポイント内容
LIMIT取得する行数を制限する
Top NパターンORDER BY ... LIMIT N で上位N件を取得
OFFSET先頭の指定行数をスキップする
ページネーションLIMIT + OFFSET でページ分けを実現
構文の順番SELECT → FROM → WHERE → ORDER BY → LIMIT

チェックリスト

  • LIMIT句で件数を制限できた
  • ORDER BYとLIMITを組み合わせてTop Nを取得できた
  • OFFSETの仕組みを理解できた
  • ページネーションの考え方を理解できた

次のステップへ

LIMITで件数制限ができるようになりましたね。

次のセクションでは、COUNT、SUM、AVGなどの集計関数を学びます。 「社員は全部で何人?」「平均給料は?」がSQLだけでわかるようになりますよ!


推定読了時間: 30分