Tech Starlog

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です。