クエリで返す行数をどうやって制限するの?例えば最初の5人の学生だけ欲しいとか、一番給料が高い社員だけとか、トップ10の商品のリストが欲しい時、LIMITがめっちゃ便利だよ!
データベースを触ってると、クエリの結果がめちゃくちゃ大量になることがあるよね。そんな時は、返すデータ量を制限したくなる。理由は:
- サーバーやネットワークへの負荷を減らすため。
- 無限スクロールしなくてもデータを簡単に分析できるようにするため。
簡単な例え話:バーで女の子に一杯おごろうと思ったのに、間違えて全員分払っちゃったみたいな感じ。確かにインパクトあるけど、そんなにたくさんの女の子いらないよね?だから、必要な分だけ注文する方法を学ぼう。LIMITが助けてくれるよ。
基本のLIMIT構文
こんな感じで書くよ:
SELECT カラム1, カラム2
FROM テーブル
LIMIT 行数;
例1:レコードの制限
例えば、studentsテーブルが1000行あるとする。最初の3件だけ見たい時はこう:
SELECT *
FROM students
LIMIT 3;
結果:
| id | name | age |
|---|---|---|
| 1 | Otto | 20 |
| 2 | Anna | 22 |
| 3 | Alex | 19 |
超シンプル:長いリストの代わりに3行だけ見れる。LIMITは指定した行数だけ返してくれる。
LIMITの実用例
例2:トップ商品
productsテーブルで一番高い商品5つの名前と値段を知りたい時。まず値段で降順に並べて、結果を制限する:
SELECT product_name, price
FROM products
ORDER BY price DESC
LIMIT 5;
結果:
| product_name | price |
|---|---|
| iPhone 16 Pro Max | 1500 |
| MacBook Pro | 1200 |
| AirPods Pro | 300 |
| iPad Pro | 280 |
| Apple Watch | 250 |
これで一番高いトップ5の商品だけ見れるね。
LIMITでクエリをテストする方法
SQLクエリを作る時、大量のデータにぶつかることが多いよね。LIMITを使えば、まず少しだけデータを返してクエリが正しいかチェックできる。例えば:
SELECT *
FROM transactions_log
LIMIT 10;
クエリのロジックがOKなら、LIMITを外せばいい。
LIMITの使い方のポイント
1. ORDER BYなしのLIMIT
ORDER BYで並べ替えしないと、LIMITはテーブルに保存されてる順(つまりランダムっぽい順)でデータを返す。普通は問題ないけど、たまに予想外の順番になることも。
例えば:
SELECT name, age
FROM students
LIMIT 3;
ORDER BYを書かないと、どの3件が返るかは分からない。
それを避けたいなら、ORDER BYを使おう:
SELECT name, age
FROM students
ORDER BY age DESC
LIMIT 3;
2. WHEREとの組み合わせ
WHEREで行を絞り込んで、LIMITで結果を制限することもできる。データが多すぎる時、最初の一致だけ見たい時に便利。
SELECT *
FROM students
WHERE age > 18
LIMIT 5;
このクエリは18歳より上の学生から最初の5人を返す。
3. 実用例:最初のページだけ表示
データ表示システム(例えばWebアプリ)で、LIMITを使って最初のページだけ表示できる。
SELECT *
FROM employees
ORDER BY hire_date
LIMIT 10;
これで入社日順に最初の10人の社員が見れる。
応用例:LIMITと集約の組み合わせ
例えば、人気カテゴリトップ3を出したい時:
SELECT category, COUNT(*) AS total_products
FROM products
GROUP BY category
ORDER BY total_products DESC
LIMIT 3;
このクエリはカテゴリごとに商品をまとめて、数で並べ替えて、3行だけ残す。
GROUP BYやCOUNT()の詳しい使い方は次のレクチャーでやるよ。
LIMITでよくあるミス
LIMITを使う時、こんな問題にぶつかることがある:
「行の順番がランダム」: ORDER BYを忘れると、データが予想外の順番で返ることがある。順番が大事な時は必ず並べ替えを指定しよう。
「大事なデータが切れる」: 並べ替えカラムの値が同じレコードが複数あると、LIMITで結果が不完全になることがある。そんな時は並べ替え条件を追加しよう。
SELECT *
FROM students
ORDER BY age DESC, name ASC
LIMIT 5;
「WHEREとの組み合わせミス」 フィルタ条件が厳しすぎて、LIMITが意味なくなることも。例えばWHEREで2件しか返らないのにLIMITが10だと、結局2行しか返らない。
「DB依存」 一部のDBMSは行数制限に別の構文(例えばSQL ServerのTOP)を使う。PostgreSQLはLIMITを使うよ。
リアルでLIMITが必要な理由
大量データのインターフェース: ネットショップで商品をページごとに見る時、最初のページは10件だけ表示したいよね。LIMITがそれを実現してくれる。
レポート: 上位だけ知りたい時(例えばトップ5の社員、売上リーダー、成績トップの学生など)。
クエリのテストや最適化: 何百万行も扱う代わりに、少しだけでクエリを素早くテストできる。
GO TO FULL VERSION