SQL书写规范

合集下载

sql语句编写顺序

sql语句编写顺序

sql语句编写顺序
SQL语句编写顺序是指在编写SQL语句时,应该按照什么样的顺序来编写不同的语句部分。

这样可以提高SQL语句的效率和可读性,减少错误和调试时间。

下面是SQL语句编写的一般顺序:
1. SELECT语句部分:先指定需要查询的列,然后是FROM子句
指定要查询的表。

2. WHERE语句部分:根据需要添加WHERE子句来筛选需要的数据。

3. GROUP BY语句部分:如果需要对查询结果进行分组,则定义GROUP BY子句中的列。

4. HAVING语句部分:在GROUP BY子句中添加HAVING子句来筛选组。

5. ORDER BY语句部分:定义ORDER BY子句中的列,以按指定
顺序排序结果。

6. LIMIT语句部分:使用LIMIT子句限制结果集的大小。

7. 其他语句部分:添加其他需要的SQL语句,如JOIN、UNION 等。

在实际编写SQL语句时,可能不需要按照上述顺序完全编写。

根据具体情况,可以根据需要灵活调整。

但是,通常需要考虑查询性能和可读性,遵循一定的编写顺序可以提高SQL语句的效率和可维护性。

- 1 -。

SQL编码规范

SQL编码规范

SQL开发规范1.书写格式1) SQL语句的SQL保留字大写。

2) 变量名称使用混合大小写,数据类型使用小写。

3) 新建的表以TB_作前缀比如TB_User,视图VW_,存储过程PROC_,函数FUN_,表名称不加s;如果表比较多,一般分模块来区分,比如TB_SM_User,表示系统模块的用户表。

4) 当命名存储过程名或者视图和函数名时,如果动词加名称来描述该功能时,使用符合我们习惯的用法,即动词在前名词在后,如:GetUserInfo, AddUserInfo, EditUserInfo, DeleteUserInfo等。

5) 使用别名:当一个T-SQL语句中涉及到多个表时,始终使用表名别名(一般取表名的头两个字母)来限定字段名,避免使用table1、table2、t1、t2等类似命名。

这使其他人阅读起来更清楚,避免了含义模糊的引用。

2.缩进1) 一般缩进为4个空格。

2) 不要用Tab制表符来作缩进。

3.换行1) Select/From/Where/Order by/Group by等子句必须另起一行写。

2) Select子句内容如果只有一项,与Select同行写。

3) Select子句内容如果多于一项,每一项单独占一行,在对应Select 的基础上向右缩进4空格。

4) From子句内容如果只有一项,与From同行写。

5) From子句内容如果多于一项,每一项单独占一行,在对应From 的基础上向右缩进4个空格。

6) Where子句的条件如果有多项,每一个条件占一行,以AND或者OR开头,在对应Where的基础上向右缩进4个空格。

7) (Update)Set子句内容每一项单独占一行,无缩进。

8) Insert子句内容每个表字段单独占一行,无缩进;values每一项单独占一行,无缩进。

9) SQL文中间不允许出现空行。

10) 存储过程或函数输入参数命名以in开头,如@in_Year;输出参数以out开头,如@out_money;局部变量首字母小写,第二个单词起的每个单词的首字母大写,不使用“_”,如@customerCount;4.空格1) 连接符or、in、and、以及=、<=、>=等前后加上一个空格。

sql规范

sql规范

sql规范SQL(Structured Query Language)是一种用于管理关系数据库的计算机语言。

虽然SQL是一种标准的语言,但是在实际应用中,不同的数据库管理系统可能会有一些差异。

为了提高代码的可读性和可维护性,制定了一些SQL规范。

下面是一个涵盖了SQL规范的大致指南,旨在帮助开发人员编写高质量的SQL代码。

1. 格式化代码:- 使用统一的缩进,通常是4个空格。

- 在代码中适当空格,使代码更易读。

- 使用大写字母或小写字母编写关键词,以提高可读性。

2. 使用明确的表别名:- 在SQL查询中,如果涉及多个表,为每个表使用明确的别名。

- 别名应该具有描述性,以便更好地理解查询意图。

3. 使用JOIN语句:- 避免使用传统的WHERE语句来连接表,而是使用JOIN语句。

- JOIN语句可以更清晰、更有效地表示表之间的关系。

4. 避免使用SELECT *:- 在查询中,尽可能明确地列出需要的列,而不是使用通配符*。

- 这样可以减少数据传输量,提高查询效率,并且使查询意图更加明确。

5. 避免使用子查询:- 子查询会增加查询的复杂性和执行时间。

- 尽量使用JOIN语句来代替子查询,以提高查询性能。

6. 使用合适的数据类型:- 在创建表时,选择适当的数据类型和长度。

- 这样可以减少存储空间的使用,并提高查询性能。

7. 对于NULL值的处理:- 在查询中,使用IS NULL或IS NOT NULL来测试NULL 值,而不是使用等号(=)。

- 这样可以更明确地表示查询的意图,并且使代码更易读。

8. 使用事务:- 当执行多个SQL操作时,将它们放在一个事务中。

- 这样可以确保数据的一致性,并提供可靠的回滚机制。

9. 编写注释:- 在代码中加入注释,解释SQL的意图和目的。

- 这样可以让其他开发人员更容易理解代码,并且在维护代码时更加方便。

10. 安全性考虑:- 在查询中,避免将用户输入直接插入SQL查询中,以免遭受SQL注入攻击。

标准sql格式

标准sql格式

标准sql格式SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准化语言。

SQL语句可以分为多个类别,包括数据查询、数据更新、数据插入、数据删除等。

