学習ガイド

SQL 入門 完全ガイド|基本構文・JOIN・実務でのデータ分析まで

18分で読めます
この記事のポイント

SQL を未経験から実務レベルまで学べる完全ガイド。SELECT/WHERE/GROUP BY の基本構文、4種類の JOIN、データ分析で使う集計関数、学習ロードマップとよくある質問まで。実レッスンへのリンク付き。

editor

チョットデキル編集部

チョットデキルの編集部です。プログラミング学習に役立つ情報をお届けします。

SQL(Structured Query Language)は、データベースを操作するための共通言語です。営業がスプレッドシートに頼っていた集計をたった1行で済ませたり、マーケターが施策の効果検証を即座に確認したり、エンジニアが新機能の仕様を裏付けるデータを抽出したり。職種を問わず「データを自分の手で取り出せる人」の市場価値は年々高まっています。

この記事では、SQL を初めて学ぶ方が「実務で使えるクエリを書ける」状態まで到達するための全体像を、基本構文・JOIN・集計関数・学習ステップ・つまずきポイント・FAQ の順に整理しました。プログラミング学習全体のロードマップはプログラミング独学完全ロードマップ 2026を、データ分析の入門はAI時代のデータ分析入門を併せてご覧ください。

SQL 完全ガイド とは

SELECT / WHERE / JOIN / GROUP BY / サブクエリまで、SQL を実務で使えるレベルに到達するまでの全行程を 1 本にまとめたガイドです。練習用の SQL Fiddle で全コマンドをそのまま試せます。

SQL とは何か(一言でいうと)

SQL は、表(テーブル)の形で整理されたデータに対して、検索・追加・更新・削除を行うための言語です。Excel の VLOOKUP やフィルタを使ったことがあれば、SQL はその上位互換だとイメージするとわかりやすいでしょう。10 万行のデータでも 1 秒で集計でき、誰が書いても同じ結果を再現できる点が Excel との大きな違いです。

世界中のサービスがデータベースを利用しており、Web サービスのバックエンド、社内の業務システム、データ分析基盤、機械学習の学習データの取り出しなど、ほぼあらゆる場面で SQL が共通言語として動いています。MySQL、PostgreSQL、SQL Server、SQLite、BigQuery など製品ごとに方言はありますが、基本構文の 8 割は共通です。一度覚えれば長く使えるのが SQL を学ぶ最大の利点です。

SQL でできる 5 つのこと

初学者は「SQL は SELECT 文だけ」というイメージを持ちがちですが、実務では用途が広く、次の 5 つを使い分けます。

  1. データの取得(SELECT)— 条件を指定して必要な行・列だけを取り出す
  2. データの追加(INSERT)— 新しい行をテーブルに追加する
  3. データの更新(UPDATE)— 既存の行の値を書き換える
  4. データの削除(DELETE)— 不要な行を取り除く
  5. テーブル設計(CREATE TABLE / ALTER TABLE)— データの入れ物そのものを作る・変える

初学者がまず時間を投資すべきなのは 1 番の SELECT です。データ分析・施策評価・調査の 9 割は SELECT で完結します。INSERT/UPDATE/DELETE と CREATE TABLE はアプリ開発に踏み込んだ段階で必要になります。

基本構文 SELECT/WHERE/ORDER BY

もっとも基本的な SQL は、次の 3 つの要素の組み合わせです。

SQL クエリ

SELECT カラム名 FROM テーブル名 WHERE 条件 ORDER BY 並び順 LIMIT 件数;

具体例として、ユーザーテーブル users から「会員ランクがゴールド」のユーザーを「登録日が新しい順」で 10 件取得するクエリは次のようになります。

SQL クエリ

SELECT id, name, email, created_at FROM users WHERE rank = 'gold' ORDER BY created_at DESC LIMIT 10;

SELECT は「何を取り出すか」、FROM は「どこから」、WHERE は「どの条件で」、ORDER BY は「どう並べるか」、LIMIT は「何件まで」を担当します。この 5 つを押さえれば、社内のデータ調査の半分以上は対応できるようになります。実際に手を動かしながら確認したい方は SELECT・WHERE の基本レッスン で 5 分の演習から始められます。

