您是否将分隔符(逗号和/或运算符)放在行的前面?
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用户定义函数”中提到它(听到他说话;免费获得这本书并强烈推荐。)
答案 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;