以下是一些常见的SQL语句及其标准格式:1.SELECT(查询数据):SELECT column1, column2, ...FROM table_nameWHERE condition;例如:SELECT FirstName, LastNameFROM EmployeesWHERE Department = 'IT';2.INSERT(插入数据):INSERT INTO table_name (column1, column2, ...)VALUES (value1, value2, ...);例如:INSERT INTO Customers (CustomerName, ContactName, City)VALUES ('ABC Company', 'John Doe', 'New York');3.UPDATE(更新数据):UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;例如:UPDATE ProductsSET Price = 15.99WHERE Category = 'Electronics';4.DELETE(删除数据):DELETE FROM table_name WHERE condition;例如:DELETE FROM OrdersWHERE OrderID = 1001;5.CREATE TABLE(创建表):CREATE TABLE table_name (column1 datatype1,column2 datatype2,...);例如:CREATE TABLE Employees (EmployeeID INT,FirstName VARCHAR(50),LastName VARCHAR(50),HireDate DATE);这些是SQL中一些基本操作的标准格式。

sql语言的标准

sql语言的标准

sql语言的标准一、概述SQL(StructuredQueryLanguage)是一种用于管理关系数据库系统的标准语言。

它被广泛用于各种数据库管理系统,如MySQL、Oracle、SQLServer等。

本标准旨在规范SQL语言的使用和行为,以确保在不同的数据库管理系统之间的一致性和互操作性。

二、语法规则1.语句结构:SQL语句通常以一个或多个关键字开头,后面跟着表名、列名、条件、操作符和值等元素。

语句以分号结尾。

2.关键字:SQL关键字用于指定操作类型,如SELECT、INSERT、UPDATE、DELETE等。

3.表格和列:表格是SQL中的基本数据结构,由列和行组成。

列名是表格中每个单元格的名称,行是表格中的数据单元。

4.条件:条件用于筛选表格中的数据。

常用的条件包括等于、不等于、大于、小于、包含等。

5.操作符:操作符用于执行各种数据操作,如加法、减法、乘法、除法等。

6.排序和分组:SQL支持对表格数据进行排序和分组,以便对数据进行更高级的查询和分析。

三、标准内容1.语法规则:详细描述SQL语句的语法结构,包括关键字、表格和列的命名规则、条件和操作符的使用方法等。

2.数据类型:定义SQL支持的数据类型,包括数字、字符串、日期等。

3.查询语句:规定如何使用SELECT语句从表格中检索数据,包括通配符的使用、聚合函数的使用等。

4.插入语句:规定如何使用INSERT语句向表格中插入数据。

5.更新语句:规定如何使用UPDATE语句修改表格中的数据。

6.删除语句:规定如何使用DELETE语句删除表格中的数据。

7.事务处理:规定如何使用事务来确保数据库操作的原子性、一致性和隔离性。

8.安全性:规定如何使用SQL语句来保护数据库的安全性,包括用户身份验证、权限管理等。

9.性能优化:提供一些优化SQL语句的建议,以提高查询性能和响应速度。

四、标准实施1.数据库管理系统开发商:数据库管理系统开发商应遵循本标准,确保其产品支持SQL语言的规范使用。

跟我学程序命名规范——数据库SQL Script书写规范

跟我学程序命名规范——数据库SQL Script书写规范

跟我学程序命名规范——数据库SQL Script书写规范1.1创建数据库
1.1.1数据库命名
数据库文件的命名=db+首字母要大写的名词组。

如:dbNewTimesERP(新时代公司的ERP数据库)。

1.1.2数据库表的命名
数据库表的命名=tab+首字母要大写的名词组。

如:tabUser(管理XXX应用系统用户身份数据的表)。

1.1.3数据库表中字段的命名规则
数据库表中字段的命名规则如下表:
1.1.4存储过程的命名规则
数据库存储过程的命名= proc+首字母要大写的名词组。

如:procGetFuncs(从数据库中获取程序功能模块的存储过程)。

1.2表创建SQL语句的书写风格
CREATE TABLE 表名(
字段名类型及宽度初始条件或约束条件, --注释说明
….
)
表创建SQL语句的书写要求:字段名缩进4个空格。

SQL编码规范

SQL编码规范

