「SQLって前に勉強したのに、いざ仕事で書こうとすると全然思い出せない…」
そんなモヤッとした経験、きっとありますよね。SELECT の書き方すら「あれ? どれから書くんだっけ?」ってなりがちですし、JOINなんてさらに記憶の彼方に飛んでいきます。
でもご安心ください!
この記事では、実務でほんとうによく使う SQL を“そのまま使えるサンプル”だけにしぼってまとめています。しかも、1つひとつに「こういう場面で使いますよ」という実務イメージつき。コピペして数字がちゃんと動けば、「あ、自分SQL書けるじゃん!」って一気に自信がつきます。
「売上の集計ってどう書くの?」
「最新のデータだけ取りたいんだけど?」
「JOINってどれ使えばいいの?」
こんな疑問もこの記事でスッキリ解決します。
むずかしい専門用語はできるだけ使わず、小学生でも読めるくらいのテンションで説明していくので、安心して読み進めてくださいね。

それでは、今日から使える“実務SQLの定番サンプル”を一緒にサクッと身につけていきましょう!
SQLの基本文を“最小セット”で思い出せるようにする
SQLって、単体の構文だけ覚えても、いざ実務で書こうとすると「あれ? 次なに書くんだっけ?」ってなりやすいんですよね。
そこでおすすめなのが、“4行セット”で覚える方法です。これだけで初心者さんがつまずくポイントの半分くらいは一気にスッキリします。
まずは、実務でいちばん使うベーシックなテンプレがこちらです。
SELECT 列名
FROM テーブル名
WHERE 条件
ORDER BY 並び替え条件
LIMIT 件数;
これ、ほぼ毎日見るレベルの“基礎中の基礎セット”です。
大事なのは、「上から順番に書くだけで、それっぽいSQLが完成する」ということなんです。
◆ SELECT の実務テンプレ
例えば、商品テーブル(products)があって、商品ID・名前・価格が入っているとします。
SELECT product_id, name, price
FROM products;
これだけで OK。
最初のうちは、「SELECT → FROM の2行コンビで最低限動く」という感覚を持つだけでも楽になります。
◆ WHERE をつけると一気に“実務っぽさ”が出る
「1,000円以上の商品だけ知りたい!」というときはこうです。
SELECT product_id, name, price
FROM products
WHERE price >= 1000;
WHERE は“しぼりこみ”。
実務では「日付の条件」「ユーザーの条件」など、ほぼ毎回使われます。
SELECT product_id, name, price
FROM products
WHERE price >= 1000;
◆ ORDER BY で並べ替え
「高い商品から順に見たいです〜」ならこちら。
SELECT product_id, name, price
FROM products
WHERE price >= 1000
ORDER BY price DESC;
DESC は“高い順”、ASC は“安い順”。
ここもセットで覚えちゃうとラクです。
◆ LIMIT で“必要なぶんだけ”
「とりあえず上位5件だけでいいや」というときの必需品。
SELECT product_id, name, price
FROM products
ORDER BY price DESC
LIMIT 5;
LIMIT は検索結果をコンパクトにする便利屋さん。
実務では“ざっくりチェック”するときにめちゃくちゃ使います。
◆ 結論:4行セットで覚えるのが最強

この流れさえ体で覚えてしまえば、SQLはもう怖くないです。
次の章では、初心者さんが必ずつまずく JOIN を、図イメージつきでわかりやすく整理していきますね!
よく使うJOIN(INNER・LEFT)を図で理解する
JOIN って、初心者さんがほぼ確実に「うっ…むずい…」ってなるポイントなんですよね。
でも実は、“2つのテーブルをくっつけるだけ” なんです。
ここでは、テーブルを丸で表した図をイメージしながら、INNER と LEFT の違いをサクッと理解しちゃいましょう!
◆ INNER JOIN は「重なっているところだけ」

