毫无疑问,编写代码与其说是一门科学,不如说是一门艺术。即使有经验,每个程序员也不能编写既可读又可维护的漂亮代码。一般来说,当您学习编码的艺术时,编码会随着经验而改进,例如,喜欢使用 类的组合来代替类的继承或者基于接口编码而不是实现,但是只有少数开发人员能够掌握这些技术。
SQL查询也是如此。构建查询的方式和编写查询的方式,对于向开发人员传达您的意图大有帮助。当我在多个开发人员的邮件中看到SQL查询时,我可以看到他们的写作风格有明显的不同。
一些开发人员编写得非常整洁,并且对查询进行了适当的缩进,这使得很容易发现关键细节,例如,从哪个表中提取哪些列以及条件是什么。
因为在实际的项目中,SQL查询往往并不是只有一行语句,所以当您稍后阅读SQL查询或将该查询共享给某人进行检查或执行时,学习正确的编写SQL查询将会有很大的帮助。
在本文中,我将向您展示一些我过去尝试过的样式,它们的优缺点,以及我认为编写SQL查询的最佳方式。除非你有很好的理由不使用我的风格,例如:你有更好的风格,或者你想坚持项目中使用的风格(一致性压倒一切),没有理由不使用它。
顺便说一下,我希望您熟悉SQL,了解SQL查询中的不同子句及其含义。
编写SQL查询的第一种方法
SELECT e.emp_id, e.emp_name, d.dept_name, p.project_name from Employee e
INNER JOIN Department d ON e.dept_id = d.dept_id INNER JOIN Projects p
ON e.project_id = p.project_id Where d.dept_name="finance" and e.emp_name
like '%A%' and e.salary > 5000;
缺点:
1)大小写混合
2)整个查询写在一行上,一旦表和列的数量增加,这一行就不可读
3)在添加新条件或运行时没有现有条件时没有灵活性
优点:用大小写混合的方式区分关键字、列名和表名。
编写SQL查询的第二种方法
SELECT e.emp_id, e.emp_name, d.dept_name, p.project_name
from Employee e
INNER JOIN Department d ON e.dept_id = d.dept_id
INNER JOIN Projects p ON e.project_id = p.project_id
Where d.dept_name="finance" and e.emp_name like '%A%' and e.salary > 500;
改进:
1)将查询划分为多行,使其更具可读性。
问题:
1)大小写混合
2)所有条件比较在同一行,很难对某一条件添加注释。
编写SQL查询的第三种方法
select e.emp_id, e.emp_name, d.dept_name
from Employee e
inner join Department d on e.dept_id = d.dept_id
where d.dept_name = 'finance'
and e.emp_name like '%A%'
and e.salary > 500;
1)将SQL查询划分为多个行使其可读性更好。
2)使用适当的缩进可以很容易地找到数据源,例如表和连接。
3)在单独的行上具有条件允许您通过注释其中的一个条件来运行查询,
例如:
select e.emp_id, e.emp_name, d.dept_name
from Employee e
inner join Department d on e.dept_id = d.dept_id
where d.dept_name = 'finance'
-- and e.emp_name like '%A%';
add e.salary > 5000
如果您喜欢用大写字母表示关键字,您还可以编写关键字是大写的SQL查询,规则是相同的,但只是关键字的大写字母。
如何编写可读的SQL查询
这就是如何编写可读和更易于维护的SQL查询,关于SQL查询的缩进或样式,请随意给出您的看法。这用起来很简单,可对于提高复杂SQL查询的可读性大有帮助。如果您愿意,也可以在网上使用各种SQL格式器,但是我建议您学习一种样式并坚持使用它,而不是依赖于格式器。