SQL 格式化器和验证器:清理、格式化和检查 SQL 语法

格式化 SQL 查询,使用适当的缩进和大小写,同时验证语法。使您的数据库查询立即可读且无错误。

SQL 格式化和验证工具

一个简单的工具,用于格式化和验证您的 SQL 查询,提供适当的缩进和语法检查。

复制
请输入 SQL 查询以查看格式化结果。
📚

文档说明

SQL 格式化器与验证器

介绍

SQL 格式化器与验证器是一个强大且用户友好的在线工具,旨在帮助开发人员、数据库管理员和 SQL 初学者高效地格式化和验证他们的 SQL 查询。这个免费的工具会根据标准 SQL 语法规则自动格式化 SQL 命令,确保适当的缩进、大小写和空格,使您的查询更具可读性和可维护性。此外,它还执行验证检查,以识别在您执行查询之前可能存在的常见语法错误,从而节省数小时的调试时间。无论您是在编写复杂的数据库查询、学习 SQL 还是仅仅需要清理杂乱的 SQL 代码,这个格式化器和验证器都提供了一个直观的界面,可以立即改善您的 SQL 工作流程。

如何使用此工具

使用 SQL 格式化器与验证器非常简单:

  1. 输入您的 SQL 查询:在输入文本区域中输入或粘贴您的 SQL 查询。
  2. 自动格式化:该工具会实时自动格式化您的 SQL,并在输出区域显示结果。
  3. 验证:该工具会自动检查您的 SQL 是否存在语法错误,并显示发现的任何问题。
  4. 复制格式化后的 SQL:点击“复制”按钮将格式化后的 SQL 复制到剪贴板,以便在您的应用程序或数据库工具中使用。

该界面设计直观且响应迅速,能够在桌面和移动设备上无缝工作。

SQL 格式化功能

自动关键字大写

格式化器会自动将 SQL 关键字(如 SELECT、FROM、WHERE、JOIN 等)大写,使其与表名和列名区分开。这提高了可读性,并遵循标准 SQL 风格规范。

适当的缩进

SQL 查询根据其逻辑结构进行缩进:

  • 主子句(SELECT、FROM、WHERE 等)从左边缘开始
  • JOIN 子句在 FROM 下缩进
  • SELECT 语句中的列对齐
  • 嵌套查询获得额外的缩进级别
  • WHERE 子句中的条件适当对齐

换行和空格

格式化器在查询的逻辑点插入换行:

  • 每个主子句(SELECT、FROM、WHERE 等)之后
  • 在逗号分隔的列表中的项目之间
  • 在子查询之前和之后
  • 在 CASE 语句组件之间

还会在运算符、括号和子句之间添加适当的空格,以增强可读性。

SQL 验证功能

验证器检查常见的 SQL 语法错误并提供清晰的反馈:

语法错误检测

  • 不平衡的括号:检测缺失的开括号或闭括号
  • 未闭合的引号:识别未闭合的字符串文字
  • 缺失的分号:检查语句是否以分号结束
  • 子句顺序:验证 SQL 子句是否按正确顺序出现

常见 SQL 错误

验证器还识别常见的逻辑错误:

  • 没有 ON 条件的 JOIN:检测缺少 ON 条件的 JOIN 子句
  • 不完整的 WHERE 条件:识别具有不完整谓词的 WHERE 子句
  • 没有 GROUP BY 的 HAVING:捕捉没有相应 GROUP BY 的 HAVING 子句
  • 空子句:检测空的 GROUP BY、ORDER BY 或其他子句

验证反馈

当检测到错误时,会以清晰、用户友好的格式显示:

  • 每个错误都列出描述性消息
  • 错误类型被识别
  • 可能提供修复错误的建议

SQL 格式化规则

SQL 格式化器遵循以下特定规则,以确保一致、可读的 SQL:

关键字大写

所有 SQL 关键字均大写,包括:

  • 语句类型:SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP
  • 子句:FROM、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT
  • 连接:JOIN、INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN
  • 运算符:AND、OR、NOT、IN、BETWEEN、LIKE、IS NULL
  • 函数:COUNT、SUM、AVG、MAX、MIN、CASE、WHEN、THEN、ELSE、END

