编写SQL查询的最佳方法


毫无疑问,编写代码更多是一门艺术,而不是一门科学。即使有经验,每个程序员也无法编写可读且可维护的精美代码。通常,当您学习编码技巧时,编码会随着经验的提高而提高,例如,在实现上优先 于继承而不是继承,或者对接口进行编码而 不是实现,但是只有少数开发人员能够掌握这些技术。

同样适用于SQL查询。您构造查询的方式和编写查询的方式对与其他开发人员交流您的意图大有帮助。当我看到来自多个开发人员的电子邮件上的SQL查询时,我可以看到他们的写作风格截然不同。

一些开发人员如此巧妙地编写它并缩进他们的查询,这使发现关键细节变得容易,例如从哪个表中提取哪些列以及条件是什么。

由于在现实生活中的项目中,SQL查询几乎不是一味的,所以以后自己阅读或与他人共享该查询以供查看或执行时,学习编写SQL查询的正确方法将 有很大的不同。

在本文中,我将向您展示我过去尝试过的几种样式,它们的优缺点以及我认为这是编写SQL查询的最佳方法。除非您有充分的理由不使用我的样式,例如您有更好的样式,或者要坚持使用项目中使用的样式(一致性否决所有内容),否则没有理由不使用它。

顺便说一句,我希望您熟悉SQL,并了解SQL查询中的不同子句及其含义。如果不是这样,那么最好加入以下类似的课程来获得一些SQL方面的经验:

  1. 数据科学家Josh Portilla 的完整SQL Bootcamp
  2. SQL for Newbs: David Kim和Peter Sefton的针对初学者的 数据分析

以上是我通常向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)引入了混合大小写,以将关键字与列名和表名分开,例如在大写情况下写SELECT并按原样写Employee,但是鉴于您不一致,例如SELECT用大写字母表示,但从小写字母表示使用该样式的好处。

缺点: 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)子句在同一行上的所有条件(也就是说通过注释排除它们)并不是那么容易。

Complex SQL Query.PNG

编写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%';

如果您是关键字的大写字母支持者,则还可以如下所示编写相同的SQL查询,规则相同,只是关键字的字母大写。

SQL query.png

如何编写可读的SQL查询

这就是关于如何编写可读性和可维护性更高的SQL查询的全部内容。随意就您对这种SQL查询的缩进或样式的看法发表意见。这是一种较简单的技术,但功能非常强大,并且在提高复杂SQL查询的可读性方面还有很长的路要走。如果愿意,您也可以在线使用各种SQL格式化程序,但是我建议您学习并坚持使用一种样式,而不要依赖格式化程序。


原文链接:https://codingdict.com/