集計と GROUP BY

「商品カテゴリ別の売上合計」「日付別の注文件数」のような集計は、GROUP BY と集計関数で表現します。集計関数で最初に覚えるべきは次の 5 つです。

  • COUNT(*) — 行数を数える
  • SUM(カラム) — 数値を合計する
  • AVG(カラム) — 平均を取る
  • MAX(カラム) / MIN(カラム) — 最大・最小を取る

たとえば、商品カテゴリ別の売上合計を新しい順に並べるなら、次のようになります。

SQL クエリ

SELECT category, COUNT(*) AS order_count, SUM(amount) AS total_sales, AVG(amount) AS avg_order_value FROM orders WHERE status = 'paid' AND created_at >= '2026-01-01' GROUP BY category ORDER BY total_sales DESC;

この 1 クエリで「対象期間の絞り込み」「カテゴリ別の集計」「並び替え」を全部済ませてしまえる点が SQL の強みです。Excel ならピボットテーブルを毎回作り直す作業が、SQL なら 1 つの定型クエリで再利用できます。

JOIN — 複数テーブルを組み合わせる

SQL でつまずきやすい最大のポイントが JOIN です。テーブルが 1 つだけで完結する世界は実務には存在せず、ユーザーテーブル・注文テーブル・商品テーブルなど複数のテーブルを「キー」でつなぐ操作が必須になります。

代表的な JOIN は 4 種類です。

  • INNER JOIN — 両方のテーブルに一致する行だけを取り出す。最頻出
  • LEFT JOIN — 左側のテーブルを全件残し、右側に一致が無ければ NULL
  • RIGHT JOIN — LEFT の逆。実務ではあまり使わない
  • FULL OUTER JOIN — 両方の全件を残す。MySQL では FULL OUTER JOIN を直接サポートしていないため、LEFT JOIN と RIGHT JOIN を UNION ALL で組み合わせて代替する

たとえば、ユーザー名と注文情報を一緒に取り出すなら次のようになります。

SQL クエリ

SELECT u.name, o.id AS order_id, o.amount, o.created_at FROM users u INNER JOIN orders o ON u.id = o.user_id WHERE o.status = 'paid' ORDER BY o.created_at DESC;

ここでのポイントは 3 つです。

  1. JOIN の前後どちらのテーブルに何が含まれているかを最初に確認する
  2. ON 句で「どのカラム同士で結合するか」を必ず明示する
  3. SELECT 句で「u.name」のように所属テーブルを示すと混乱しにくい

「ユーザーは全員残したいが、注文の無いユーザーは注文欄を空にしたい」という場合は LEFT JOIN を使います。集客チームが「未注文ユーザーへの再アプローチリスト」を作る場面でよく出てくる形です。手を動かして体感する場合はSQL 練習問題(JOIN 編) で確認できます。

サブクエリと WITH 句

少し慣れてくると「集計結果に対してさらに条件を付けたい」という場面が出てきます。たとえば「注文回数が 5 回以上のユーザーだけを抽出する」というクエリは、サブクエリで次のように書けます。

SQL クエリ

SELECT * FROM users WHERE id IN ( SELECT user_id FROM orders GROUP BY user_id HAVING COUNT(*) >= 5 );

WHERE 句の中にもう一度 SELECT が入る形をサブクエリと呼びます。ネストが深くなって読みにくいときは、WITH 句(CTE)を使って手順を分けて書くのがおすすめです。

SQL クエリ

WITH heavy_users AS ( SELECT user_id FROM orders GROUP BY user_id HAVING COUNT(*) >= 5 ) SELECT u.* FROM users u INNER JOIN heavy_users h ON u.id = h.user_id;

上から順に読めるため、レビューや引き継ぎの場面でも認識違いを減らせます。実務では WITH 句を使えるかどうかでクエリの保守性が大きく変わるため、JOIN の次に投資する価値があるトピックです。