缩进和换行

  • 主子句在新行的开始
  • 子查询缩进为每个嵌套级别两个空格
  • 逗号分隔的列表每个项目在新行上,并适当缩进
  • JOIN 子句在 FROM 子句下缩进
  • WHERE 子句中的条件对齐以提高可读性

示例:格式化前和格式化后

格式化前:

1select u.id, u.name, o.order_date from users u join orders o on u.id = o.user_id where o.status = "completed" group by u.id order by u.name;
2

格式化后:

1SELECT
2  u.id,
3  u.name,
4  o.order_date
5FROM users u
6  JOIN orders o ON u.id = o.user_id
7WHERE
8  o.status = "completed"
9GROUP BY
10  u.id
11ORDER BY
12  u.name;
13

SQL 验证规则

验证器检查以下问题:

结构验证

  • 平衡括号:每个开括号必须有一个匹配的闭括号
  • 引号字符串:所有引号(单引号或双引号)必须正确闭合
  • 语句终止:SQL 语句应以分号结束
  • 子句顺序:子句必须按正确顺序出现(FROM 在 SELECT 之后,WHERE 在 GROUP BY 之前等)

语义验证

  • JOIN 条件:每个 JOIN 必须具有 ON 或 USING 子句
  • WHERE 条件:WHERE 子句必须具有完整条件
  • GROUP BY 要求:HAVING 子句需要 GROUP BY 子句
  • 列引用:在使用聚合时,SELECT 中引用的列必须包含在 GROUP BY 中

示例:验证错误

无效 SQL 及错误:

1SELECT user_id, COUNT(*) FROM orders
2JOIN users
3WHERE status = 
4GROUP BY
5HAVING count > 10;
6

验证错误:

  1. JOIN 缺少 ON 条件
  2. 不完整的 WHERE 条件
  3. 空的 GROUP BY 子句
  4. HAVING 子句引用未定义的列

用例

SQL 格式化器与验证器在多个场景中都非常有价值:

数据库开发

  • 代码审查:在代码审查之前格式化 SQL,以确保可读性
  • 调试:在执行查询之前识别语法错误
  • 文档:生成格式良好的 SQL 以用于技术文档
  • 遗留代码维护:清理和标准化旧的 SQL 查询

教育与学习

  • SQL 培训:帮助学生学习正确的 SQL 格式化规范
  • 自学:在学习数据库编程时验证 SQL 语法
  • 教学:在教育环境中演示正确的 SQL 结构和格式化
  • 技能发展:练习编写语法正确的 SQL 查询

团队协作

  • 标准化:确保开发团队之间的 SQL 格式一致
  • 知识共享:使复杂查询对团队成员更易理解
  • 代码质量:改善共享代码库中的整体 SQL 代码质量
  • 入职培训:帮助新团队成员理解现有 SQL 查询

数据库管理

  • 查询优化:在优化之前格式化复杂查询
  • 脚本管理:维护可读的数据库维护脚本
  • 迁移脚本:确保数据库迁移 SQL 的正确性
  • 审计准备:清理 SQL 查询以便合规审计

替代方案

虽然我们的 SQL 格式化器与验证器提供了基本功能,但还有其他替代方案可供考虑:

集成开发环境(IDE)

  • SQL 专用 IDE:如 DataGrip、SQL Server Management Studio 或 MySQL Workbench 提供内置的格式化和验证
  • 优点:与数据库连接、执行和其他功能集成
  • 缺点:通常需要安装,可能昂贵,并且可能占用资源

数据库特定工具

  • PostgreSQL:pgFormatter,psql 的 \e 命令
  • MySQL:MySQL Workbench 格式化器
  • SQL Server:SSMS 格式化选项
  • 优点:针对特定 SQL 方言进行了优化
  • 缺点:在不同数据库系统之间不可移植

代码编辑器扩展

  • VS Code 扩展:SQL Beautify、SQL Formatter
  • Sublime Text 包:SqlBeautifier
  • 优点:与您的开发环境集成
  • 缺点:可能需要配置,并非总是可以在线使用

