在我的上一份工作中,我们开发了一个非常依赖数据库的应用程序,我开发了一些格式化标准,这样我们就可以用一个通用的布局编写SQL.我们还开发了编码标准,但这些标准更具体于平台,所以我在这里不赘述.

我很想知道其他人在SQL格式标准中使用了什么.与大多数其他编码环境不同,我还没有在网上找到多少一致意见.

要涵盖主要的查询类型,请执行以下操作:

select
    ST.ColumnName1,
    JT.ColumnName2,
    SJT.ColumnName3
from 
    SourceTable ST
inner join JoinTable JT
    on JT.SourceTableID = ST.SourceTableID
inner join SecondJoinTable SJT
    on ST.SourceTableID = SJT.SourceTableID
    and JT.Column3 = SJT.Column4
where
    ST.SourceTableID = X
    and JT.ColumnName3 = Y

selectfromwhere之后,对换行有一些分歧. Select 行的目的是允许其他操作员(如"top X")在不改变布局的情况下进行操作.在此基础上,在关键查询元素之后简单地保持一致的换行符似乎可以带来良好的可读性.

fromwhere之后删除换行符是可以理解的修改.然而,在下面的update这样的查询中,我们看到where后面的换行符为我们提供了良好的列对齐.同样,group byorder by之后的换行符可以使我们的专栏布局清晰易读.

update
    TargetTable
set
    ColumnName1 = @value,
    ColumnName2 = @value2
where
    Condition1 = @test

最后,insert:

insert into TargetTable (
    ColumnName1,
    ColumnName2,
    ColumnName3
) values (
    @value1,
    @value2,
    @value3
)

在大多数情况下,它们与MS SQL Server Managements Studio/query Analyzer编写SQL的方式没有太大的差异,但它们之间存在差异.

我期待着看到Stack Overflow社区在这个话题上是否有任何共识.我一直很惊讶,有多少开发人员可以遵循其他语言的标准格式,在使用SQL时突然变得如此随意.

推荐答案

我的观点是,只要你能轻松地阅读源代码,格式是次要的.只要实现了这个目标,就可以采用许多好的布局样式.

对我来说,唯一重要的另一个方面是,无论您 Select 在store 中采用何种编码布局/风格,都要确保所有编码人员都能始终如一地使用.

仅供参考,以下是我将如何展示您提供的示例,只是我的布局偏好.需要特别注意的是,ON子句与join子句位于同一行,只有主联接条件列在联接中(即键匹配),其他条件移到where子句中.

select
    ST.ColumnName1,
    JT.ColumnName2,
    SJT.ColumnName3
from 
    SourceTable ST
inner join JoinTable JT on 
    JT.SourceTableID = ST.SourceTableID
inner join SecondJoinTable SJT on 
    ST.SourceTableID = SJT.SourceTableID
where
        ST.SourceTableID = X
    and JT.ColumnName3 = Y
    and JT.Column3 = SJT.Column4

一个建议是,从Red Gate中得到一份SQL Prompt.你可以定制工具来使用你想要的布局偏好,然后你店里的编码员都可以使用它来确保每个人都采用相同的编码标准.

Sql相关问答推荐

表名数组

SQL查询以条件空值跟踪生产操作结果进展

出现5次后,将所有正斜杠替换为连字符

Select 起始参数和截止参数之间的间隔,包括与期间重叠的参数

OVER子句WITH PARTITION BY和ORDER BY忽略主查询的WHERE子句

snowflake/SQL嵌套的JSON对象和数组

按分类标准检索记录

在SQL中为两个日期之间的每个日期添加行

PostgreSQL:查找继承表中的特定记录属于哪个表

从单个表达式中的分隔字符串中取平均值

如何使用SQL生成数据的滚动3天总和

每个分组最多 Select 最后 2 个值并并排显示它们

比使用NOT EXISTS更高效的SQL删除方法是什么?

使用in和and运算符过滤记录的条件

编写查询以根据级别 (p2) 返回父位置

如何将 CONCATENATED 值与临时表中的值匹配

在 postgresql 中,我可以将其组合成一个查询吗?

Postgres:表的累积视图

如何从 2 个 SQLite 表构建嵌套对象?

snowfalke 会在 Select 运行时锁定表吗?