阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

SQL语句规范参考

457次阅读
没有评论

共计 2628 个字符,预计需要花费 7 分钟才能阅读完成。

公司有 SQL 语句规范的参考,这里特别做个笔记。

书写风格

1. 语句关键字应全部使用小写。

2. 引用字符时应使用单引号。如:update testable set idcol=’abcd’。

3. 连接符或运算符 or、in、and、=、<=、>=,+,- 等前后宜加上一个空格。否则容易导致以下类似问题。例如在语句 select a–b from table 中,a,b 均为变量,拼写该语句时,如果 a = 6,b = -3,则语句变为 select 6–3 from table。– 被视为 SQL 的注释,结果语句报错。

4. 不得使用“select * from …”语法,必须标明字段名。即 select col1, col2,… from tablea where …

5. 严禁使用“insert into table_name values (?,?,……)”语法,统一使用“insert into table_name (col1,col2,……) values (?,?,……)”。

6. SQL 语句包含多表连接时,必须加上表的别名,对每个字段的使用都要带上表别名。即 select a.col1, a.col2, b.col3 from tablea a, tableb b where a.col4=b.col5

7. 应避免显式或隐含的类型转换。例如在 where 子句中 numeric 型和 int 型的列的比较。

8. 在子查询中前后必须加上括号。select col1, col2 from tablea where col3 in (select col4 from tableb where col4>0)

9. 执行 SQL 时一次应只执行一条,如果多条语句则应分开执行,但必须保持在一个事务中。不得一次执行通过分号等分开的多条语句,这样处理不清晰。

10. 如果能采用 or 代替,则不宜使用 in 语句。in 语句中的元素不得超过 500 个,如果超过,则应拆分为多条 SQL 语句。严禁使用 xx in(‘’,’’….) or xx in(‘’,’’,’’)。

11. or 连接条件不得超过 500,超过时应拆分为多条语句。

性能优化

1. 查询时应尽量减少多余数据的读取,通过使用 where 子句来减少返回的记录数。

2. 如果在语句中有 not in(in)操作,应尽量用 not exists(exists)来代替。特别对大数据量的两者检索速度有很明显的区别。

3. 不宜使用外连接。外连接效率低。

4. 一条 SQL 语句中不宜使用 3 层以上的嵌套查询。如果超过,则应在 Java 等应用服务器程序中处理。

5. 一条 SQL 语句中不得从 4 个及以上表中同时取数。仅作关联或过滤条件而不涉及取数的表不参与表个数计算;如果必须关联 4 个或 4 个以上表,应在 Java 等应用服务器程序中处理。

6. 应尽量避免使用 order by 和 group by 排序操作,如必须使用排序操作,尽量建立在有索引的列上。因为大量的排序操作影响系统性能。

7. 对索引列的比较,应尽量避免使用 not 或 !=,可拆分为几个条件。因为“not”和“!=”不会使用索引。如 col1 是索引列,条件 col1 !=0 可以拆分为 col1 >0 or col2 <0。

8. 应尽量将数据库函数、计算表达式写在逻辑操作符右边。因为这些对列的操作会将导致表扫描,影响性能。

9. 在 where 子句中,如果有多个过滤条件,应将索引列或过滤记录数最多的条件放在前面。

10. 能用连接方式实现的功能,不得用子查询。例如:select name from customer where customerId in (select customerId from order where money > 1000)。应该用如下语句代替:select name from customer inner join order on customer.customerId = order.customerId where order.money > 100。或 select name from customer where exists (select 1 from order where money > 1000 and customer.customerId = order.customerId) < 这里需要注意:使用 exists 的效率依赖于匹配度,inner join 效率比较稳定 >

11. 多表关联查询时,写法可遵循以下原则,这样做有利于建立索引,提高查询效率。格式如下:select sum (t1.je) from table1 t1, table2 t2, table3 t3 where (t1 的等值条件(=)) and (t1 的非等值条件) and (t2 与 t1 的关联条件) and (t2 的等值条件) and (t2 的非等值条件) and (t3 与 t2 的关联条件) and (t3 的等值条件) and (t3 的非等值条件)。

跨数据库支持

1. 对于跨数据库 Java 应用程序的 VO 映射数据库的数据格式建议:

1) 整型字段:字段设置保存为 Integer 或者 Long

2) 数字型字段:若需要使用小数 2 位以上的精确计算,读取、插入、更新使用 BigDecimal 类型

3) 字符型字段:读取为 String,并保存为 String,插入或者更新为 String

4) 时间字段:读取为 String,插入或者更新时的时间格式使用中间件统一处理。

2. 字符串连接应使用“||”符号,而不应使用“+”。“+”是 SQLServer 语法,Oracle 和 DB2 支持“||”,Hibernate 转化为 SQLServer 时,会自动将“||”转为“+”。

3. 通配符不能使用‘[a-c]%’这种形式。应写成如:select col1, col2 from table_name where col1 like‘[a]%’OR col1 like‘[b]%’OR col1 like‘[c]%’

4. 截取字符串长度函数应使用 substr,起始位置为 1 表示从头开始。因为 db2 中 substr 起点为 1,0 会报错;在 SqlServer 数据库中使用的是 substring 需要进行转换。

5. 不得通过 select percent n 和 select top n 限制查询结果集的记录数。

6. join 与 on 必须严格匹配,严禁出现没有 on 的 join。

7. join…on 后面不宜使用 or,如果使用则需将 or 的范围用 () 括起来。

8. 不得使用 select into 的格式。Select into 是 SQL Server 特有语法,因为 Oracle 和 DB2 不支持。

9. 应将 Null 值与空字符串 (长度为零的字符串) 视为不同。虽然 Oracle 视 Null 与空字符串为相同,但 DB2 和 SQL Server 却视为不同。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2628字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7801886
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛 NAS 玩转 Frpc 并且配置,随时随地直连你的私有云 大家好,我是星哥,最近在玩飞牛 NAS。 在数...
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...