コース一覧
SQL入門:データベース操作のきほん
LIMITで件数制限

SQL入門:データベース操作のきほん

SELECT、INSERT、UPDATE、DELETE に加え、WHERE、JOIN、GROUP BY、サブクエリなど SQL の基礎構文を、ブラウザ上のサンプル DB を操作しながら学べる無料コースです。データ分析やアプリ開発で SQL を初めて学ぶ社会人や学生を対象としています。約 18 時間 (1 日 30 分 × 36 日) で 71 レッスンを修了でき、修了後は業務データの抽出、集計、簡単なレポート作成を SQL で行えるようになります。

1
SQLとデータベースの基礎
01. データベースとは何か5分
02. リレーショナルDBの仕組み5分
03. テーブル・行・列の基本5分
04. 主キーとNULL制約5分
05. 基礎確認クイズ5分
2
データの取得 - SELECT文マスター
01. SELECT文の基本構文5分
02. WHERE句で条件絞り込み5分
03. 比較演算子とLIKEパターン5分
04. AND/OR/NOTで複合条件5分
05. ORDER BYでソート5分
06. LIMITで件数制限5分
07. 日付関数の活用5分
08. データ取得チャレンジ5分
3
データ集計と分析
01. 集計関数 COUNT/SUM/AVG/MAX/MIN5分
02. NULLの扱い方5分
03. 算術演算とエイリアス5分
04. CASE式で条件分岐5分
05. DISTINCTで重複排除5分
06. 文字列関数5分
07. GROUP BYでグループ化5分
08. HAVINGでグループ条件5分
09. SELECT文の実行順序5分
10. 集計分析チャレンジ5分
4
テーブル結合
01. なぜ結合が必要か5分
02. INNER JOINの基本5分
03. LEFT/RIGHT OUTER JOIN5分
04. 複数テーブルの結合5分
05. 自己結合5分
06. 集合演算 UNION/INTERSECT/EXCEPT5分
07. 結合の実践演習5分
08. テーブル結合クイズ5分
5
サブクエリ活用
01. サブクエリとは5分
02. WHERE句のサブクエリ5分
03. FROM句のサブクエリ5分
04. SELECT句のサブクエリ5分
05. WITH句(CTE)の活用5分
06. サブクエリ実践クイズ5分
6
テーブル作成とデータ操作
01. CREATE DATABASE と CREATE TABLE5分
02. データ型の選び方5分
03. INSERT 文でデータを追加する5分
04. UPDATE 文でデータを更新する5分
05. DELETE 文でデータを削除する5分
06. 物理削除と論理削除5分
07. ALTER TABLE で構造を変更する5分
08. 制約 (NOT NULL / UNIQUE / DEFAULT)5分
09. TRUNCATE と DROP5分
10. DDL / DML 実践クイズ5分
7
外部キーと参照整合性
01. 外部キーの役割5分
02. FOREIGN KEY制約の設定5分
03. ON DELETE/UPDATE ポリシー5分
04. CASCADE vs RESTRICT vs SET NULL5分
05. 物理FK vs 論理FK5分
06. 外部キークイズ5分
8
データモデリング入門
01. データモデリングとは5分
02. ER図の読み方・書き方5分
03. エンティティと属性5分
04. リレーションシップとカーディナリティ5分
05. 1対1/1対多/多対多の設計5分
06. モデリング基礎クイズ5分
9
正規化
01. なぜ正規化が必要か5分
02. 第1正規形 (1NF)5分
03. 第2正規形 (2NF)5分
04. 第3正規形 (3NF)5分
05. 非正規化の判断5分
06. 正規化クイズ5分
10
物理設計とインデックス
01. 物理設計の考え方5分
02. 命名規則のベストプラクティス5分
03. インデックスの仕組み5分
04. CREATE INDEXの使い方5分
05. インデックス設計の注意点5分
06. 物理設計クイズ5分

LIMITで件数制限

1000 行受け取って、使うのは 10 行

一覧画面を作るとき、テーブルの行を全部取り出してから、画面に出す分だけアプリ側で切り出す書き方をしてしまうことがあります。行が 100 件のうちは動きます。10 万件になった日に、通信量もメモリも 1000 倍になって止まります。

必要な件数だけをデータベースに返してもらう句が LIMIT です。

SQL クエリ

SELECT id, name FROM shops LIMIT 10;

