分隔符第一格式化(SFF)与SQL代码格式更容易阅读/维护?

时间:2009-06-19 12:39:08

标签: sql formatting

您是否将分隔符(逗号和/或运算符)放在行的前面?

Select Field1
    , Field2
  --, Field3
From [some_table] as ST
Inner Join [other_table] as OT
   ON ST.PKID = OT.FKID
Where [this] = [that]
   and [one_other] > 53;

我认为最好的功能是帮助公开重要的运算符(AND / OR)。作为次要优势,评论似乎更容易。

不确定我最初选择它的地方,但Andrew Novick在“Transact-SQL用户定义函数”中提到它(听到他说话;免费获得这本书并强烈推荐。)

7 个答案:

答案 0 :(得分:4)

注释更容易,但我宁愿选择可读性 - 使用类似下面的列布局有点尴尬而代码变化很大,但是获得概述非常舒服:

select foo.bar,
       baz.ban,
       foobar.bazban
  from foomatic  foo
  join bartastic bar  on bar.id  = foo.id
  join anemone   anem on anem.id = bar.id
 where foo.bar <> 1 and
       baz.ban =  'foo' and
       (
         anem.bear in ('a', 'b') or
         anem.zoo  is null
       )
;

答案 1 :(得分:2)

我个人认为这不容易阅读,但那只是因为我不习惯。需要记住的重要一点是一致性是这些问题的关键。确保您选择的任何样式都是用于整个项目的唯一样式。

答案 2 :(得分:2)

在我的工作场所(约有10名开发人员,专门研究Oracle的小型咨询公司)就是我们的惯例,因为:

SELECT
  p.id pd_id
, p.var_no
, p.status
, o.name operator
, o.r_id
, o.r_type
, o.start_datetime
, o.end_datetime
--, p.id rd_id
--, p.s_control
, p.xml_data last_d_res_xml
FROM schema_a.table_x p
JOIN schema_b.table_y o ON p.id = o.pd_id
WHERE p.some_id = 11
ORDER BY pd_id DESC, end_datetime DESC NULLS FIRST

我们发现它很清楚,并且允许在调试时轻松注释列。我需要一段时间才能适应,但我现在更喜欢这种风格 - 我们整个团队都在使用它。

答案 3 :(得分:2)

“更容易评论” - 除非您想要评论第一项。

如果您的分隔符位于行的开头或结尾处并不重要 - 总会有一个边缘情况,您无法应用“轻松注释”标准。

如果您正在查看操作员级别(AND / OR),则可以轻松注释掉一行:

  • 更改查询的含义
  • 导致语法错误

一般来说,对于where子句,如果不是所有的AND,那么我倾向于嵌套:

WHERE
    ColumnA = 1 AND
    ColumnB = 2 AND
    (
        ColumnC = 3 OR
        ColumnD = 4
    )

这有助于您发现边缘情况(如上所述),您需要在注释块前面注释操作符或添加“1 = 1”条件。

答案 4 :(得分:1)

我已经草率了,但这是我写出来的首选方法 - 特别是当我调试新脚本时。

答案 5 :(得分:1)

这是我最近参与的标准。花了一点时间习惯,现在其他任何东西对我来说都很奇怪:)

SELECT e.emp_id
      ,e.emp_name
      ,d.dept_name
FROM   emp   e
      ,dept  d
WHERE  e.dept_id        = d.dept_id
AND    d.is_active      = 'Y'
AND    e.current_status = 'ACTIVE'
AND    (e.class IN ('x','y','z')
        OR e.class_na = 'Y')
ORDER BY e.emp_name
        ,d.dept_name;

我们发现列中排列的所有内容都使查询更容易阅读,尤其是当您在PL / SQL中获得大量SQL语句时。 SQL从周围的程序代码中脱颖而出。

答案 6 :(得分:0)

我更喜欢SELECT子句分离。

这突出了查询的重要部分。分隔符前端或尾端仅在SELECT列表中显示

我发现以上所有例子都难以阅读。

Select
    Field1
    , Field2
    --, Field3
From
    [some_table] as ST
    Inner Join
    [other_table] as OT ON ST.PKID = OT.FKID
Where
    [this] = [that]
    and
    [one_other] > 53;


Select
    Field1,
    Field2 --,
    --Field3
From
    [some_table] as ST
    Inner Join
    [other_table] as OT ON ST.PKID = OT.FKID
Where
    [this] = [that]
    AND
    [one_other] > 53;