MySQLでよく使用するSQLまとめ
投稿日:2026/02/01
本記事では、よく使うMySQLのSQL を用途別でまとめます。
① SELECT(データ取得)
基本形
SELECT * FROM users;
必要なカラムだけ取得
SELECT id, name, email FROM users;
👉 実務では SELECT * は避けることが多いです。
② WHERE(条件指定)
SELECT * FROM users
WHERE status = 1;
AND / OR
SELECT * FROM users
WHERE status = 1
AND deleted_at IS NULL;
③ ORDER BY(並び替え)
SELECT * FROM posts
ORDER BY created_at DESC;
ASC:昇順DESC:降順(実務ではこっちが多い)
④ LIMIT / OFFSET(件数制御)
SELECT * FROM posts
LIMIT 10 OFFSET 20;
👉 ページネーションで頻出
⑤ INSERT(データ追加)
INSERT INTO users (name, email)
VALUES ('Taro', 'taro@example.com');
複数行INSERT
INSERT INTO tags (name)
VALUES ('PHP'), ('Laravel'), ('MySQL');
⑥ UPDATE(更新)
UPDATE users
SET name = 'Jiro'
WHERE id = 1;
⚠ WHEREを忘れると全件更新される → 実務で最も怖いミス
⑦ DELETE(削除)
DELETE FROM users
WHERE id = 1;
Laravelでは 論理削除(Soft Delete) が多いため、 直接DELETEは少なめです。
⑧ IN / NOT IN(複数条件)
SELECT * FROM users
WHERE id IN (1, 3, 5);
SELECT * FROM users
WHERE status NOT IN (0, 9);
⑨ LIKE(部分一致検索)
SELECT * FROM users
WHERE name LIKE '%tanaka%';
%文字%:部分一致文字%:前方一致
⚠ 大量データではパフォーマンス注意
⑩ BETWEEN(範囲指定)
SELECT * FROM orders
WHERE created_at BETWEEN '2025-01-01' AND '2025-01-31';
⑪ JOIN(テーブル結合)※超重要
INNER JOIN(最頻出)
SELECT posts.title, users.name
FROM posts
INNER JOIN users
ON posts.user_id = users.id;
LEFT JOIN
SELECT users.name, posts.title
FROM users
LEFT JOIN posts
ON users.id = posts.user_id;
👉 「投稿がなくてもユーザーは取得したい」場合
⑫ GROUP BY / COUNT(集計)
SELECT status, COUNT(*) as count
FROM users
GROUP BY status;
管理画面・ダッシュボードで頻出。
⑬ HAVING(集計後の条件)
SELECT user_id, COUNT(*) as post_count
FROM posts
GROUP BY user_id
HAVING post_count >= 5;
- 👉
WHEREは 集計前 - 👉
HAVINGは 集計後
⑭ EXISTS(存在チェック)
SELECT *
FROM users u
WHERE EXISTS (
SELECT 1
FROM posts p
WHERE p.user_id = u.id
);
👉 パフォーマンス改善で使われることあり
⑮ トランザクション(実務必須)
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
エラー時:
ROLLBACK;
👉 決済・在庫処理で必須
⑯ インデックス確認(パフォーマンス)
SHOW INDEX FROM users;
EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';
👉 遅いSQL調査で必ず使う
よくあるNG例
❌ WHEREなしUPDATE/DELETE
UPDATE users SET status = 0;
❌ SELECT * 多用
- 通信量増加
- 可読性低下
まず覚えるべきSQLまとめ
| 優先度 | SQL |
|---|---|
| ★★★ | SELECT / WHERE / JOIN |
| ★★☆ | GROUP BY / ORDER BY |
| ★★☆ | INSERT / UPDATE |
| ★☆☆ | EXISTS / EXPLAIN |
Laravelを使っていてもSQLは必要?
👉 YES
- パフォーマンス調査
- 複雑なJOIN
- 生SQL確認
- バグ調査
Eloquentの裏側はSQLです。