SQL编码规范1.书写格式  ⽰例代码: 存储过程SQL⽂书写格式例 select c.dealerCode, round(sum(c.submitSubletAmountDLR + c.submitPartsAmountDLR + c.submitLaborAmountDLR) / count(*), 2) as avg, decode(null, 'x', 'xx', 'CNY') from ( select a.dealerCode, a.submitSubletAmountDLR, a.submitPartsAmountDLR, a.submitLaborAmountDLR from SRV_TWC_F a where (to_char(a.ORIGSUBMITTIME, 'yyyy/mm/dd') >= 'Date Range(start)' and to_char(a.ORIGSUBMITTIME, 'yyyy/mm/dd') <= 'Date Range(end)' and nvl(a.deleteflag, '0') <> '1') union all select b.dealerCode, b.submitSubletAmountDLR, b.submitPartsAmountDLR, b.submitLaborAmountDLR from SRV_TWCHistory_F b where (to_char(b.ORIGSUBMITTIME, 'yyyy/mm/dd') >= 'Date Range(start)' and to_char(b.ORIGSUBMITTIME,'yyyy/mm/dd') <= 'Date Range(end)' and nvl(b.deleteflag,'0') <> '1') ) c group by c.dealerCode order by avg desc; C#中⾥的SQL字符串书写格式例 strSQL = "insert into Snd_FinanceHistory_Tb " + "(DEALERCODE, " + "REQUESTSEQUECE, " + "HANDLETIME, " + "JOBFLAG, " + "FRAMENO, " + "INMONEY, " + "REMAINMONEY, " + "DELETEFLAG, " + "UPDATECOUNT, " + "CREUSER, " + "CREDATE, " + "HONORCHECKNO, " + "SEQ) " + "values ('" + draftInputDetail.dealerCode + "', " + "'" + draftInputDetail.requestsequece + "', " + "sysdate, " + "'07', " + "'" + frameNO + "', " + requestMoney + ", " + remainMoney + ", " + "'0', " + "0, " + "'" + draftStruct.employeeCode + "', " + "sysdate, " + "'" + draftInputDetail.honorCheckNo + "', " + index + ")"; 1).缩进 对于C#⾥的SQL字符串,不可有缩进,即每⼀⾏字符串不可以空格开头 2).换⾏ 1>.Select/From/Where/Order by/Group by等⼦句必须另其⼀⾏写 2>.Select⼦句内容如果只有⼀项,与Select同⾏写 3>.Select⼦句内容如果多于⼀项,每⼀项单独占⼀⾏,在对应Select的基础上向右缩进8个空格(C#⽆缩进) 4>.From⼦句内容如果只有⼀项,与From同⾏写 5>.From⼦句内容如果多于⼀项,每⼀项单独占⼀⾏,在对应From的基础上向右缩进8个空格(C#⽆缩进) 6>.Where⼦句的条件如果有多项,每⼀个条件占⼀⾏,以AND开头,且⽆缩进 7>.(Update)Set⼦句内容每⼀项单独占⼀⾏,⽆缩进 8>.Insert⼦句内容每个表字段单独占⼀⾏,⽆缩进;values每⼀项单独占⼀⾏,⽆缩进 9>.SQL⽂中间不允许出现空⾏ 10>.C#⾥单引号必须跟所属的SQL⼦句处在同⼀⾏,连接符("+")必须在⾏⾸ 3).空格 1>.SQL内算数运算符、逻辑运算符连接的两个元素之间必须⽤空格分隔 2>.逗号之后必须接⼀个空格 3>.关键字、保留字和左括号之间必须有⼀个空格 2.不等于统⼀使⽤"<>"。

SQL及其规范

SQL及其规范

SQL及其规范SQL及其规范SQL(Structured Query Language结构化查询语⾔)是⼀种数据库查询语⾔和程序设计语⾔,主要⽤于管理数据库中的数据,如存取数据、查询数据、更新数据等。

SQL是专为数据库⽽建⽴的操作命令集,是⼀种功能齐全的数据库语⾔。

在使⽤它时,只需要发出"做什么"的命令,"怎么做"是不⽤使⽤者考虑的。

SQL功能强⼤、简单易学、使⽤⽅便,已经成为了数据库操作的基础,并且现在⼏乎所有的数据库均⽀持SQL。

<1> 在数据库系统中,SQL语句不区分⼤⼩写。

但字符串常量区分⼤⼩写。

建议命令⼤写,表名库名⼩写;<2> SQL语句可单⾏或多⾏书写,以";"结尾。

关键词不能跨多⾏或简写。

<3> ⽤空格和缩进来提⾼语句的可读性。

⼦句通常位于独⽴⾏,便于编辑,提⾼可读性。

SELECT * FROM tb_tableWHERE NAME="YUAN";<4> 注释:单⾏注释:--多⾏注释:/*......*/<5>SQL语句可以折⾏操作<6>SQL语⾔由DDL,DML,DQL和DCL组成(1)数据库定义语⾔(Data Definition Language,DDL)数据库定义语⾔主要⽤于定义数据库、表等,其中包括CREATE语句、ALTER语句和DROP语句。

CREATE语句⽤于创建数据库、数据表等,ALTER语句⽤于修改表的定义等,DROP语句⽤于删除数据库、删除表等。

(2)数据库操作语⾔(Data Mabipulation Language,DML)数据库操作语⾔主要⽤于数据库进⾏添加、修改、删除操作,其中包括INSERT语句、UPDATE语⾔和DELETE语句。

INSERT语句⽤于插⼊数据,UPDATE语句⽤于修改数据,DELETE语句⽤于删除数据。

sql语法规则

sql语法规则

sql语法规则
SQL语法规则是用来指导书写SQL语句的一系列规则和约定。

以下是一些常见的SQL语法规则:
1. 关键字和函数名不区分大小写,但是一般习惯使用大写字母表示关键字,小写字母表示表名和列名。

2. SQL语句以分号(;)结尾。

在一些数据库管理系统中可以
省略分号,但是建议在每个语句后面加上分号以增加可读性和可维护性。

3. 一个SQL语句可以跨越多行,并使用缩进或换行来增加可
读性。

4. 在表名和列名中可以使用字母、数字和下划线,但是不能以数字开头。