INNER JOIN は、両方のテーブルにデータがある部分だけ取る JOIN です。
売上テーブル(sales)と商品テーブル(products)を例にするとこうなります。
SELECT s.sale_id, s.product_id, p.name, p.price
FROM sales AS s
INNER JOIN products AS p
ON s.product_id = p.product_id;
実務では、「売上の内容を知りたいけど、ちゃんと商品マスタに登録されているものだけ集計したい」みたいなときに使われます。
◆ LEFT JOIN は「左のテーブルをまるごと残す」
あ
LEFT JOIN は、左側のテーブルのデータを全部取り、右側にない場合は NULL を入れる という動きです。
SELECT s.sale_id, s.product_id, p.name, p.price
FROM sales AS s
LEFT JOIN products AS p
ON s.product_id = p.product_id;
これ、実務ではめちゃくちゃ使います。
たとえば「売上は入ってるけど、商品マスタに未登録の商品が混じっているかチェックしたい!」みたいなときに大活躍します。
NULL になっている行が“未登録商品”だと一目でわかるんです。
◆ INNER と LEFT の違いを一言でまとめると…

この2つをしっかりイメージで区別できるようになると、JOIN が一気に苦手じゃなくなります。
次の章では、実務で必ず使う 売上集計(GROUP BY × SUM/COUNT) をテンプレでまとめていきますね!
GROUP BY と集計関数の“仕事で使う形”を理解する
分析系の仕事をしている人なら、ほぼ毎日見るのが GROUP BY と SUM / COUNT などの集計関数です。
でも初心者さんは「GROUP BY ってどこに書くの?」「SUM って何を足してるの?」みたいに、パッと形が思い出せないことが多いんですよね。
そこでここでは、実務でよく使う“売上テーブル(sales)”を例にして、テンプレで一発思い出せる形にまとめていきます。
◆ 売上集計(SUM・COUNT)はこの形だけ覚えればOK
まずは、商品ごとに売上金額を集計したいパターンです。
(sales には product_id, quantity, price, sale_date が入っている想定です)
SELECT
product_id,
SUM(quantity * price) AS total_amount,
COUNT(*) AS sale_count
FROM sales
GROUP BY product_id;
このテンプレさえ覚えておけば、たいていの集計は書けます。
ポイントはたった2つです。
- SELECT に書いた“集計しない列”は GROUP BY にも書く
- SUM(COUNT…) などの集計関数は SELECT に書く
これだけでOK。
最初は「GROUP BY に書く列=グループ分けの軸」とだけ理解しておけば十分です!
◆ 日付ごとの集計(例:日別売上)
「1日あたりの売上推移を見たい」というシーンもめちゃくちゃ多いです。
これもテンプレで覚えちゃいましょう。
SELECT
sale_date,
SUM(quantity * price) AS daily_amount,
COUNT(*) AS daily_count
FROM sales
GROUP BY sale_date
ORDER BY sale_date;
日別集計のポイントは、ORDER BY sale_date をつけてあげること。
これで日付順にキレイに並んで、グラフにもそのまま流し込みやすくなります。
◆ 応用パターン:MAX・MIN も同じノリで使える
「1日の中で一番高い商品は?」「最大注文数は?」みたいなときは MAX / MIN を入れ替えるだけです。
SELECT
sale_date,
MAX(price) AS max_price
FROM sales
GROUP BY sale_date;
集計関数は名前の通りなので、深く考えなくてOKです!
◆ 結論:GROUP BY は“軸を決める装置”
難しく考えず、
「何でグループに分けたい?(日付? 商品? 顧客?)」
だけ決めれば、あとは SUM / COUNT を並べるだけで実務SQLになります。

