当前位置: 首页 > 科技观察

如何更优雅的写出你的SQL语句

时间:2023-03-21 18:43:13 科技观察

毫无疑问,写代码是一门艺术而不是一门科学。即使有经验,也没有程序员能写出既可读又可维护的漂亮代码。通常,当您学习编码艺术时,编码会随着经验的增加而提高,例如,您更可能更喜欢组合而不是继承或更喜欢接口而不是实现,但只有少数开发人员能够掌握这些技术。SQL查询也是如此。您构建查询的方式、编写查询的方式,如果做得正确,可以很好地将您的意图传达给其他开发人员。通常,当我在来自多个开发人员的电子邮件中看到SQL查询时,我可以看到他们的写作风格存在显着差异。一些开发人员编写得非常干净并正确缩进查询,从而可以轻松发现关键细节,例如从哪个表中提取哪些列以及哪些是条件。因为在实际项目中,SQL查询并不是单行的,所以当你以后需要阅读这些SQL查询或者需要把查询共享给别人检查或执行时,在这种情况下,学习正确编写SQL查询的方法就可以了巨大差距。在本文中,我将向您展示我过去尝试过的一些写作风格、它们的优缺点以及我认为编写SQL查询的最佳方式。除非你有很好的理由不使用我推荐的风格,例如:你有更好的风格,或者你想坚持你在整个项目中使用的风格(一致性就是一切),没有理由不用它。顺便说一句,希望你熟悉SQL,理解SQL查询中的不同子句及其含义。如果没有,您最好通过学习像这样的好课程来获得SQL经验:从0到1:SQL和数据库—LoonyCorn的HeavyLifting乔恩·弗兰德斯(JonFlanders)的SQL简介我强烈推荐后者。SQL的第一种写法SELECTe.emp_id,e.emp_name,d.dept_name,p.project_namefromEmployeeINNERJOINDepartmentdONe.dept_id=d.dept_idINNERJOINProjectspONe.project_id=p.project_idWhered.dept_name="finance"ande.emp_namelike'%A%'ande.salary>5000;优点:1)混合大小写用于关键字与列名和表名的分隔,比如SELECT使用大写,Employee使用首字母大写,但是如果喜欢一致性,可以让fromkey的单词也大写,没研究只表明这样写更好。缺点:1)混合大小写2)整个查询写在一行,一旦表和列的数量增加,这一行是不可读的3)添加新条件或删除条件时没有灵活性第二种写SQL查询的方式方式SELECTe.emp_id,e.emp_name,d.dept_name,p.project_namefromEmployeeeINNERJOINDepartmentdONe.dept_id=d.dept_idINNERJOINProjectspONe.project_id=p.project_idWhered.dept_name="finance"ande.emp_namelike'%A%'ande.salary>50;改进:1)SQL查询分多行,更易读问题1)大小写混合2)where子句的所有条件都在同一行,也就是说通过注释排除它们不是那么容易。第三种SQL写法也不错selecte.emp_id,e.emp_name,d.dept_namefromEmployeeinnerjoinDepartmentdone.dept_id=d.dept_idwhereed.dept_name='finance'ande.emp_namelike'%A%'ande.salary>500;1)将SQL查询分成多行可以提高可读性2)使用适当的缩进可以很容易地找到数据源,例如表和连接3)将条件语句放在单独的行中可以很容易地注释掉一个条件以便调试。selecte.emp_id,e.emp_name,d.dept_namefromEmployeeinnerjoinDepartmentdone.dept_id=d.dept_idwhereed.dept_name='finance'--ande.emp_namelike'%A%';adde.salary>5000顺便说一句,如果你喜欢大写字母关键字,你也可以编写如下所示的相同SQL查询,规则相同,只是关键字要大写。这就是我所说的如何编写可读性和更易于维护的SQL查询。您对缩进或样式化SQL查询有何看法?这是一种简单的技术,但非常强大,可以大大提高涉及多个连接的复杂SQL查询的可读性,如我前面的示例所示。如果您愿意,也可以在Web上使用各种SQL格式化程序,但我建议学习一种风格并坚持使用,而不是依赖格式化程序。感谢阅读本文,请告诉我们如何编写SQL查询?你使用哪种风格,或者你有自己的风格?如果您是初学者并且正在学习SQL,您会发现我的免费SQL课程和书籍列表对您有用。