5. 字符串可以用单引号(')或双引号(")括起来。

在使用引
号时要注意匹配使用。

6. 注释可以用两个减号(--)或者斜杠星号(/* */)表示,可以
用于注释单行或多行代码。

7. SQL语句可以使用通配符来模糊匹配数据,常用的通配符
有百分号(%)和下划线(_)。

8. SQL语句的关键字一般包括SELECT、FROM、WHERE、GROUP BY、ORDER BY等等,这些关键字的顺序对于SQL
语句的执行有重要的影响。

9. SQL语句可以使用逻辑运算符(AND、OR、NOT)和比较
运算符(=、<、>、<=、>=、<>)来组合和过滤数据。

10. SQL语句可以使用函数来对数据进行计算、转换或聚合。

以上只是SQL语法规则的一部分,不同的数据库管理系统可
能会有些许差异,具体的规则还需要根据所使用的数据库来确定。

oracle sql标准格式

oracle sql标准格式

oracle sql标准格式Oracle SQL的标准格式并没有一个固定的标准,因为SQL的编写风格可以因个人、团队或公司的偏好而异。

然而,有一些通用的最佳实践和格式规范,这些规范可以提高SQL的可读性、可维护性和性能。

以下是一些建议的Oracle SQL标准格式:书写规范大小写一致:关键字、表名、列名等的大小写应保持一致。

通常,表名和列名使用大写,而SQL关键字则使用小写。

关键字单独占一行:例如SELECT, FROM, WHERE, AND, GROUP BY, ORDER BY 等关键字应单独占一行。

行缩进和对齐:建议语句中的关键字右对齐,以提高可读性。

空格使用:在SQL语句的算术运算符、逻辑运算符(如AND, OR, NOT)和比较运算符(如=, <>, <=, >=, BETWEEN, AND)前后应加上空格。

注释:对于复杂的SQL语句,应加上注释以解释算法和功能。

注释应单独成行,并放在语句前面。

单行注释使用--,多行注释使用/* */。

表别名:在多表连接时,使用表的别名来引用列,可以提高查询的可读性。

列和条件单独占行:SELECT 后面的每一列(当列数大于1时)和WHERE 后面的每个条件(当条件数大于1时)应单独占一行。

避免使用SELECT *:应明确指出要查询的字段名,而不是使用*。

性能优化建议简化关键SQL语句:避免包含太多的嵌套,以减少执行计划错误的可能性。

使用表别名:在进行多表连接时,为每个字段的使用都带上表别名。

避免使用INSERT INTO ... VALUES:应指定插入的字段名,而不是直接使用VALUES。

减少不必要的类型转换:避免在WHERE 子句中对索引列进行类型转换。

慎重使用索引:索引可以提高查询性能,但也会降低INSERT 和UPDATE 的性能。

应根据实际情况来创建索引。

避免在WHERE 子句中使用使索引失效的表达式:例如,避免使用<>、NOT、IS NULL、IS NOT NULL、LIKE '%xxxx%' 等。

sql 规则和范式

sql 规则和范式

sql 规则和范式
SQL规则和范式是数据库设计和管理中非常重要的概念。

首先,让我们来谈谈SQL规则。

SQL是结构化查询语言的缩写,它是一种
用于管理关系型数据库的标准化语言。

SQL规则是指在编写SQL语
句时需要遵循的一系列规则和约定,以确保数据库操作的准确性和
一致性。

这些规则包括语法规则、数据类型规则、约束规则等。

例如,SQL语句必须按照特定的语法结构编写,数据类型必须与字段
定义一致,约束条件必须满足数据库设计的要求等。

接下来是范式的概念。

范式是用来规范化数据库设计的一组原则,旨在减少数据冗余和提高数据的一致性。

常见的范式包括第一
范式(1NF)、第二范式(2NF)、第三范式(3NF)等。

第一范式要求每个字段具有原子性,不可再分;第二范式要求每个非主键字段
完全依赖于全部主键而不是部分主键;第三范式要求每个字段都直
接依赖于主键,而不是依赖于其他非主键字段。

在SQL中,范式的应用可以提高数据库的性能和可维护性,减
少数据冗余和提高数据的完整性。

但是,过度范式化也可能导致查
询性能下降,需要在设计数据库时权衡范式化和性能之间的关系。

总的来说,SQL规则和范式是数据库设计和管理中非常重要的概念,它们能够帮助我们设计出高效、可靠的数据库结构,提高数据的一致性和完整性。

在实际应用中,需要根据具体的业务需求和性能要求来灵活运用这些原则。

sql基本语法格式

sql基本语法格式

sql基本语法格式SQL的基本语法格式如下:1. SELECT语句:用于查询数据```sqlSELECT 列名1, 列名2, ... FROM 表名 WHERE 条件;```2. INSERT语句:用于插入数据```sqlINSERT INTO 表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...);```3. UPDATE语句:用于更新数据```sqlUPDATE 表名 SET 列名1 = 值1, 列名2 = 值2 WHERE 条件; ```4. DELETE语句:用于删除数据```sqlDELETE FROM 表名 WHERE 条件;```5. CREATE TABLE语句:用于创建表```sqlCREATE TABLE 表名 (列名1 数据类型,列名2 数据类型,...);```6. ALTER TABLE语句:用于修改表结构```sqlALTER TABLE 表名 ADD 列名数据类型;ALTER TABLE 表名 MODIFY 列名新数据类型;ALTER TABLE 表名 DROP 列名;```7. CREATE INDEX语句:用于创建索引```sqlCREATE INDEX 索引名 ON 表名 (列名);```8. DROP TABLE语句:用于删除表```sqlDROP TABLE 表名;```注意:以上语法格式仅为示例,并不包括所有的SQL语句和语法规则。

不同的数据库在具体的语法细节上可能会有所差异,具体的语法规则应根据使用的数据库类型进行查阅。

markdown sql 写法

markdown sql 写法

SQL(Structured Query Language)是一种用于管理关系数据库管理系统(RDBMS)的标准化语言。

它允许用户对数据库进行查询、更新、删除以及管理数据的操作。

在实际的数据库管理工作中,我们经常需要编写SQL语句来完成各种操作。

而在编写SQL语句的过程中,合理的格式和规范的写法能够提高代码的可读性和可维护性,从而提高工作效率。

在本文中,我们将介绍SQL语句的写法,并讨论一些在实际工作中常见的SQL写法问题。

一、基本SQL语句的写法1. SELECT语句的写法SELECT语句是SQL中最常用的语句之一,用于从数据库中检索数据。

合理的SELECT语句写法能够提高代码的可读性。

以下是一些常见的SELECT语句的写法规范:(1)明确指定字段名称,避免使用“*”通配符。

(2)使用换行和缩进来规范SQL语句的结构。

(3)使用AS关键字为字段设置别名,增加代码的可读性。

(4)使用LIMIT关键字限制返回的记录数。

2. INSERT语句的写法INSERT语句用于向数据库中插入新的记录。

在编写INSERT语句时,我们需要注意以下几点:(1)明确指定要插入数据的字段名称。

(2)在VALUES子句中为每个字段指定要插入的值。

(3)使用换行和缩进来规范SQL语句的结构。

3. UPDATE语句的写法UPDATE语句用于更新数据库中的记录。

在编写UPDATE语句时,需要注意以下几点:(1)明确指定要更新的字段名称和更新的值。

(2)使用WHERE子句限制更新的记录范围,避免意外更新所有记录。

(3)使用换行和缩进来规范SQL语句的结构。

4. DELETE语句的写法DELETE语句用于从数据库中删除记录。

在编写DELETE语句时,需要注意以下几点:(1)使用WHERE子句限制删除记录的范围,避免意外删除所有记录。

(2)使用换行和缩进来规范SQL语句的结构。

二、高级SQL语句的写法除了基本的SELECT、INSERT、UPDATE、DELETE语句外,SQL还支持一些高级的语句,如JOIN、子查询、UNION等。

SQL开发规范

SQL开发规范

二十二条-注意-GROUP BY
• 组处理函数只能出现在选择列表,ORDER BY子句,HAVING子句中 ,而不能出现在WHERE子句和GROUP BY子句中
• 除了COUNT(*)之外,其他组处理函数都会忽略NULL行 • 如果选择列表同时包含列,表达式和组函数,则这些列,表达式都必
须出现在GROUP BY子句中 • 在组处理函数中可以指定ALL,DISTINCT选项ቤተ መጻሕፍቲ ባይዱ其中ALL是默认的选
二十二条-注意-IN
• 通过IN可以减少SQL的调用次数,但是IN的数据过多的话 会导致执行计划的不稳定性和SQL性能的极具变化,所以 不要在IN放置过多的数据。
• 一般IN里面的值个数超过20个以后性能基本没什么太大变 化,也特别说明不要超过100,超过后可能会引起执行计 划的不稳定性及增加数据库CPU及内存成本
开发规范-二十二条
查询语句的结果字段应该书写明确的列名,不应该使用通配符
不应该在代码使用DDL相关操作
查询语句应该设置有效的限定条件,返回预期的结果集,避免返回过大的 结果集 使用 SELECT…FETCH FIRST nROWSONLY限制结果集大小,建议100 个以内 用于比较的数据应该使用相同的数据类型,避免发生数据转换
开发规范-二十二条
避免对3个以上的字段排序
避免对长度超过30的字符字段进行排序
避免在排序字段上添加表达式
不使用任何聚合函数情况下,使用DISTINCT替代GROUP BY
根据业务逻辑选择最低粒度的隔离级别。在允许脏读的前提下, 在查询语句中应该使用WITH UR,避免不必要的锁表 IN中参数个数避免超过20个
SQL开发规范-目录
SQL书写规范 开发规范

sql书写规范

sql书写规范

sql书写规范SQL(结构化查询语言)是一种用于处理关系型数据库的标准化语言。

在编写SQL查询语句时,遵循一定的书写规范可以提高代码的可读性、可维护性和可扩展性。

下面是SQL书写规范的一些基本原则和建议。

一、命名规范:1. 数据库、表、列的命名应具有描述性,能够清晰表达其含义。

2. 使用小写字母和下划线作为命名的分隔符,避免使用特殊字符和空格。

3. 命名要保持一致,避免使用缩写和简写,使用完整的单词。

二、缩进和空格:1. 使用适当的缩进,增加代码的可读性,通常每个缩进层级使用4个空格或一个制表符。

2. 在关键字、表名、列名、运算符等之间使用适当的空格,使其更易读。

如:SELECT column1, column2 FROM table_name WHERE condition。

三、注释:1. 在SQL语句中适时添加注释,解释代码的作用和意图,方便维护和理解。

2. 注释符号根据数据库的不同而异,通常是"--"和"/* */"。

如:SELECT column1, column2 -- 这是一个注释 FROM table_name;四、代码格式化:1. 使用大写字母表示SQL关键字,如SELECT、FROM、WHERE等。

2. 每个SQL语句都应该单独一行,并以分号结尾。

3. 当一行代码过长时,可以在适当的地方进行换行,增加代码的可读性。

4. 在二元运算符(如=、<>、<、>等)两边添加适当的空格,使其更易于阅读。

五、表达式和函数:1. SQL语句中的表达式和函数的书写应该尽可能简洁和清晰。

2. 使用括号明确表达式和函数的优先级。

3. 尽量避免在WHERE子句中使用函数,以提高查询性能。

六、SELECT语句:1. SELECT子句中应该指定查询的具体列,而不是使用通配符(*),这样可以减少不必要的数据量。

2. SELECT子句中的列应该按照一定的逻辑顺序排列,可以按照业务逻辑或者字母顺序排列。

JAVA编码规范中关于sql语句规范要求

JAVA编码规范中关于sql语句规范要求

JAVA编码规范中关于sql语句规范要求JAVA编码规范中关于sql语句规范要求1、关键字单独占一行。

(SELECT、UPDATE、DELETE FROM、INSERT INTO、VALUES、SET、FROM、WHERE、GROUP BY、ORDER BY、JOIN)2、每行显式加回车换行符'\r\n'3、每个查询字段、条件字段、分组字段、排序字段单独占一行4、多表连接查询字段、表名都要加别名,且一条语句只要一种连接方式。

5、续行的开始位置为第7个字符,具体缩进格式参见范本sample_sql.txt6、变量用绑定变量或占位符!7、为使代码清晰,“+'\r\n'”右对齐。

---------------------------------------------------------------------------------------------------注意缩进格式说明:select的第一个字段前面空一个“select”的长度,即空6个空格,下面的所有字段、表名的开始位置上下保持对齐。

也就是说,select的字段、from的表名、where的条件字段、group by的分组字段、order by的排序字段的开始位置都是从第7个字符开始的。

delete from、insert into、update语句的字段的开始位置,与此相同。

","前空4个空格,"and"前空2个空格。

left join on在同一行,每个连接字段单独占一行。

----------------------------------------------------------------------------------------------------- 建议:1、续行的“"”与上面的对齐,例如:String sql = " insert into " + "\r\n"+ " ACC_BUDYEARINIT " + "\r\n"2、在insert 语句的values子句、其他sql的where子句中,建议用绑定变量,即用"?" 或 :var_name不要用+ var_name 写成常数。

mybatis.xml中sql编写规范

mybatis.xml中sql编写规范

mybatis.xml 中sql 编写规范一、越少的代码,越强悍的功能,xml 里面应该6个sql 语句就够用了,修改,维护成本很低,见下表英文名方法名称 核心点 建议 insert1.新增数据 如果是自增主键,应该返回主键ID deleteById2. 根据主键ID 删除数据 sql 默认加limit 1,防止多删数据 此方法不建议有,建议逻辑删除 updateById3. 根据主键ID 修改数据 sql 默认加limit 1,防止多修改数据 selectById4. 根据主键查询数据 查询一条数据selectByIdForUpdate 5. 根据主键加锁查询数据 加锁查询一条数据,事务处理用queryListByParam6. 根据输入条件查询数据列表 和7配合使用 queryCountByParam7. 根据输入条件查询总数 和6配合使用二、公共的查询条件和字段列表等抽出公共sql 段,方便使用 英文名方法名称 核心点 建议 _field_list1.字段列表 修改方便,方便字段排序 _value_list2. 字段值列表 修改方便,方便字段值排序_common_where 3. 通用查询条件 每个字段的等值判断_regin_where 4. 通用范围区间条件 字段的时间区间,字段的金额区间等的判断_contain_where 5. 包含字段值范围条件 字段的常量值包含判断,in ,not in_common_sorts 6. 通用排序条件 order by三、一个mybatis.xml 例子Sql代码1.<?xml version="1.0" encoding="UTF-8"?>2.<!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd">3.<mapper namespace="Assets">4.5.6.<!-- 设置1分钟缓存,缓存大小1024,采用最近最少使用算法 -->7.<cache readOnly="true" flushInterval="60000" size="10" eviction="LRU" />8.9.<resultMap type="Assets" id="AssetsResultMap">10.<id property="id" column="id" />11.<result property="userId" column="user_id" />12.<result property="amount" column="amount" />13.<result property="earning" column="earning" />14.<result property="type" column="type" />15.<result property="status" column="status" />16.<result property="productId" column="product_id" / >17.<result property="productName" column="product_n ame" />18.<result property="cardNo" column="card_no" />19.<result property="bankCode" column="bank_code" / >20.<result property="orderId" column="order_id" />21.<result property="effectiveDate" column="effective_d ate" />22.<result property="redeemType" column="redeem_type"/>23.<result property="initAmount" column="init_amount" />24.<result property="initEarning" column="init_earning" />25.<result property="redeemingAmount" column="rede eming_amount"/>26.<result property="redeemingEarning" column="redee ming_earning"/>27.<result property="redeemedAmount" column="redee med_amount"/>28.<result property="redeemedEarning" column="redee med_earning"/>29.<result property="punishAmount" column="punish_a mount"/>30.<result property="latestRedeemTime" column="latest _redeem_time"/>31.<result property="maturityDate" column="maturity_d ate"/>32.<result property="createTime" column="create_time" />33.<result property="modifyTime" column="modify_tim e" />34.<result property="remark" column="remark" />35.</resultMap>36.37.<!-- 字段列表 -->38.<sql id="_field_list">39.id,er_id,41.amount,42.earning,43.type,44.status,45.product_id,46.product_name,47.card_no,48.bank_code,49.order_id,50.effective_date,51.redeem_type,52.init_amount,53.init_earning,54.redeeming_amount,55.redeeming_earning,56.redeemed_amount,57.redeemed_earning,58.punish_amount,test_redeem_time,60.maturity_date,61.create_time,62.modify_time,63.remark64.</sql>65.66.<!-- 字段值列表 -->67.<sql id="_value_list">68.#{id},69.#{userId},70.#{amount},71.#{earning},72.#{type},73.#{status},74.#{productId},75.#{productName},76.#{cardNo},77.#{bankCode},78.#{orderId},79.#{effectiveDate},80.#{redeemType},81.#{initAmount},82.#{initEarning},83.#{redeemingAmount},84.#{redeemingEarning},85.#{redeemedAmount},86.#{redeemedEarning},87.#{punishAmount},88.#{latestRedeemTime},89.#{maturityDate},90.#{createTime},91.#{modifyTime},92.#{remark}93.</sql>94.95.<!-- 通用查询条件不支持ID查询条件,ID的直接通过ID即可以查 -->96.<sql id="_common_where">97.<if test="id != null"> AND id = #{id}</if>98.<if test="userId != null"> AND user_id = #{userId}</if >99.<if test="amount != null"> AND amount = #{amount} </if>100.<if test="earning != null"> AND earning = #{earning} </if>101.<if test="type != null"> AND type = #{type}</if>102.<if test="status != null"> AND status = #{status}</if>103.<if test="productId != null"> AND product_id = #{pro ductId}</if>104.<if test="productName != null"> AND product_name = #{productName}</if>105.<if test="cardNo != null"> AND card_no = #{cardNo} </if>106.<if test="bankCode != null"> AND bank_code = #{ba nkCode}</if>107.<if test="orderId != null"> AND order_id = #{orderId} </if>108.<if test="effectiveDate != null"> AND effective_date = #{effectiveDate}</if>109.<if test="redeemType != null"> AND redeem_type = # {redeemType}</if>110.<if test="initAmount != null"> AND init_amount = #{i nitAmount}</if>111.<if test="initEarning != null"> AND init_earning = #{in itEarning}</if>112.<if test="redeemingAmount != null"> AND redeemin g_amount = #{redeemingAmount}</if>113.<if test="redeemingEarning != null"> AND redeeming _earning = #{redeemingEarning}</if>114.<if test="redeemedAmount != null"> AND redeemed_amount = #{redeemedAmount}</if>115.<if test="redeemedEarning != null"> AND redeemed_ earning = #{redeemedEarning}</if>116.<if test="punishAmount != null"> AND punish_amou nt = #{punishAmount}</if>117.<if test="latestRedeemTime != null">118.<![CDATA[119.AND latest_redeem_time = #{latestRedeemTime, jdbcT ype=TIMESTAMP}120.]]>121.</if>122.<if test="maturityDate != null">123.<![CDATA[124.AND maturity_date = #{maturityDate, jdbcType=TIME STAMP}125.]]>126.</if>127.<if test="createTime != null">128.<![CDATA[129.AND create_time = #{createTime, jdbcType=TIMESTA MP}130.]]>131.</if>132.<if test="modifyTime != null">133.<![CDATA[134.AND modify_time = #{modifyTime, jdbcType=TIMEST AMP}135.]]>136.</if>137.<if test="remark != null"> AND remark = #{remark}</if>138.</sql>139.140.141.<!-- 通用范围区间查询 -->142.<sql id="_regin_where">143.<if test="egtCreateTime != null">144.<![CDATA[145.AND create_time >= #{egtCreateTime, jdbcType=TIME STAMP}146.]]>147.</if>148.<if test="ltCreateTime != null">149.<![CDATA[150.AND create_time < #{ltCreateTime, jdbcType=TIMEST AMP}151.]]>152.</if>153.</sql>154.155.156.<!-- 通用排序处理 -->157.<sql id="_common_sorts">158.<if test="sorts != null">159.ORDER BY160.<foreach collection="sorts" item="item" separator="," >161.${item.column.columnName} ${item.sortMode.mode} 162.</foreach>163.</if>164.</sql>165.166.167.<!-- in 和 not in的通用查询where -->168.<sql id="_contain_where">169.<if test="containStatusSet!=null">170.AND status IN171.<foreach item="item" index="i" collection="containSt atusSet" separator="," open="(" close=")" >172.#{item}173.</foreach>174.</if>175.176.</sql>177.178.179.<!-- 插入操作 -->180.<insert id="insert" parameterType="Assets">181.INSERT INTO assets (182.<include refid="_field_list"/>)183.VALUES (184.<include refid="_value_list"/>)185.</insert>186.187.188.<!-- 根据ID主键进行删除,注意limit 1 -->189.<delete id="deleteById" parameterType="ng.St ring" >190.delete from assets where id = #{id} limit 1191.</delete>192.193.194.<!-- 根据主键ID进行更新,注意limit 1 -->195.<update id="updateById" parameterType="Assets"> 196.UPDATE assets197.<set>198.<if test="userId != null">er_id = #{userId},200.</if>201.<if test="amount != null">202.amount = #{amount},203.</if>204.<if test="earning != null">205.earning = #{earning},206.</if>207.<if test="type != null">208.type = #{type},209.</if>210.<if test="status != null">211.status = #{status},212.</if>213.<if test="productName != null">214.product_name = #{productName},215.</if>216.<if test="productId != null">217.product_id = #{productId},218.</if>219.<if test="cardNo != null">220.card_no = #{cardNo},222.<if test="bankCode != null">223.bank_code = #{bankCode},224.</if>225.<if test="orderId != null">226.order_id = #{orderId},227.</if>228.<if test="effectiveDate != null">229.effective_date = #{effectiveDate},230.</if>231.<if test="redeemType != null">232.redeem_type = #{redeemType},233.</if>234.<if test="initAmount != null">235.init_amount = #{initAmount},236.</if>237.<if test="initEarning != null">238.init_earning = #{initEarning},239.</if>240.<if test="redeemingAmount != null"> 241.redeeming_amount = #{redeemingAmount}, 242.</if>243.<if test="redeemingEarning != null"> 244.redeeming_earning = #{redeemingEarning}, 245.</if>246.<if test="redeemedAmount != null"> 247.redeemed_amount = #{redeemedAmount}, 248.</if>249.<if test="redeemedEarning != null"> 250.redeemed_earning = #{redeemedEarning},252.<if test="punishAmount != null">253.punish_amount = #{punishAmount},254.</if>255.<if test="latestRedeemTime != null">test_redeem_time = #{latestRedeemTime},257.</if>258.<if test="maturityDate != null">259.maturity_date = #{maturityDate},260.</if>261.<if test="modifyTime != null">262.modify_time = #{modifyTime},263.</if>264.<if test="remark != null">265.remark = #{remark},266.</if>267.</set>268.269.<where>270.id = #{id} limit 1271.</where>272.</update>273.274.275.<!-- 根据ID进行查询 -->276.<select id="selectById" resultMap="AssetsResultMap" >277.select * from assets where id = #{id}278.</select>279.281.<!-- 根据ID进行加行锁查询 -->282.<select id="selectByIdForUpdate" resultMap="AssetsR esultMap">283.select * from assets where id = #{id} for update284.</select>285.286.287.<!-- 根据查询条件查询数据和queryCountByParam方法配对使用 -->288.<select id="queryListByParam" parameterType="map" resultMap="AssetsResultMap">289.SELECT290.<include refid="_field_list"/>291.FROM292.assets293.<where>294. 1 = 1295.<include refid="_common_where"/>296.<include refid="_regin_where"/>297.<include refid="_contain_where"/>298.</where>299.300.<include refid="_common_sorts"/>301.302.<if test="offset != null and rows != null">303.limit #{offset}, #{rows}304.</if>305.</select>306.308.<!-- 根据查询条件查询总数和queryListByParam方法配对使用 -->309.<select id="queryCountByParam" parameterType="m ap" resultType="ng.Integer">310.SELECT count(1) FROM assets311.<where>312. 1 = 1313.<include refid="_common_where"/>314.<include refid="_regin_where"/>315.<include refid="_contain_where"/>316.</where>317.</select>318.319.</mapper>。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL编程规范
一、sql书写规范:
二、书写优化性能建议
三、其他经验性规则
一、sql书写规范:
1、sql语句的所有表名、字段名全部小写,系统保留字、内置函数名、sql保留字大写。

2、连接符or、in、and、以及=、<=、>=等前后加上一个空格。

3、对较为复杂的sql语句加上注释,说明算法、功能。

注释风格:注释单独成行、放在语句前面。

(1) 应对不易理解的分支条件表达式加注释;
(2) 对重要的计算应说明其功能;
(3) 过长的函数实现,应将其语句按实现的功能分段加以概括性说明;
(4) 每条SQL语句均应有注释说明(表名、字段名)。

(5) 常量及变量注释时,应注释被保存值的含义(必须),合法取值的范围(可选)
(6) 可采用单行/多行注释。

(-- 或/* */ 方式)
4、SQL语句的缩进风格
(1) 一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进
(2) where子句书写时,每个条件占一行,语句令起一行时,以保留字或者连接符开始,连接符右对齐。

5、多表连接时,使用表的别名来引用列。

6、供别的文件或函数调用的函数,绝不应使用全局变量交换数据;
如例(1)
二、书写优化性能建议
1、避免嵌套连接。

例如:A = B and B = C and C = D
2、where条件中尽量减少使用常量比较,改用主机变量
3、系统可能选择基于规则的优化器,所以将结果集返回数据量小的表作为驱动表(from后边最后一个表)。

4、大量的排序操作影响系统性能,所以尽量减少order by和group by排序操作。

如必须使用排序操作,请遵循如下规则:
(1) 排序尽量建立在有索引的列上。

(2) 如结果集不需唯一,使用union all代替union。

5、索引的使用。

(1) 尽量避免对索引列进行计算。

如对索引列计算较多,请提请系统管理员建立函数索引。

(2) 尽量注意比较值与索引列数据类型的一致性。

(3) 对于复合索引,SQL语句必须使用主索引列
(4) 索引中,尽量避免使用NULL。

(5) 对于索引的比较,尽量避免使用NOT=(!=)
(6) 查询列和排序列与索引列次序保持一致
6、尽量避免相同语句由于书写格式的不同,而导致多次语法分析。

7、尽量使用共享的SQL语句。

8、查询的WHERE过滤原则,应使过滤记录数最多的条件放在最前面。

9、任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。

10、in、or子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引。

三、其他经验性规则
1、尽量少用嵌套查询。

如必须,请用not exist代替not in子句。

如例(2)
2、用多表连接代替EXISTS子句。

如例(3)
3、少用DISTINCT,用EXISTS代替如例(4)
4、使用UNION ALL、MINUS、INTERSECT提高性能
5、使用ROWID提高检索速度。

对SELECT得到的单行记录,需进行DELETE、UPDATE操作时,使用ROWID将会使效率大大提高。

6、使用优化线索机制进行访问路径控制。

7、使用cursor时,显示光标优于隐式光标
本规范示例:
例一:
SELECT aka042 -- 单位缴费划入个人帐户比例
INTO prm_aaa043
FROM ka01 --医疗保险单位缴费划入个人帐户比例分段信息WHERE akc021 = rec_kc01.akc021 -- 医疗人员类别
AND aka041 >= rec_kc01.akc023 -- 年龄上限
AND aka040 <= rec_kc01.akc023 -- 年龄下限
AND aae030 <= prm_date -- 开始时间
AND ( aae031 >= prm_date OR aae031 IS NULL ); -- 终止时间
例二:
X SELECT ......
FROM emp
WHERE dept_no NOT IN ( SELECT dept_no
FROM dept
WHERE dept_cat='A');
O SELECT ......
FROM emp e
WHERE NOT EXISTS ( SELECT 'X'
FROM dept
WHERE dept_no=e.dept_no
AND dept_cat='A');
例三:
X SELECT ......
FROM emp
WHERE EXISTS ( SELECT 'X'
FROM dept
WHERE dept_no=e.dept_no
AND dept_cat='A');
O SELECT ......
FROM emp e,dept d
WHERE e.dept_no=d.dept_no
AND dept_cat='A';
例四:
X SELECT DISTINCT d.dept_code,d.dept_name FROM dept d ,emp e
WHERE e.dept_code=d.dept_code;
O SELECT dept_code,dept_name
FROM dept d
WHERE EXISTS ( SELECT 'X'
FROM emp e
WHERE e.dept_code=d.dept_code);。

相关文档
最新文档