命令行工具

  • sqlformat:基于 Python 的 SQL 格式化工具
  • sql-formatter-cli:基于 Node.js 的格式化工具
  • 优点:可以集成到 CI/CD 管道中
  • 缺点:需要安装和命令行知识

SQL 格式化与验证的历史

SQL 标准的演变

SQL(结构化查询语言)于 1970 年代在 IBM 开发,首个商业实现于 1979 年发布。美国国家标准协会(ANSI)于 1986 年发布了首个 SQL 标准,随后国际标准化组织(ISO)于 1987 年发布。

随着 SQL 通过多个标准(SQL-86、SQL-89、SQL-92、SQL:1999、SQL:2003、SQL:2008、SQL:2011、SQL:2016 和 SQL:2019)不断演变,格式化实践也发展起来,以改善代码的可读性和可维护性。

SQL 格式化规范的发展

在 SQL 的早期,格式化不一致,主要基于个人偏好。随着数据库系统变得更加复杂,团队开发变得普遍,标准化格式化的需求也随之增长。

SQL 格式化历史上的关键里程碑:

  • 1990 年代:早期 SQL 风格指南开始在组织中出现
  • 2000 年代初:对象关系映射(ORM)工具的兴起增加了对 SQL 生成和格式化的兴趣
  • 2010 年代:随着网络应用程序的增长,在线 SQL 格式化工具变得流行
  • 现在:自动格式化现已被视为数据库开发的最佳实践

SQL 验证的演变

SQL 验证已经从简单的语法检查演变为更复杂的分析:

  • 早期数据库系统:提供基本的错误消息以处理语法问题
  • 1990 年代至 2000 年代:专用 SQL 解析器和验证器的开发
  • 2010 年代:将 SQL 验证集成到开发工作流程和 CI/CD 管道中
  • 现在:AI 辅助的 SQL 验证可以建议改进并检测潜在的性能问题

代码示例

示例 1:基本 SELECT 查询

未格式化:

1select id, first_name, last_name, email from customers where status = 'active' order by last_name, first_name;
2

格式化后:

1SELECT
2  id,
3  first_name,
4  last_name,
5  email
6FROM
7  customers
8WHERE
9  status = 'active'
10ORDER BY
11  last_name,
12  first_name;
13

示例 2:JOIN 查询

未格式化:

1select c.id, c.name, o.order_date, o.total_amount from customers c left join orders o on c.id = o.customer_id where o.order_date >= '2023-01-01' and o.status != 'cancelled' order by o.order_date desc;
2

格式化后:

1SELECT
2  c.id,
3  c.name,
4  o.order_date,
5  o.total_amount
6FROM
7  customers c
8  LEFT JOIN orders o ON c.id = o.customer_id
9WHERE
10  o.order_date >= '2023-01-01'
11  AND o.status != 'cancelled'
12ORDER BY
13  o.order_date DESC;
14

示例 3:包含子查询的复杂查询

未格式化:

1select d.department_name, (select count(*) from employees e where e.department_id = d.id) as employee_count, (select avg(salary) from employees e where e.department_id = d.id) as avg_salary from departments d where d.active = true having employee_count > 0 order by avg_salary desc;
2

格式化后:

1SELECT
2  d.department_name,
3  (
4    SELECT
5      COUNT(*)
6    FROM
7      employees e
8    WHERE
9      e.department_id = d.id
10  ) AS employee_count,
11  (
12    SELECT
13      AVG(salary)
14    FROM
15      employees e
16    WHERE
17      e.department_id = d.id
18  ) AS avg_salary
19FROM
20  departments d
21WHERE
22  d.active = TRUE
23HAVING
24  employee_count > 0
25ORDER BY
26  avg_salary DESC;
27

程序化 SQL 格式化

以下是如何在各种编程语言中实现 SQL 格式化的示例:

1// JavaScript SQL 格式化示例,使用 sql-formatter 库
2const sqlFormatter = require('sql-formatter');
3
4function formatSQL(sql) {
5  return sqlFormatter.format(sql, {
6    language: 'sql',
7    uppercase: true,
8    linesBetweenQueries: 2,
9    indentStyle: 'standard'
10  });
11}
12
13const rawSQL = "select id, name from users where status='active'";
14const formattedSQL = formatSQL(rawSQL);
15console.log(formattedSQL);
16

