概要
このチートシートでは、初心者が最初によく使うSQLの形だけをまとめます。高度なウィンドウ関数、CTE、複雑な最適化は扱いません。
まずはSELECT、WHERE、JOIN、GROUP BY、変更系SQLの安全な形を覚えます。
最初に覚える最小セット
| 目的 | 基本形 |
|---|---|
| 全件を見る | SELECT * FROM table_name; |
| 列を選ぶ | SELECT col1, col2 FROM table_name; |
| 条件で絞る | SELECT * FROM table_name WHERE col = value; |
| 並び替える | ORDER BY col DESC |
| 件数を絞る | LIMIT 10 |
| つなぐ | JOIN other ON a.id = b.a_id |
| 集計する | GROUP BY col |
SELECT
必要な列だけ取得します。
SELECT id, name, email
FROM users;
学習中は SELECT * も便利ですが、慣れてきたら列を明示します。
WHERE
条件に合う行だけ取得します。
| 目的 | SQL |
|---|---|
| 一致 | WHERE status = 'active' |
| 不一致 | WHERE status <> 'deleted' |
| 以上 | WHERE age >= 20 |
| 範囲 | WHERE price BETWEEN 1000 AND 5000 |
| リスト | WHERE status IN ('paid', 'shipped') |
| NULL | WHERE deleted_at IS NULL |
NULL判定は = NULL ではなく IS NULL を使います。
ORDER BY / LIMIT
新しい順に10件取得します。
SELECT id, title, created_at
FROM posts
ORDER BY created_at DESC
LIMIT 10;
LIMIT だけでは順番は決まりません。必要なら ORDER BY を付けます。
JOIN
ユーザーと注文をつなぎます。
SELECT users.name, orders.total
FROM users
INNER JOIN orders ON users.id = orders.user_id;
| JOIN | 使いどころ |
|---|---|
INNER JOIN | 関連データがあるものだけ出す |
LEFT JOIN | 左側の一覧を残したい |
注文がないユーザーも表示したい場合は LEFT JOIN です。
SELECT users.name, orders.total
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
GROUP BY
ユーザーごとの注文数を数えます。
SELECT user_id, COUNT(*) AS order_count
FROM orders
GROUP BY user_id;
集計後に絞る場合は HAVING を使います。
SELECT user_id, COUNT(*) AS order_count
FROM orders
GROUP BY user_id
HAVING COUNT(*) >= 2;
INSERT
行を追加します。
INSERT INTO users (name, email)
VALUES ('Sato', 'sato@example.com');
UPDATE
行を更新します。
UPDATE users
SET email = 'new-sato@example.com'
WHERE id = 1;
UPDATEの前には、同じWHERE条件でSELECTして対象を確認します。
DELETE
行を削除します。
DELETE FROM users
WHERE id = 1;
WHERE なしの DELETE は全行削除になります。
安全確認パターン
変更前に対象を確認します。
SELECT *
FROM users
WHERE id = 1;
問題なければ、同じ条件で更新します。
UPDATE users
SET active = false
WHERE id = 1;
まとめ
初心者が最初に覚えるSQLは、SELECT、WHERE、ORDER BY、LIMIT、JOIN、GROUP BY、INSERT、UPDATE、DELETE です。変更系SQLは、必ず先に SELECT で対象を確認します。