毫无疑问,编写代码更像是一门艺术,而不是一门科学。即使有经验,每个编码人员也无法编写既可读又可维护的优美代码。一般来说,当您学习编码艺术时,编码会随着经验而提高。例如,组合重于继承或编码接口大于实现,但只有少数开发人员能够掌握这些技术。
SQL查询也是如此。构建查询的方式和编写查询的方式对向开发人员传达你的意图有很大帮助。当我看到来自多个开发人员的电子邮件上的SQL查询时,我可以看到他们的写作风格有很大的不同。
有些开发人员写得非常整洁,并且正确地缩进了查询,这样就很容易发现关键的细节,例如从哪个表中提取哪些列,以及条件是什么。
由于在实际项目中,sql查询几乎不是单行的,所以学习正确的SQL查询方法会在以后自己阅读或者将该查询分享给某人进行审查或执行时,产生很大的不同。
在这篇文章中,我将向你展示我在过去尝试过的几种风格,它们的优缺点,以及我认为编写SQL查询的最佳方法。除非你有充分的理由不使用我的风格,例如你有一个更好的风格,或者你想坚持你的项目中使用的风格(遵循一致性),否则没有理由不使用它。
顺便说一句,我希望你熟悉SQL,并且在SQL查询中了解不同的子句及其含义。如果不是,最好通过一些好的课程来获得一些SQL方面的经验:
1. 《 The Complete SQL Bootcamp》,数据科学家乔希·波蒂拉
2. 《SQLfornewbs:初学者的数据分析》,大卫·金和彼得·塞夫顿
以上是我通常向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)混合大小写,将关键字与列名/表名分离开来。
1)混合案例
2)整个查询都写在一行上,一旦表和列的数量增加,就无法读取
3)在添加新条件或没有现有条件的情况下运行时,没有灵活性
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)所有条件都在同一行上,即通过注释排除某些代码,不是那么容易。
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 for Newbs: Data Analysis for Beginners
5 Free Courses to Learn SQL and Database
原文标题《The Best Way to Write a SQL Query》
作者:Javin Paul
译者:lemon
不代表云加社区观点,更多详情请查看原文链接
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。