SQL风格指南 - Reddit


在做了4年的数据分析员之后,我在网上和工作中看到了一些糟糕的格式,写了这份SQL风格。

通用格式化

  • 缩进不是可有可无的。特别是对于像子查询这样的东西。能够很容易地看到什么适合在什么里面,这一点非常重要。
  • 在可能的情况下,将你的IDE设置为对注释、关键项、字符串等显示不同颜色。这将使你的代码更容易阅读。
  • 真正地注释你的代码。你不需要说明明显的问题。但是,对你试图做的事情的小提示会给你和其他人节省很多时间。在我的工作中,几乎没有人在他们的代码中写注释。


对SELECT项目进行格式化

  • 当selelct多个项目时,要写在选择线的下面。当select一个项目时,写在SELECT行上。
  • 在你的IDE中,将tab改成插入4个空格。
  • 用4个空格缩进SELECT项目(或按上述方法设置TAB)。
  • 把逗号放在项目之后而不是之前。前面看起来很可怕,而且更难读。
  • 在select的最后一个项目和你的FROM子句之间留一个空行,以提高可读性。从根本上说,SQL查询是在说从Y中获取X,所以将这些分开是有意义的.
  • 即使一个字段名是唯一的,当从多个表中获取字段时,一定要使用点的前缀。你可能知道一个字段来自哪里。但如果别人第一次阅读你的代码,并想复制一些逻辑,这将节省他们在每一个你的LEFT JOINED表中挖掘,以找到字段的来源。
  • 当插入临时表时,在空白行后缩进,然后把INTO temp表
  • 别名时一定要写AS。它非常容易阅读,当你在阅读某人的SELECT中的10多个字段时,你以前从未见过这些字段,它可以立即清楚地知道什么叫什么。特别是当字段有很长的名字时。
  •  总是写INSERT INTO table 而不是INSERT table 。你是在往表里放东西。你并没有把表放入其他任何东西里面。省略INTO是无稽之谈。


格式化FROM/JOINS

  • 在可能的情况下(取决于名称长度的极端差异),使用空格对齐表名。也要对齐别名,这样就很清楚哪些字段来自哪些表。如果你要从10个表中进行LEFT连接,这就非常有帮助。也要把表名写在FROM或LEFT JOIN子句的同一行。
  • 一定要把AS写到别名中。和上面的原因一样。
  • 别名应该是简短和合理的平衡。太长了,有什么意义呢?太短了,你会让事情变得混乱。
  • 别名应该是描述性的。如果你有一个销售表和一个动物表,把它们别名为 "s "和 "a "或其他。不要把 AS T1, T2, T3 等放在一起。当你的查询中有很多表的时候,这就是地狱。记住事物的来源是非常困难的。
  • 除了子查询(这毁了一切),把你的连接条件放在表名的右边,并在下面堆放多个连接条件。这意味着你可以很容易地读到所有在你的查询中被LEFT JOINED的表。如果你已经连接了许多表,那么所有的东西都来自哪里就明显清楚了。
  • 使用空格来对齐ON和AND条件,如上所述。
  • 用一个空行来分隔连接是不必要的,但偶尔也会有帮助。请谨慎使用。

格式化WHERE

  • 将第一个WHERE条件写在与WHERE子句相同的一行。
  • 使用空格将任何AND或OR条件放在不同的行中,这样条件就可以很容易地被向上和向下阅读。

格式化GROUP BY和ORDER BY

  • 与SELECT的格式相似。缩进并将分组条件写在不同的行中。