データ分析で頻出する SQL 関数 10 選

施策評価や調査で繰り返し登場する関数を 10 個だけ挙げると次の通りです。

  • COUNT / SUM / AVG / MAX / MIN — 基本の集計
  • COUNT(DISTINCT カラム) — 重複を除いたユニーク数。MAU・DAU の集計で必須
  • CASE WHEN — 条件分岐で値を組み立てる。セグメント別集計で活躍
  • COALESCE — NULL の場合に既定値を返す。レポートの空欄対策
  • DATE_TRUNC(または DATE_FORMAT)— 日付を月単位・週単位に丸める
  • ROW_NUMBER() OVER(...) — ランキング付け。重複排除のテクニックとしても定番
  • LAG / LEAD — 前後の行を参照する。前月比・前日比の計算で頻出
  • PERCENTILE_CONT — 分位数。中央値や p90 を出すときに使う(PostgreSQL・BigQuery・SQL Server で利用可。MySQL は非対応)

最初は COUNT(DISTINCT) と CASE WHEN だけ覚えれば十分です。残りは「必要になったら覚える」リファレンス的な存在で構いません。

実務での SQL 学習ロードマップ(30 日モデル)

未経験から実務で使えるレベルまでの 30 日学習ステップは次の通りです。

第 1 週は基本構文の習熟に集中します。SELECT/WHERE/ORDER BY/LIMIT のパターンを 30 問ほど解き、無意識に書ける状態を目指します。第 2 週は GROUP BY と集計関数で「対象期間 × カテゴリ別 × 合計」のような 3 軸集計をスムーズに書けるところまで。第 3 週で JOIN を導入し、INNER と LEFT の使い分けを 20 問ほど。第 4 週はサブクエリ・WITH 句・ウィンドウ関数で「分析者が書く SQL」のラインに到達する流れです。

途中で挫折しないコツは「自分のデータで遊ぶ」ことです。サンプル DB だけで進めると飽きが来やすいため、自分が興味のあるデータ(家計簿・読書記録・スプレッドシートに溜まっているメモなど)を CSV にして SQLite に読み込み、自前のクエリで集計してみると一気に楽しくなります。

つまずきポイントと回避策

初学者が共通してぶつかる壁を 5 つに絞って整理しました。

  1. JOIN の方向がわからない — 「左テーブルを全部残したいか」を口に出してから書く。LEFT JOIN の出番は意外と多い
  2. GROUP BY と SELECT のずれ — SELECT に書ける列は GROUP BY に並べた列か集計関数だけ、というルールを最初に体に染み込ませる
  3. NULL の比較で == を使ってしまう — NULL の比較は IS NULL / IS NOT NULL のみ。WHERE col = NULL は常に偽
  4. 重複行が消せない — DISTINCT で済むか、ROW_NUMBER() で 1 件目だけ残すかを使い分ける
  5. 大きすぎる結果が返ってくる — 開発中は LIMIT 100 を必ず付ける。本番でうっかり全件 SELECT すると DB を止めかねない

特に 5 番は実務での事故率が高いので、社内ルールとして「探索 SQL は必ず LIMIT 付き」を最初から守る癖を付けると安全です。コード書き方の悩みはプログラミングのつまずきと解決法もご覧ください。

SQL とプログラミング言語の組み合わせ

SQL 単体でもデータ取得はできますが、Python や JavaScript と組み合わせると活用範囲が一気に広がります。たとえば次のような使い方があります。

  • Python + SQL — Pandas で SQL の結果を読み込み、可視化や機械学習につなげる。データ分析職の標準パターン
  • BI ツール + SQL — Tableau / Looker / Metabase などはバックエンドが SQL。クエリが書けるだけで自由度が一気に上がる
  • アプリ + SQL — Web アプリのバックエンドはほぼ全て SQL を使っている。Python のPythonでできること入門や JavaScript と組み合わせて開発する場面が増える

