#SQL编程规范建议
给开发团队定义编程规范有利于代码的可读性和继承性,YashanDB对于SQL编程规范提出下述建议指导,用户可以根据自身情况进行调整。
# 注释
- 单行注释:在注释文字前用“--”标识;单行注释主要用于该SQL的业务描述。
- 多行段落注释:应把多行注释写在“/* … */”内。多行描述区主要用于描述该脚本的功能,作者、目标表和源表、修改记录等。
# 大小写规则
SQL语句中的所有保留字均需大写,且不要使用缩写,如ALL、AS、CASE、CREATE、DATABASE、DELETE、FROM、IN、INSERT、JOIN、LEFT、NO、NOT、NULL、OUT、SELECT、TABLE、TITLE、UPDATE、VIEW、WHERE等。
默认情况下,YashanDB对保留字或对象名称的大小写不敏感,但如果在定义这些标识符时其前后使用了双引号”,YashanDB将严格按照大小写进行标识符匹配。
# 缩进与换行
- 建议将SQL语句按照子句分行编写,以SELECT、FROM、WHERE、UPDATE、INSERT为起始另起一行,尽量对齐各子句的起始位置。
- 逗号放在每行字段的末尾。
- 分号放在SQL语句的末尾。
- 每行宽度不超过120字符,超过行宽的代码应换行并与上行对齐编排。
- 当字段名包含别名时,AS别名部分和相应字段放在同一行。
- 缩进时不建议使用Tab,建议使用4个空格。
SELECT employee_name,
sex,
entry_date
FROM employees
WHERE entry_date > SYSDATE-1000
AND entry_date < SYSDATE
ORDER BY employee_name;
# 子查询嵌套
对于复杂语句,代码的分层编排非常重要,一般对嵌套语句的格式有以下两点要求:
- 对应的括号应尽量排在同一列。
- 同一级别的子句内部要遵循缩进换行语法对齐。
# 表别名
- 表别名建议以简单字符命名。
- 多层次的嵌套子查询别名需通过缩进体现层次关系。
- 对于同一层的多个子句,建议相同别名附加不同数字后缀(1、2、3…)的形式,以便识别与区分子句关系。
- 在需要的情况下对表别名添加注释。
# 字段类型转换
字段在做比较或转换的时候应该使用显式的写法对数据做处理,以防止因字段格式的差异导致执行失败,如:
文本:在访问文本字段时建议做trim()处理,去除多余空格。例如,table_A.name的某值为'Lucy',table_B.name的某值为'Lucy',若不进行处理,在做name等值匹配时这两条的比较结果将是false。
日期:执行日期相关运算时,必要时使用CAST函数做类型转换,防止录入数据时以字符类型保存的日期字段,在计算时被视为表达时间的特有类型(如date、timestamp)处理,导致结果异常。