前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >怎么编写容易读懂的SQL查询

怎么编写容易读懂的SQL查询

作者头像
程序你好
发布2018-07-20 17:24:50
8100
发布2018-07-20 17:24:50
举报
文章被收录于专栏:程序你好程序你好

毫无疑问,编写代码与其说是一门科学,不如说是一门艺术。即使有经验,每个程序员也不能编写既可读又可维护的漂亮代码。一般来说,当您学习编码的艺术时,编码会随着经验而改进,例如,喜欢使用 类的组合来代替类的继承或者基于接口编码而不是实现,但是只有少数开发人员能够掌握这些技术。

SQL查询也是如此。构建查询的方式和编写查询的方式,对于向开发人员传达您的意图大有帮助。当我在多个开发人员的邮件中看到SQL查询时,我可以看到他们的写作风格有明显的不同。

一些开发人员编写得非常整洁,并且对查询进行了适当的缩进,这使得很容易发现关键细节,例如,从哪个表中提取哪些列以及条件是什么。

因为在实际的项目中,SQL查询往往并不是只有一行语句,所以当您稍后阅读SQL查询或将该查询共享给某人进行检查或执行时,学习正确的编写SQL查询将会有很大的帮助。

在本文中,我将向您展示一些我过去尝试过的样式,它们的优缺点,以及我认为编写SQL查询的最佳方式。除非你有很好的理由不使用我的风格,例如:你有更好的风格,或者你想坚持项目中使用的风格(一致性压倒一切),没有理由不使用它。

顺便说一下,我希望您熟悉SQL,了解SQL查询中的不同子句及其含义。

编写SQL查询的第一种方法

代码语言:javascript
复制
SELECT e.emp_id, e.emp_name, d.dept_name, p.project_name from Employee e 
代码语言:javascript
复制
INNER JOIN Department d ON e.dept_id = d.dept_id INNER JOIN Projects p 
代码语言:javascript
复制
ON e.project_id = p.project_id Where d.dept_name="finance" and e.emp_name 
代码语言:javascript
复制
like '%A%' and e.salary > 5000;

缺点:

1)大小写混合

2)整个查询写在一行上,一旦表和列的数量增加,这一行就不可读

3)在添加新条件或运行时没有现有条件时没有灵活性

优点:用大小写混合的方式区分关键字、列名和表名。

代码语言:javascript
复制
编写SQL查询的第二种方法
代码语言:javascript
复制
SELECT e.emp_id, e.emp_name, d.dept_name, p.project_name
代码语言:javascript
复制
from Employee e
代码语言:javascript
复制
INNER JOIN Department d ON e.dept_id = d.dept_id
代码语言:javascript
复制
INNER JOIN Projects p ON e.project_id = p.project_id
代码语言:javascript
复制
Where d.dept_name="finance" and e.emp_name like '%A%' and e.salary > 500;

改进:

1)将查询划分为多行,使其更具可读性。

问题:

1)大小写混合

2)所有条件比较在同一行,很难对某一条件添加注释。

编写SQL查询的第三种方法

代码语言:sql
复制
select e.emp_id, e.emp_name, d.dept_name
代码语言:sql
复制
from Employee e
代码语言:sql
复制
inner join Department d on e.dept_id = d.dept_id
代码语言:sql
复制
where d.dept_name = 'finance'
代码语言:sql
复制
and e.emp_name like '%A%'
代码语言:sql
复制
and e.salary > 500;

1)将SQL查询划分为多个行使其可读性更好。

2)使用适当的缩进可以很容易地找到数据源,例如表和连接。

3)在单独的行上具有条件允许您通过注释其中的一个条件来运行查询,

例如:

代码语言:javascript
复制
select e.emp_id, e.emp_name, d.dept_name
代码语言:javascript
复制
from Employee e
代码语言:javascript
复制
inner join Department d on e.dept_id = d.dept_id
代码语言:javascript
复制
where d.dept_name = 'finance'
代码语言:javascript
复制
-- and e.emp_name like '%A%';
代码语言:javascript
复制
add e.salary > 5000
代码语言:javascript
复制

如果您喜欢用大写字母表示关键字,您还可以编写关键字是大写的SQL查询,规则是相同的,但只是关键字的大写字母。

如何编写可读的SQL查询

这就是如何编写可读和更易于维护的SQL查询,关于SQL查询的缩进或样式,请随意给出您的看法。这用起来很简单,可对于提高复杂SQL查询的可读性大有帮助。如果您愿意,也可以在网上使用各种SQL格式器,但是我建议您学习一种样式并坚持使用它,而不是依赖于格式器。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档