「分析の SQL」と「アプリの SQL」では設計の力点が違いますが、基本構文は同じです。最初は分析側の SELECT に振り切って学び、慣れてから INSERT/UPDATE/DELETE と設計に踏み込むのが効率的です。

SQL を使った職種別の活用例

SQL は職種を問わず武器になります。具体的な活用シーンを 4 つ挙げます。

マーケターであれば、広告経由ユーザーの定着率を 1 クエリで出し、来週の配分を決められます。営業マネージャーなら、商談化率を担当者別・セグメント別で集計してコーチング材料に使えます。プロダクトマネージャーは、新機能のリリース前後で利用回数の変化を即座に確認できます。エンジニアは、本番障害の調査で「どのリクエストが詰まっていたか」を SQL で追跡できます。

共通するのは「気になったタイミングで自分で取り出せる」という即時性です。データ抽出を他チームに依頼すると数日かかる作業が、SQL を書ければ 10 分で終わります。意思決定の速度を上げたい組織ほど、メンバーの SQL スキルへの投資効果が大きいと言えるでしょう。非エンジニアでも学ぶ価値については非エンジニアがプログラミングを学ぶメリットも参考になります。

よくある質問

Q. SQL は何日くらいで実務レベルになりますか?

毎日 1 時間ほど確保できれば、SELECT/WHERE/GROUP BY/JOIN まで含めて 30 日で「業務で使える」レベルに到達できます。週末だけ手を付ける場合でも 2〜3 ヶ月で同じラインに届きます。重要なのは時間より「自分のデータで書く頻度」です。

Q. SQL と Excel はどう違いますか?

Excel はセル単位で操作する万能ツール、SQL は表(テーブル)単位で操作する分析・処理特化の言語と整理できます。10 万行を超えるとExcelは動作が重くなり手作業もミスが起きやすくなりますが、SQL なら同じ処理が 1 秒で済み、誰が書いても同じ結果を再現できます。両者は競合ではなく、SQL で集計した結果を Excel で見せるという併用が定番です。

Q. MySQL、PostgreSQL、SQL Server のどれから学ぶべきですか?

基本構文の 8 割は共通なので、最初はどれでも構いません。学習用なら無料で導入が簡単な PostgreSQL か SQLite、業務で既に使われている DB があるならそれに合わせるのが最短です。チョットデキルの SQL レッスンは方言の少ない範囲で構成しているため、どの DB に進んでも応用が効きます。

Q. JOIN がどうしても理解できません。コツはありますか?

「どのテーブルを全件残したいか」を最初に決めるのがコツです。両方残したいなら FULL OUTER、左を全件残すなら LEFT、両方に存在する行だけなら INNER。図に描いて確認するとほぼ迷わなくなります。手を動かす練習としてSQL 練習問題で 10 問解くと、感覚が一気に身に付きます。

Q. NoSQL と SQL はどちらを学ぶべきですか?

初学者はまず SQL を優先することをおすすめします。SQL は習得コストの割に応用範囲が広く、データ分析と業務効率化の両面で長期的に効くスキルだからです。NoSQL は特定用途(大規模 Web サービスのキャッシュ層、ログ蓄積など)で強みが出るため、Web 開発に進む段階で並行学習すれば十分です。違いの整理はSQL と NoSQL の違いをご覧ください。

Q. SQL 学習に AI(ChatGPT)を使うのはアリですか?

大いにアリです。書き方を聞く、エラーの意味を聞く、リファクタリングを依頼するなど、特に学習初期の「詰まったときの先生」として活躍します。ただし、生成されたクエリをそのまま本番で実行する前に「対象テーブルと条件を自分で読み直す」一手間は欠かさないでください。AI 活用の基礎はChatGPT で仕事を効率化する実践ガイドも参考になります。

学習に役立つツールと環境

書籍やオンライン教材だけでなく、手を動かす環境をどう揃えるかで学習速度は大きく変わります。初学者におすすめの環境は次の通りです。

