SQL 格式化完全指南:美化、壓縮與除錯技巧

實用工具(更新於 2026年5月31日)

為什麼需要格式化 SQL?

-- ❌ 壓縮為一行,難以閱讀
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;

格式化讓 SQL 的 SELECT → FROM → JOIN → WHERE → ORDER BY 結構一目了然。


使用工具庫 SQL 格式化

操作步驟

  1. 開啟 SQL 格式化工具
  2. 貼上 SQL 語句
  3. 自動美化(關鍵字大寫、縮排對齊)
  4. 也可切換為壓縮模式(去除空白)

支援的 SQL 方言

方言 說明
SQL 標準 SQL
MySQL MySQL 特有語法
PostgreSQL PG 特有語法
SQLite 輕量資料庫
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(節省傳輸)

格式化後的 SQL 用於閱讀,壓縮後的 SQL 用於傳輸:

-- 格式化: 15 行, 380 字元
-- 壓縮: 1 行, 195 字元 (減少 49%)

常見 SQL 格式化問題

字串中的關鍵字不會被大寫

-- ✅ 正確:'select' 在字串中保持不變
SELECT * FROM logs WHERE message LIKE '%select%'

註解保留

SELECT id, name  -- 使用者名稱
FROM users       /* 活躍使用者數 */
WHERE status = 1

格式化工具會保留單行 -- 和區塊 /* */ 註解。


總結

SQL 格式化是資料庫開發者的高效習慣。工具庫 SQL 格式化工具 支援多種 SQL 方言,瀏覽器本機處理,配合 JSON 轉 SQL 工具可以完成從資料到 SQL 的完整工作流。

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