CodeGym /コース /SQL SELF /行数制限(LIMIT)と結果のコントロール

行数制限(LIMIT)と結果のコントロール

SQL SELF
レベル 3 , レッスン 0
使用可能

クエリで返す行数をどうやって制限するの?例えば最初の5人の学生だけ欲しいとか、一番給料が高い社員だけとか、トップ10の商品のリストが欲しい時、LIMITがめっちゃ便利だよ!

データベースを触ってると、クエリの結果がめちゃくちゃ大量になることがあるよね。そんな時は、返すデータ量を制限したくなる。理由は:

  1. サーバーやネットワークへの負荷を減らすため。
  2. 無限スクロールしなくてもデータを簡単に分析できるようにするため。

簡単な例え話:バーで女の子に一杯おごろうと思ったのに、間違えて全員分払っちゃったみたいな感じ。確かにインパクトあるけど、そんなにたくさんの女の子いらないよね?だから、必要な分だけ注文する方法を学ぼう。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 BYCOUNT()の詳しい使い方は次のレクチャーでやるよ。

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の社員、売上リーダー、成績トップの学生など)。

クエリのテストや最適化: 何百万行も扱う代わりに、少しだけでクエリを素早くテストできる。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION