- 在编写 SQL 脚本时:直接使用 Enter 键换行,SQL 语句中的换行、空格和缩进通常被忽略(字符串和注释内除外),所以你可以自由地格式化代码。
- 在执行命令行工具时:在语句末尾加上分号 ,然后按 Enter 键执行,或者,在换行后输入
\G(在 MySQL/MariaDB 中) 来获得更易读的纵向输出。 - 在应用程序代码中:将 SQL 语句定义为一个 多行字符串,具体语法取决于你使用的编程语言(如 Python, Java, JavaScript, C# 等)。
- 在数据库客户端工具中:通常有“执行”按钮或快捷键(如 F9),工具会自动处理整个脚本,无论其中有多少换行。
在 SQL 脚本文件中 (.sql 文件)
这是最常见的情况,当你编写一个包含多个子句(如 SELECT, FROM, WHERE, JOIN)的复杂查询时,为了方便自己和他人阅读,你会进行格式化。

最佳实践:
- 大写关键字:将
SELECT,FROM,WHERE等关键字大写。 - 缩进:对
SELECT的列列表、WHERE条件、JOIN等进行缩进。 - 逻辑分组:将相关的条件放在一起。
示例:
一个未经格式化的、难以阅读的查询:
SELECT u.user_id, u.username, o.order_id, o.order_date, o.total_amount FROM users u JOIN orders o ON u.user_id = o.user_id WHERE u.status = 'active' AND o.order_date > '2025-01-01' ORDER BY o.order_date DESC;
一个格式化后、易于阅读的查询:

SELECT
u.user_id,
u.username,
o.order_id,
o.order_date,
o.total_amount
FROM
users AS u
JOIN
orders AS o ON u.user_id = o.user_id
WHERE
u.status = 'active'
AND o.order_date > '2025-01-01'
ORDER BY
o.order_date DESC;
关键点:
- 这种换行和缩进对数据库引擎来说没有任何影响,它只是让人类更容易理解代码。
- 别忘了在每个 SQL 语句的末尾加上分号 ,这表示一个语句的结束。
在命令行工具中 (如 mysql, psql, sqlcmd)
在命令行终端中直接输入 SQL 命令时,换行的方式取决于你的工具。
a) 标准换行和执行
在大多数命令行客户端(如 MySQL, PostgreSQL, SQL Server 的 sqlcmd)中,你可以直接输入多行语句,当输入结束时,用分号 然后按 Enter 键,整个语句就会被执行。
MySQL (mysql) 示例:

mysql> SELECT user_id, username
-> FROM users
-> WHERE status = 'active';
+----------+----------+
| user_id | username |
+----------+----------+
| 1 | alice |
| 2 | bob |
+----------+----------+
2 rows in set (0.00 sec)
->是 MySQL 的提示符,表示它正在等待你输入当前语句的其余部分。
b) 使用 \G 进行纵向输出 (MySQL / MariaDB 特有)
当查询结果列很多时,横向显示会很混乱,MySQL 和 MariaDB 提供了一个非常有用的 \G 选项,它可以将查询结果以纵向、易读的格式输出。
示例:
SELECT * FROM users WHERE user_id = 1\G *************************** 1. row *************************** user_id: 1 username: alice email: alice@example.com status: active create_time: 2025-10-27 10:00:00 1 row in set (0.00 sec)
注意:使用 \G 时,末尾不需要分号 。
在应用程序代码中
在用 Python, Java, PHP 等语言编写代码时,你需要将 SQL 字符串传递给数据库驱动程序,为了避免在一行中写超长的字符串,可以使用多行字符串语法。
Python 示例
使用三重引号 或 来定义多行字符串。
import sqlite3
# 定义一个多行 SQL 查询
sql_query = """
SELECT
u.user_id,
u.username,
o.order_id,
o.order_date
FROM
users AS u
JOIN
orders AS o ON u.user_id = o.user_id
WHERE
u.status = 'active'
ORDER BY
o.order_date DESC;
"""
# 连接数据库并执行
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()
cursor.execute(sql_query)
results = cursor.fetchall()
for row in results:
print(row)
conn.close()
Java 示例
Java 13+ 支持文本块,非常适合写 SQL。
// Java 13+
String sqlQuery = """
SELECT
u.user_id,
u.username,
o.order_id,
o.order_date
FROM
users AS u
JOIN
orders AS o ON u.user_id = o.user_id
WHERE
u.status = 'active'
ORDER BY
o.order_date DESC;
""";
// 使用 JDBC 执行...
// PreparedStatement pstmt = conn.prepareStatement(sqlQuery);
// ...
对于旧版 Java,通常使用字符串连接或 StringBuilder。
在数据库 GUI 客户端中 (如 DBeaver, DataGrip, SQL Server Management Studio)
这些图形化工具通常有一个SQL 编辑器,它们的设计就是为了方便编写和执行多行 SQL。
- 编写:像在文本编辑器一样,自由地使用 Enter、Tab 键进行换行和缩进。
- 执行:你可以选择执行整个脚本(通常有一个“闪电”图标或 "Execute" 按钮),或者只执行光标所在位置的语句(快捷键如
Ctrl+Enter或F9)。
这些工具非常智能,能正确处理带分号的多行语句。
| 场景 | 如何换行 | 关键点 |
|---|---|---|
| SQL 脚本文件 | 直接按 Enter 键进行换行和缩进。 | 提高可读性,不影响执行,语句末尾需加 。 |
| 命令行工具 | 输入多行,用 结尾后按 Enter 执行。 | MySQL/MariaDB 可用 \G 替代 获得纵向输出。 |
| 应用程序代码 | 使用语言的多行字符串语法(如 Python 的 )。 | 将 SQL 代码与程序逻辑清晰分离,易于维护。 |
| GUI 客户端 | 像在记事本一样自由换行和缩进。 | 使用工具的“执行”按钮或快捷键来运行脚本。 |
