Day9 前半
「全部はいらない、そのうち何件かだけでいい」をSQLで言えるようにする
Day8 までで、
どの行を取るか(WHERE)
どの順番で並べるか(ORDER BY)
はコントロールできるようになりました。
Day9 では、そこにもう一つ大事な軸――
「何件まで取るか」
を加えます。
ここで登場するのが LIMIT です。
「とりあえず上から10件だけ見たい」「1件だけでいい」といった、現場でめちゃくちゃよく使うやつです。
LIMIT の役割
「結果セットの“最大件数”に上限をかける」
LIMIT は、
「この SELECT の結果、最大で何件まで返していいか」
を指定するための句です。
基本形はこうです。
SELECT 列名一覧
FROM テーブル名
[WHERE 条件]
[ORDER BY 並び替え条件]
LIMIT 取得したい件数;
SQLLIMIT は、
WHERE で絞り込み、ORDER BY で並び替えた「あと」に効きます。
つまり、「条件に合って並び替えられた結果の“先頭から何件かだけ”を取る」というイメージです。
まずは「上から1件だけ」を体験する
「1件だけ欲しい」ときに、LIMIT 1 はほぼ反射で出てくる
たとえば、次のような users テーブルがあるとします。
id | name | age
---+------------+----
1 | 山田太郎 | 25
2 | 佐藤花子 | 19
3 | 鈴木一郎 | 30
4 | 高橋健 | 22
5 | 田中花子 | 28
ここで、「とりあえず1件だけ見たい」とします。
SELECT * FROM users
LIMIT 1;
SQLこれで、「users テーブルの先頭の1件だけ」が返ってきます。
ただし、ORDER BY を指定していないので、「どの1件か」は保証されません。
だから本当にやりたいのは、たとえばこうです。
「年齢の高い順に並べたうえで、そのうち1件だけ欲しい」
SELECT * FROM users
ORDER BY age DESC
LIMIT 1;
SQLこれなら、「一番年齢が高いユーザーを1人だけ取る」という意味がはっきりします。
LIMIT と ORDER BY はセットで考える
「どの順番で並べたうえで、何件取るか」が重要
LIMIT 単体で使うと、「たまたま先頭にいる何件か」を取ることになります。
多くの場合、欲しいのは「たまたま」ではなく、「何かの基準で並べたうえでの上位N件」です。
たとえば、
「年齢が高い順に並べた上位3人が欲しい」
SELECT * FROM users
ORDER BY age DESC
LIMIT 3;
SQL「年齢が若い順に並べた先頭2人が欲しい」
SELECT * FROM users
ORDER BY age ASC
LIMIT 2;
SQLこのように、
ORDER BY で意味のある順番を作り、そのうえで LIMIT で件数を絞る
というのが、実務でも学習でも基本パターンになります。
例題:未完了タスクの「上から5件だけ」を見る
「全部は見きれないから、優先度の高いものから」という発想
Day7 で作った tasks テーブルを少し思い出します。
id | title | done | due_date
---+------------- +------+-----------
1 | 買い物に行く | 1 | 2025-05-01
2 | メール返信 | 0 | 2025-04-30
3 | 勉強 | 0 | 2025-04-29
4 | レポート作成 | 0 | 2025-04-28
5 | 掃除 | 0 | 2025-05-03
6 | 読書 | 0 | 2025-05-10
...
ここで、「未完了(done = 0)のタスクのうち、期限が近いものから5件だけ見たい」とします。
条件:done = 0
並び順:due_date ASC(近い順)
件数:5件
SELECT * FROM tasks
WHERE done = 0
ORDER BY due_date ASC
LIMIT 5;
SQLこれで、「今すぐ意識すべきタスクの上位5件」だけが見えるようになります。
全部を眺めるのではなく、「優先度の高いものから順に、数を絞って見る」というのは、現実の仕事でもよくある視点です。
LIMIT のセキュリティ的な意味
「取りすぎない」というのは、それだけで防御になる
LIMIT は、パフォーマンスのためだけでなく、セキュリティの観点からも重要です。
たとえば、
「検索条件がゆるすぎて、本当は数件だけ見たかったのに、何万件も返ってきてしまった」
という状況は、それだけでリスクです。
画面に全部表示しようとしてブラウザが固まるかもしれないし、
ログに大量の個人情報が残るかもしれない。
だからこそ、
「とりあえず上位100件までにしておく」
「画面表示は常に LIMIT を付ける」
といった設計は、性能と安全性の両方を守るための基本テクニックです。
Day9 の段階では、
「LIMIT は“取りすぎないためのブレーキ”でもある」
という感覚だけ持っておいてくれれば十分です。
Day9 前半のまとめ
LIMIT は、「SELECT の結果の最大件数」に上限をかける句。
本当にやりたいのは、「ORDER BY で意味のある順番を作り、そのうえで LIMIT で上位N件を取る」こと。
未完了タスクの「期限が近いものから5件だけ」のように、優先度の高いものだけを見る場面でよく使う。LIMIT はパフォーマンスだけでなく、「取りすぎない」というセキュリティ上のブレーキにもなる。
後半では、
LIMIT と「オフセット」(何件目から取るか)という考え方、
ページング(1ページ10件ずつ表示する、など)の入り口、
「LIMIT を付け忘れたときに何が起きるか」という視点
を扱って、検索結果の「量」をより細かくコントロールできるようにしていきます。
