SQL 语法顺序与编码规范
前言:博主目前从事的是BA数据分析师、在实际工作中需要问其他部门的同事提供SQL需求,在此过程中,SQL代码的规范与否是非常重要的,规范的代码有助于成员间交流,保证一致性、统一性。因此,以我实际工作遇到的问题进行总结。
1.1 SQL 语法顺序
FROM <表名> # 选取表,将多个表数据通过笛卡尔积变成一个表。 ON <筛选条件> # 对笛卡尔积的虚表进行筛选 JOIN <join, left join, right join…> <join表> # 指定join,用于添加数据到on之后的虚表中,例如left join会将左表的剩余数据添加到虚表中 WHERE <where条件> # 对上述虚表进行筛选 GROUP BY <分组条件> # 分组 <SUM() 等聚合函数> # 用于having 子句进行判断,在书写上这类聚合函数是写在having判断里面的 HAVING <分组筛选> # 对分组后的结果进行聚合筛选 SELECT <返回数据列表> # 返回的单列必须在group by子句中,聚合函数除外 DISTINCT # 数据除重 ORDER BY <排序条件> # 排序,如非必要尽量不用 LIMIT <行数限制>
1.2 实际操作中预计执行顺序
(8) SELECT (9)DISTINCT < 去重列 > (1) FROM < 左表 > (3) < 连接类型 > JOIN < 右表 > (2) ON <连接条件> (4) WHERE < 筛选条件 > (5) GROUP BY < 分组列 > (6) WITH {CUBE|ROLLUP} (7) HAVING < 分组筛选 > (10) ORDER BY < 排序列 > (11) LIMIT < 行数限制 >
注:这里大家注意,(4)WHERE 筛选的是连接后的新表。
1.3 编码规范
为了保证编写出的程序都符合相同的规范,便于理解、维护,减少出错概率,有助于成员间交流,保证一致性、统一性而建立的SQL程序编码规范。
1.3.1 注释 1)代码中需要添加必要的注释,以增强代码的可读性。 2)代码头部添加主题、功能描述等信息 3)对不易理解的分支条件表达式添加注释。 4)对重要的计算添加注释,说明其功能。 1.3.2 命名 1) 限制命名长度,建议表名及字段名字符总长度小于等于63。 2)表名按照品牌、模块、分类、用途、实际用途等命名,方便易懂。 3) 务必只使用小写字母,下划线,数字。 4) 不要以pg开头,不要以数字开头,不要使用保留字,单词之间用下划线"_"分开。 5)主键索引应以 pk_ 开头, 唯一索引以 uk_ 开头,普通索引以 idx_ 打头 1.3.3 SQL规范 1) 应该尽量避免全表扫描(除了大数据量扫描的数据分析,尽量使用索引。 2) 除非特殊原因,永远不要使用 SELECT * 需要显示指定获取字段列表example: SELECT col1,col2,col3 FROM TABLE_NAME ...; 3) 不要使用delete 全表,性能很差,请使用truncate代替。 4) 代码中,不要使用count(*) 判断是否有数据,速度很慢。 建议的方法limit 1 . 注:大家在没工作之前,练习SQL代码时候,喜欢使用COUNT(*) ,SELECT * 等等的操作(当然博主之前也喜欢)。这种在做题和结果上面是没问题的。而在实际工作中遇到的表格远比做题中遇到的表格数据量大的多,字段也非常多,这时候使用以上操作效率会很低,因此上面的两种操作是不被推荐的。
|