shops に何万行入っていても、返ってくるのは 10 行です。行数の分からないテーブルを触るときは、まず LIMIT 10 を付けて中身を覗く。これは事故を防ぐ意味でも役に立つ癖です。

件数を絞るのは、画面のためだけではありません。ランキングの上位だけが欲しい、新着のいくつかだけを出したい、という要件は、どれも「並べたうえで先頭から何件か」という同じ形に落ちます。

40 件飛ばし、次の 20 件を返す流れ FROM WHERE ORDER BY id OFFSET 40 40 件を飛ばす LIMIT 20 20 件だけ 結果セット 3 ページ目 1 ページ 20 件 1 ページ目 20 件を飛ばす 2 ページ目 20 件を飛ばす 3 ページ目 次の 20 件を返す OFFSET 40 は 20 件 × 2 ページを飛ばし、LIMIT 20 が 3 ページ目を返す ORDER BY とセット。OFFSET 100000 は先頭 10 万行を読む

「先頭 10 件」は毎回同じ 10 件とは限らない

ただし上のクエリには問題があります。並び順を指定していないので、どの 10 行が返るかはデータベース任せです。同じクエリを 2 回実行して違う行が返ることも、テスト環境と本番で挙動が変わることもあります。

LIMIT は「並んだ結果の先頭から何件か」を切り取る句です。先に並びを決めておかないと、切り取る場所そのものが決まりません。

SQL クエリ

SELECT id, name, opened_at FROM shops ORDER BY opened_at LIMIT 10;

開店日の古い順に並べてから、先頭 10 件を取っています。LIMIT を書いたら ORDER BY も書く、とセットで覚えてしまうのが安全です。この種のバグは「たまに順番が違う」という形でしか出ないので、報告を受けても再現できず、原因にたどり着くまでに何日もかかります。

2 ページ目から先へ進む

1 ページ 20 件の一覧で 3 ページ目を出したいときは、先頭 40 件を読み飛ばしてから 20 件取ります。読み飛ばす件数を指定するのが OFFSET です。

SQL クエリ

SELECT id, name FROM shops ORDER BY opened_at LIMIT 20 OFFSET 40;

飛ばす件数は (ページ番号 - 1) × 1 ページの件数で決まります。3 ページ目なら 2 × 20 で 40 です。アプリから (page - 1) * pageSize を渡せば、そのまま動きます。1 ページ目は OFFSET 0 になるので、OFFSET を省いた形と同じです。

解説

現場の話 OFFSET は、飛ばす行を読まずに済ませているわけではありません。OFFSET 100000 は先頭 10 万行を読んでから捨てて、その次の行を返します。後ろのページほど遅くなるので、件数の多い一覧では「直前のページの最後の id より小さい行を 20 件」のように、位置を鍵で指定する方式に切り替えます。

テーブル構造

CREATE TABLE articles ( id INT PRIMARY KEY, title VARCHAR(100) NOT NULL, views INT NOT NULL, published_at DATE NOT NULL ); INSERT INTO articles (id, title, views, published_at) VALUES (1, 'SQL 入門', 1500, '2026-01-10'), (2, 'JOIN の使い方', 3200, '2026-02-05'), (3, 'インデックス設計', 2800, '2026-02-12'), (4, 'トランザクション基礎', 1800, '2026-03-01'), (5, '正規化と非正規化', 4500, '2026-03-15'), (6, 'ウィンドウ関数入門', 5200, '2026-04-02'), (7, 'クエリチューニング', 6100, '2026-04-20'), (8, 'NoSQL との比較', 2200, '2026-05-01'), (9, 'CTE と再帰クエリ', 3800, '2026-05-10'), (10, 'パーティショニング', 1900, '2026-05-15');

期待される出力

idtitleviews
7クエリチューニング6100
6ウィンドウ関数入門5200
5正規化と非正規化4500

ヒント

ORDER BY views DESC で閲覧数の多い順に並べる

LIMIT 3 で上位 3 件だけ取り出す

LIMIT は ORDER BY とセットで使うのが原則

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • テーブルDB の表 (Excel のシートみたいなもの)
  • メモリプログラムとデータを一時保持する高速領域
  • データベースデータを構造化して保存する仕組み
  • HTTPWeb の通信プロトコル、HTTPS は TLS で暗号化したもの
  • セット重複を持たない順序なし集合
  • None「値がない」ことを表す特別な値。
  • URLページの住所全体
  • テストバグを見つける工程
query.sql
学習モード
エディタを読み込んでいます
コードの実行結果
データベースを初期化中...