
什么是 SQL 格式化?
SQL 格式化(也称为 SQL 美化或 SQL 漂亮打印)是重构 SQL 查询以遵循一致的缩进、大小写和换行约定的过程。格式良好的 SQL 更易于阅读、调试和维护。
为什么 SQL 格式化很重要
未格式化的 SQL 查询几乎无法理解:
SELECT u.id,u.name,u.email,o.total,o.created_at FROM users u JOIN orders o ON u.id=o.user_id WHERE u.status='active' AND o.total>100 ORDER BY o.created_at DESC LIMIT 20;
格式化后的等价查询:
SELECT
u.id,
u.name,
u.email,
o.total,
o.created_at
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE
u.status = 'active'
AND o.total > 100
ORDER BY o.created_at DESC
LIMIT 20;
格式化版本使查询结构一目了然。
SQL 格式化约定
关键字大小写
SQL 关键字(SELECT、FROM、WHERE、JOIN、ORDER BY)传统上使用大写字母,以区别于标识符(表名/列名)。一些风格指南偏好小写关键字以减少视觉噪音。
缩进
每个主要子句另起一行。子子句(WHERE 中的条件、SELECT 中的列)进行缩进。JOIN 条件通常在 JOIN 关键字下缩进。
逗号位置
两种常见风格:
- 尾随逗号:列在行尾,逗号在下一项之前
- 前导逗号:逗号在每行开头(更容易注释掉最后一项)
别名
表别名可以提高复杂查询的可读性。对于大型查询,短而有意义的别名(u 表示 users,o 表示 orders)优于任意的单个字母。
SQL 方言
不同的数据库系统有其自己的 SQL 变体:
- PostgreSQL:扩展 SQL,支持数组、JSONB、窗口函数、CTE
- MySQL/MariaDB:具有非标准特性,如不带聚合的 GROUP BY
- SQLite:简化的无服务器数据库,有一些限制
- SQL Server (T-SQL):微软的方言,带有过程扩展
- Oracle (PL/SQL):Oracle 的扩展 SQL,带有过程编程
理解方言的格式化工具可以正确保留方言特定的语法。
常见 SQL 查询模式
公用表表达式 (CTE)
WITH active_users AS (
SELECT id, name
FROM users
WHERE status = 'active'
),
high_value_orders AS (
SELECT user_id, SUM(total) AS total_spent
FROM orders
GROUP BY user_id
HAVING SUM(total) > 1000
)
SELECT au.name, hvo.total_spent
FROM active_users au
JOIN high_value_orders hvo ON au.id = hvo.user_id;
窗口函数
SELECT
name,
salary,
department,
RANK() OVER (
PARTITION BY department
ORDER BY salary DESC
) AS salary_rank
FROM employees;
子查询
SELECT name, email
FROM users
WHERE id IN (
SELECT DISTINCT user_id
FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days'
);
SQL 代码检查
除了格式化,SQL 检查器还会检查常见错误:
- 生产代码中的 SELECT *(检索不必要的列)
- UPDATE/DELETE 缺少 WHERE 子句(影响所有行)
- JOIN 中的隐式列引用(歧义)
- WHERE 子句中阻止索引使用的函数
- 降低可移植性的非 ANSI SQL
使用 SQL 格式化工具
我们的工具:
- 粘贴任何 SQL 查询 — 处理 SELECT、INSERT、UPDATE、DELETE、CREATE 等
- 即时格式化 — 应用一致的缩进和换行
- 方言支持 — 针对 PostgreSQL、MySQL、SQL Server 或标准 SQL 进行优化
- 关键字大小写 — 选择大写、小写或保留原样
- 缩进样式 — 2 空格、4 空格或制表符
- 复制格式化后的 SQL — 一键复制,立即使用
用于在提交到版本控制之前提高复杂查询的可读性,格式化从日志或错误消息中复制的查询,以及标准化团队中的 SQL 风格。