SQLフォーマット完全ガイド:整形・圧縮・デバッグのコツ

ユーティリティ(更新: 2026年5月31日)

なぜ SQL を整形するか

-- ❌ 1行に潰されて読みにくい
SELECT u.id,u.name,o.total FROM users u JOIN orders o ON u.id=o.user_id WHERE o.status='paid' AND o.created_at>'2024-01-01' ORDER BY o.total DESC LIMIT 10;

-- ✅ 整形後は構造が明確
SELECT
  u.id,
  u.name,
  o.total
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.status = 'paid'
  AND o.created_at > '2024-01-01'
ORDER BY o.total DESC
LIMIT 10;

整形すると SELECT → FROM → JOIN → WHERE → ORDER BY の流れが一目で分かります。


ToolsKu の SQL フォーマッター

手順

  1. SQL フォーマットツール を開く
  2. SQL を貼り付け
  3. 自動整形(キーワード大文字、インデント揃え)
  4. 圧縮モードに切り替えて空白を除去も可能

対応 SQL 方言

方言 説明
SQL 標準 SQL
MySQL MySQL 固有構文
PostgreSQL PG 固有構文
SQLite 軽量 DB
T-SQL SQL Server
PL/SQL Oracle

整形の規約

キーワードは大文字

SELECT, FROM, WHERE, JOIN, ON, AND, OR, ORDER BY, GROUP BY, HAVING, LIMIT

インデント規則

SELECT
  column1,
  column2,
  CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ELSE default_result
  END AS calculated
FROM table1
  JOIN table2 ON table1.id = table2.ref_id
WHERE status = 'active'
  AND created_at >= '2024-01-01'
GROUP BY column1, column2
HAVING COUNT(*) > 5
ORDER BY column1 DESC;

サブクエリのインデント

SELECT *
FROM (
  SELECT
    user_id,
    SUM(amount) AS total
  FROM orders
  WHERE status = 'paid'
  GROUP BY user_id
) AS user_totals
WHERE total > 1000;

実践シーン

1. ログ内 SQL のデバッグ

本番ログは圧縮された SQL を出力することが多い:

[2024-06-01 10:00:00] QUERY: SELECT * FROM users WHERE email='test@example.com' AND deleted_at IS NULL

SQL フォーマットツール にコピーして整形・分析。

2. ORM が生成した SQL

// Sequelize / TypeORM の SQL は未整形のことが多い
console.log(query.getSql());
// → SELECT `User`.`id`, `User`.`name` FROM `users` AS `User` WHERE ...

整形して ORM が実際に実行するクエリを把握。

3. JSON から SQL へ

API が JSON 配列を返し、INSERT が必要な場合:

[
  {"name": "Alice", "age": 30},
  {"name": "Bob", "age": 25}
]

JSON から SQL で自動生成:

INSERT INTO users (name, age) VALUES ('Alice', 30);
INSERT INTO users (name, age) VALUES ('Bob', 25);

4. SQL を圧縮(転送量削減)

整形版は読む用、圧縮版は転送用:

-- 整形: 15 行, 380 文字
-- 圧縮: 1 行, 195 文字 (49% 削減)

よくある SQL 整形の問題

文字列内のキーワードは大文字化されない

-- ✅ 正しい:文字列内の 'select' はそのまま
SELECT * FROM logs WHERE message LIKE '%select%'

コメントは保持

SELECT id, name  -- ユーザー名
FROM users       /* アクティブユーザー数 */
WHERE status = 1

-- 行コメントと /* */ ブロックコメントは保持されます。


まとめ

SQL 整形は DB 開発者の効率的な習慣です。ToolsKu の SQL フォーマットツール は複数方言に対応し、ブラウザ内で処理。JSON から SQL と組み合わせれば、データから SQL までのワークフローが完結します。

#SQL#格式化#数据库#查询优化#开发