まず無料で始めるなら、ブラウザだけで実行できる学習サイトを使うのが最短です。チョットデキルのSQL 基礎コースも環境構築不要で、SELECT から JOIN まで段階的に演習できます。次のステップとして、自前の PC に SQLite または PostgreSQL をインストールし、Sample DB(chinook や sakila)をロードして好きにクエリを投げる練習に進みます。可視化まで通しでやりたい場合は、Metabase や Apache Superset といった OSS の BI ツールに自前 DB を繋ぐと、グラフ化までを 1 時間で体験できます。

クエリの整形には sql-formatter や DBeaver の自動整形機能を活用すると、レビュー時のストレスが激減します。さらに git にクエリを残す習慣を付けると、過去の集計を再利用できるようになり、業務の蓄積効果が時間とともに伸びていきます。

ハンズオン Step-by-Step

SQL Fiddle (SQLite) で、SELECT → JOIN まで 5 分で素振りします。

Step 1. テーブルを 2 つ用意

Schema パネルに次を貼って Build します。users と orders の 2 テーブルが用意できます。

SQL クエリ

CREATE TABLE users (id INTEGER, name TEXT); INSERT INTO users VALUES (1, '田中'), (2, '佐藤'), (3, '鈴木'); CREATE TABLE orders (id INTEGER, user_id INTEGER, amount INTEGER); INSERT INTO orders VALUES (1, 1, 1000), (2, 2, 2500), (3, 1, 500);

Step 2. SELECT で全件確認

それぞれ別々に確認します。

SQL クエリ

SELECT * FROM users; SELECT * FROM orders;

Step 3. INNER JOIN で結合

users と orders を user_id で結合します。

SQL クエリ

SELECT u.name, o.amount FROM users u INNER JOIN orders o ON u.id = o.user_id;

Step 4. LEFT JOIN で「注文していないユーザー」も含める

鈴木 (id=3) は注文がないので、amount は NULL で出ます。これが LEFT JOIN の特徴です。

SQL クエリ

SELECT u.name, o.amount FROM users u LEFT JOIN orders o ON u.id = o.user_id;

Step 5. GROUP BY で集計

ユーザー別の購入合計を出します。

SQL クエリ

SELECT u.name, SUM(o.amount) AS total FROM users u LEFT JOIN orders o ON u.id = o.user_id GROUP BY u.id, u.name;

次は実務寄りに 10 問解く SQL 練習問題 でアウトプット量を増やしましょう。

まとめと次のステップ

SQL は「データを取り出す共通言語」で、学習コストの割に長期リターンが大きいスキルです。SELECT/WHERE/ORDER BY/GROUP BY/JOIN の 5 つを 30 日で押さえれば、業務の調査・施策評価・レポート作成のほぼ全てが自分の手で完結します。

次の一歩としては、まずチョットデキルの SQL 基礎コースで実際に手を動かしてみてください。データベースの基本概念から JOIN まで、ブラウザだけで実行できる短いレッスンが揃っています。自分のデータで遊ぶ段階に入ったら、SQLite に CSV を読み込んで日常の記録を集計してみましょう。「学んだことがすぐに役に立つ」体験が、SQL を長く続けるいちばんの原動力になります。あわせてプログラミング独学完全ロードマップで全体地図を確認しておくと、SQL の位置づけが見えて学習効率がさらに上がります。

次に読むべきリソース

出典・参考リンク

本記事の主張・数値・仕様に関する根拠は、以下の一次情報・公式ドキュメントを参照しています。リンク先の更新により内容が変わる場合があるため、最新情報は各公式サイトで確認してください。

この記事について

  • 監修: 生田 陸人 (LuaGate エンジニア / 大手 IT 企業現役エンジニア)
  • 公開: 2026-05-28
  • 最終更新: 2026-05-28
  • カテゴリ: プログラミング学習
  • 検証環境: PostgreSQL 16 / MySQL 8.x / SQLite 3.45
  • 編集ポリシー: 公式ドキュメント・公的統計を一次情報として優先し、社内エンジニアが実機検証した内容のみを掲載しています。修正提案や事実誤認の指摘は チョットデキル運営 までお寄せください。
01/04