次の章では、多くの初心者さんが苦手な サブクエリ と、事故りやすい UPDATE/DELETE の安全な書き方 をわかりやすく整理していきますね!
サブクエリと更新系SQL(INSERT/UPDATE/DELETE)の安全テンプレート
SQL を触り始めたばかりの方がよくつまずくのが、サブクエリ と UPDATE/DELETE です。
どちらも一見むずかしそうに見えるんですが、じつは「形」を覚えちゃえばグッと楽になります。
そして同時に“怖い事故”を防ぐこともできます。
◆ サブクエリは「1行のミニテーブルを作る装置」
サブクエリって聞くと急に難易度が上がった気がしますが、イメージはとてもシンプルで、
“自分で作ったミニテーブルを、外側のSQLから使う”
というだけなんです。
例えば、「売上の中で一番高い金額の商品だけ取りたい!」という場合はこうなります。
SELECT *
FROM sales
WHERE price = (
SELECT MAX(price)
FROM sales
);
この (SELECT MAX(price) FROM sales) の部分が“1行だけのミニテーブル”として働いてくれるイメージです。
最初は “外側の WHERE が使うための値を、内側で計算してるんだな〜” くらいの理解でOKです。
◆ UPDATE / DELETE は「絶対に WHERE を書く」が鉄則
ここは本当に大事です!
UPDATE や DELETE は、SQL の中でも一番事故が起きやすい場所です。
▼ やってはいけない例(恐怖)
DELETE FROM users;
→ 全削除(リアル事故でよくある…)
UPDATE users SET status = 'inactive';
→ 全ユーザーが inactiveになる(これも実例多数…)
なので、必ず WHERE を書く → その WHERE が正しいかを SELECT で確認する この2ステップが安全ルールです。
◆ 安全テンプレート(実務ではこれだけでOK)
▼ UPDATE の安全テンプレ
-- ① まず SELECT で対象を確認
SELECT *
FROM users
WHERE user_id = 123;
-- ② 問題なければ UPDATE を実行
UPDATE users
SET status = 'inactive'
WHERE user_id = 123;
▼ DELETE の安全テンプレ
-- ① 対象データが想定通りかチェック
SELECT *
FROM sales
WHERE sale_id = 999;
-- ② DELETE は必ず WHERE 付き
DELETE FROM sales
WHERE sale_id = 999;
この「確認 SELECT → 本番 UPDATE/DELETE」の流れが身につけば、データ事故はほぼ防げます。
◆ INSERT も基本形だけ覚えれば十分
INSERT は比較的シンプルで、以下の形を覚えておけばOKです。
INSERT INTO products (name, price)
VALUES ('サンプル商品', 1200);
列名と値の順番が対応していれば問題ありません。
◆ 結論:サブクエリは“ミニテーブル”、更新系は“安全テンプレ”

これだけ覚えておけば、実務で怖い思いをする確率が一気に下がります。
これでひと通りのSQLの“実務テンプレ”がそろいましたので、あとは手を動かしながら自分のものにしていくだけですよ!
よくある質問
- QSQLって全部覚えないとダメなんですか?
- A
いえ、全然そんなことないです!
まずは SELECT / JOIN / GROUP BY / WHERE / ORDER BY の“基本5つ”だけ動かせれば、実務では十分やっていけます。
- QSELECTの順番って入れ替えたらダメなんですか?
- A
基本NGです。
SQLは「SELECT → FROM → WHERE → GROUP BY → ORDER BY → LIMIT」という流れが決まっているので、順番どおりに書くのがいちばん安全です。
- QJOINって種類が多くて覚えきれません…
- A
まずは INNER JOIN と LEFT JOIN の2つ だけ覚えればOKです!
実務で8割以上はこの2つで足ります。
- QLEFT JOIN の NULL ってなんですか?
- A
「右側のテーブルにデータがなかったよ〜」という合図です。
抜け漏れチェックにも使える超便利なサインです。
- QGROUP BY の列を SELECT にも書くって本当?
- A
はい、本当です!
「集計していない列はGROUP BYに必ず書く」
これだけ覚えていればトラブルを防げます。
- QSUM と COUNT の違いがいまだにわかりません…
- A
この2つだけ理解していればOKです!
- Qサブクエリって難しすぎません?
- A
イメージとしては、
「ちっちゃいテーブルを自分で作って、それを外側で使う」
これだけです。意外と単純ですよ!
- QUPDATE と DELETE が怖いです…
- A
めちゃくちゃわかります。
なので、- まず SELECT で対象を確認
- WHERE を付けて UPDATE/DELETE を実行
この2ステップを守れば事故率はほぼゼロにできます。
- QINSERT のとき、列名は毎回書いたほうがいいですか?
- A
はい、書いたほうが絶対安全です。
テーブルの列が増えたときでも間違いにくくなります。
- QSQLを早く上達するコツってありますか?
- A
“テンプレをそのまま使い倒す” ことです!
SQLは暗記よりも、「毎回同じ形で書く」ほうが圧倒的に上達が早いです。