常见问题解答

什么是 SQL 格式化?

SQL 格式化是将 SQL 代码结构化的过程,确保适当的缩进、换行和大小写,以使其更具可读性和可维护性。良好的 SQL 格式化遵循已建立的规范,如关键字大写、将子句放在单独的行上,以及对嵌套结构使用一致的缩进。

我为什么要格式化我的 SQL 查询?

格式化 SQL 查询带来了几个好处:

  • 提高可读性,使复杂查询更易于理解
  • 更容易调试和维护
  • 更好地与团队成员协作
  • 降低语法错误的可能性
  • 在项目中保持一致的代码风格
  • 在文档和演示中呈现专业外观

此格式化器支持哪些 SQL 方言?

此 SQL 格式化器支持标准 SQL 语法,适用于大多数主要数据库系统,包括:

  • MySQL
  • PostgreSQL
  • SQL Server (T-SQL)
  • Oracle
  • SQLite
  • MariaDB

虽然格式化器很好地处理标准 SQL,但某些特定于方言的功能可能无法得到最佳格式化。

验证器是否检查所有可能的 SQL 错误?

验证器检查常见的语法错误和结构问题,但无法检测所有可能的错误,特别是与:

  • 数据库特定的语法变体
  • 对象存在性(表、列等)
  • 数据类型兼容性
  • 性能问题
  • 业务逻辑问题

最好将其作为在数据库中执行查询之前的第一道防线。

我可以自定义格式化样式吗?

目前,格式化器使用基于广泛接受的 SQL 规范的标准样式。未来版本可能会包括以下自定义选项:

  • 缩进宽度
  • 关键字大写偏好
  • 换行位置
  • 逗号位置(前导与后续)
  • 括号格式

使用此工具时我的 SQL 数据安全吗?

是的,此工具完全在您的浏览器中处理所有 SQL 查询。您的 SQL 查询从未发送到任何服务器或存储在任何地方。这使得使用敏感或专有 SQL 代码时非常安全。

我如何格式化非常大的 SQL 查询?

对于非常大的 SQL 查询:

  1. 将整个查询粘贴到输入区域
  2. 工具会自动处理,尽管对于复杂查询可能需要一段时间
  3. 对于极大的查询(超过 10,000 个字符),您可能会注意到处理延迟

我可以离线使用此工具吗?

此基于网络的工具需要互联网连接以进行初始加载。然而,一旦加载,它将在您的浏览器中完全运行。对于完全离线使用,可以考虑:

  • SQL 格式化的浏览器扩展
  • 具有格式化功能的桌面 SQL IDE
  • 命令行 SQL 格式化工具

验证器如何处理不同的 SQL 版本?

验证器专注于 SQL 版本(SQL-92 及更高版本)之间的通用语法元素。它可能无法识别某些特定于最新 SQL 标准或专有扩展的功能。对于版本特定的验证,请考虑使用数据库供应商提供的工具。

我可以将此格式化器与我的 IDE 或工作流程集成吗?

虽然此网络工具不提供直接集成,但许多 IDE 通过扩展或插件具有类似的格式化功能。对于自动化工作流程,可以考虑命令行工具,如:

  • sqlformat(Python)
  • sql-formatter-cli(Node.js)
  • pgFormatter(特定于 PostgreSQL)

参考文献

  1. "SQL 风格指南" by Simon Holywell. https://www.sqlstyle.guide/
  2. "SQL Pretty Printer SQL 格式化标准。" https://www.sqlshack.com/sql-formatting-standards-sql-pretty-printer/
  3. "SQL:2016 标准。" 国际标准化组织。 https://www.iso.org/standard/63555.html
  4. "格式化 SQL 代码。" PostgreSQL 文档。 https://www.postgresql.org/docs/current/sql-syntax.html
  5. "SQL Server T-SQL 格式化标准。" 微软文档。 https://docs.microsoft.com/en-us/sql/t-sql/

今天就试用我们的 SQL 格式化器与验证器,提升您的 SQL 代码质量、可读性和正确性!