ORACLE SQL编写规范(v1.1)

合集下载

Oracle数据库设计规范建议

Oracle数据库设计规范建议

Oracle数据库1 数据对象的命名规范1.1 通用规范1.1.1 使用英文:要用简单明了的英文单词,不要用拼音,特别是拼音缩写。

主要目的很明确,让人容易明白这个对象是做什么用的;1.1.2 一律大写,特别是表名:有些数据库,表的命名乃至其他数据对象的命名是大小写敏感的,为了避免不必要的麻烦,并且尊重通常的习惯,最好一律用大写;1.2 数据库对象命名规范1.2.1 表的命名1.2.1.1 表名的前缀:前缀_表名_T。

为表的名称增加一个或者多个前缀,前缀名不要太长,可以用缩写,最好用下划线与后面的单词分开;其目的有这样几个:1.2.1.1.1 为了不与其他项目或者其他系统、子系统的表重名;1.2.1.1.2 表示某种从属关系,比如表明是属于某个子系统、某个模块或者某个项目等等。

表示这种从属关系的一个主要目的是,从表名能够大概知道如何去找相关的人员。

比如以子系统为前缀的,当看到这个表的时候,就知道有问题可以去找该子系统的开发和使用人员;1.2.2 视图命名:相关表名_V(或者根据需要另取名字);1.2.3 程序包命名:程序包名_PKG(用英文表达程序包意义);1.2.4 存储过程命名:存储过程名_PRO(用英文表达存储过程意义);1.2.5 函数命名:函数名称_FUN(用英文表达函数作用);1.2.6 触发器命名:触发器名称_TRI(用英文表达触发器作用);1.2.7 索引命名:表名_字段名_IDX(如果存在多字段索引,取每字段前三个字符加下划线组合,如在 custom, cutting, curtail 上建立联合索引,命名为表名_cus_cut_cur_IDX,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如在 custid, custom,custname上建立联合索引,就命名为表_tid_tom_tna_IDX;1.2.8 唯一索引命名:表名_字段名_UNI(如果存在多字段唯一索引,取每字段前三个字符加下划线组合,如在 custom, cutting, curtail上建立唯一索引,命名为表名_ cus_cut_cur_UNI,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如:在 custid, custom,custname上建立唯一索引,命名:表_tid_tom_tna_UNI;1.2.9 主键命名:表名_字段名_PK(如果存在多字段主键,取每字段前三个字符加下划线组合,如在 custom, cutting, curtail上建立主键,命名为表名_cus_cut_cur_PK,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如在 custid, custom,custname上建立主键,命名:表_tid_tom_tna_PK;1.2.10 外键命名:表名_主表名_字段名_FK;1.2.11 Sequence命名:表名_列名_SEQ(或者根据需要另取名字);1.2.12 Synonym命名:与对应的数据库对象同名;1.2.12 JAVA命名:遵守公司相应的JAVA命名规范;2 SQL的设计和使用2.1 Sql 书写规范2.1.1 尽量不要写复杂的SQL:过于复杂的S QL可以用存储过程或函数来代替,效率更高;甚至如果能保证不造成瓶颈的话,把条SQL拆成多条也是可以的。

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注入攻击。

oracle数据库开发规范

oracle数据库开发规范

编程规范1:所有数据库关键字和保留字都大写;字段、变量的大小写2:程序块采用缩进风格书写,保证代码清晰易读,风格一致,缩进格数统一为2/4个。

必须使用空格,不允许使用【tab】键。

3:当同一条语句暂用多于一行时,每行的其他关键字与第一行的关键字进行右对齐。

4:不允许多个语句写到一行,即一行只写一条语句。

5:避免把复杂的SQL语句写到同一行,建议要在关键字和谓词处换行。

6:相对独立的程序块之间必须加空行。

BEGIN、END独立成行。

7:太长的表达式应在低优先级操作符处换行,操作符或关键字应放在新行之首。

不同类型的操作符混合使用时,用括号隔离,使得代码清晰。

8: 不同类型的操作符混合使用时,应使用括号明确的表达运算的先后关系。

9:运算符以及比较符左边或者右边只要不是链接的括弧,则空一格。

10:if 后的条件要用括号括起来,括号内每行最多两个条件。

11:减少控制语句的检查次数,如在else( if..else)控制语句中,对最常用符合条件,尽量往前被检查到。

尽量避免使用嵌套的if 语句,在这种情况应使用多个if 语句来判断其可能。

命名规范1:不使用数据库关键字和保留字,为了避免不必要的冲突和麻烦。

2:严禁使用带空格的名称来给字段和表命名,会出错误而终止。

3:用户自定义数据库对象:表,视图,主外键,索引,触发器,函数,存储过程,序列,同义词,数据库连接,包,包体风格要保持一致。

数据库名称1-8个字符,其他对象1-30个字符,数据库连接不操过30个字符。

使用英文字母、数字、下划线。

除表外,其他对象命名最好用不同的前缀来区别。

表tbl_/t_视图v_序列seq_簇c_触发器trg_存储过程sp_/p_函数f_/fn_物化视图mv_包和包体pkg_类和类体typ_主键pk_外键fk_唯一索引uk_普通索引idx_位图索引bk_4:PL/SQL对象和变量命名规则输入变量i_输出变量o_输入输出变量io_普通变量v_全局变量gv_常量大写游标cur_用户自定义类型type_保存点spt_不允许使用中文和特殊字符用户对象命名应全部为小写,且不允许使用控制符号强制转换对象为小写字符变量命名,要有具体含义,能表明变量类型。

ORACLE-SQL语句学习教程

ORACLE-SQL语句学习教程

目录概述 (2)第一章SQL*PLUS 工具软件的使用 (5)第二章基本查询 (9)第三章条件查询 (13)第四章单行函数 (16)第五章多表查询 (20)第六章组函数 (23)第七章子查询 (25)第八章运行期间指定变量 (29)第九章创建基表 (31)第十章ORACLE数据字典 (36)第十一章操纵数据 (38)第十二章修改基表及其约束 (42)第十三章创建序列 (45)第十四章创建视图 (47)第十五章创建索引 (50)概述20世纪70年代初,E.F。

Codd 在计算机学会(Association of Computer Machinery,简写为ACM)期刊Communications of the ACM(ACM 通讯)发表了题为”A Relational Model of Data for Large Shared Data Banks”(大型共享数据库的数据关系模型)的论文,该论文提出的关系数据库模型成为今天最为权威的关系型数据库管理模型.IBM公司首先使用该模型开发出了结构化英语查询语言SEQUEL(Structured English Query Language),作为其关系数据库原型System R的操作语言,实现对关系数据库的信息检索.SEQUEL后来简写为SQL,即Structured Query Language(结构化查询语言)的缩写.ORACLE公司于1997年推出了第一个商业应用的SQL软件.20世纪80年代初,美国国家标准化组织(ANSI)开始着手制订SQL标准,最早的ANSI 标准于1986年颁布,它也被称为SQL-86。

标准的出台使SQL作为标准的关系数据库语言的地位得到加强。

SQL标准几经修改和完善,目前SQL语言方面新的ANSI标准是1992年制定的ANSI X3.135—1992,“Database Language SQL”。

此标准也被国际电工委员会(International Electro technical Commission,即IEC)所属的国际标准化组织(International Standards Organization, 即ISO)所接受,并将它命名为ISO/IEC9075:1992, “Database Language SQL”。

SQL开发规范

SQL开发规范

SQL开发规范目录命名规则 (3)P ASCAL命名 (3)表名和字段 (3)存储过程 (3)视图 (3)其他 (3)设计规范 (4)规范约定 (4)字段规范 (4)使用规范 (4)查询语句 (4)数据修改 (4)综合使用 (4)命名规则Pascal命名1.每一个单词的第一个字母大写,例如:B ank N ame2.常用单词缩写三个字母以下字母都大写,例如:SP、PG3.常用单词缩写三个字母以上第一个字母大写,例如:Xml表名和字段1.使用英文单词或词组作为表名,不得使用汉语拼音2.如有必要,建立一个中英文对照字典3.用名词和名词短语作表名4.不使用复数,除非与数据库保留字冲突5.用Pascal 命名规则6.尽量谨慎地使用缩写7.尽量不要和关键字重合8.必要时,使用下划线分割单词示例ProductName存储过程命名规则为TableName_action或前缀_ActionName,作业调度使用Job前缀,action或ActionName为存储过程含义用动词或动词短语来命名1.使用常见的缩写,尽量不要和关键字重合2.适当的使用下划线分割过长的名称3.当操作依赖条件时,结尾使用By+条件4.过长的SQL语句需要手工折行示例:AdminUser_ins Job_Dowork视图视图的命名采用V_ViewName的格式,其中V_前缀表示视图,ViewName部分表示视图的含义。

1.使用英文单词或词组作为视图名,不得使用汉语拼音2.用名词和名词短语作视图名3.不使用复数,除非与数据库保留字冲突4.用Pascal 命名规则5.尽量谨慎地使用缩写6.尽量不要和关键字重合7.必要时,使用下划线分割单词视图正确的命名,例如:V_UserInfo其他1.使用英文单词或词组作为数据库对象名,不得使用汉语拼音2.用名词和名词短语作为名称,非必要情况下不添加前缀3.不使用复数,除非与数据库保留字冲突4.用Pascal 命名规则5.尽量谨慎地使用缩写6.尽量不要和关键字重合7.必要时,使用下划线分割单词设计规范规范约定遵守数据的设计规范3NF 规定1.表内的每一个值都只能被表达一次。

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书写规范

SQL书写规范

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 = D2、where条件中尽量减少使用常量比较,改用主机变量3、系统可能选择基于规则的优化器,所以将结果集返回数据量小的表作为驱动表(from后边最后一个表)。

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

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

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

5、索引的使用。

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

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

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

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

SQL编码规范

SQL编码规范

SQL编码规范(V1.00)文 档 信 息文档名称:SQL编码规范电子文档:版本号: 1.00密级:保密文档编号:编写人:马云日期:2007-03-27校对人:日期:审核人:日期:批准人:日期:更 改 记 录更改序号更改原因更改页码更改前版本号更改后版本号更改人生效日期备注目录1注释规范 61.1.一般性注释 61.2.函数文本注释 62.排版格式 72.1.缩进 72.2.换行 82.3.空格 102.4.大小写 102.5.对齐 103.命名规则 113.1.输入变量 113.2.输出变量 113.3.内部变量 113.4.游标命名 114.编码规范 114.1.不等于统一使用"<>" 114.2.使用表的别名 114.3.使用SELECT语句时,必须指出列名 124.4.使用INSERT语句时,必须指定插入的字段名。

124.5.减少子查询的使用 124.6.适当添加索引以提高查询效率 124.7.不要在WHERE字句中对索引列施以函数 124.8.不要使用数据库的类型自动转换功能,使用显式的类型转换 12 4.9.应使用变量绑定实现SQL语句共享,避免使用硬编码 124.10.用执行计划分析SQL性能 14附录A:Oracle SQL性能优化 14A.1选用适合的ORACLE优化器 14A.2访问TABLE的方式 15A.3共享SQL语句 15A.4选择最有效率的表名顺序(只在基于规则的优化器中有效) 17 A.5WHERE子句中的连接顺序 19A.6SELECT子句中避免使用 ‘ * ‘ 19A.7减少访问数据库的次数 19A.8使用DECODE函数来减少处理时间 21A.9整合简单,无关联的数据库访问 22A.10删除重复记录 23A.11用TRUNCATE替代DELETE全表记录 23A.12尽量多使用COMMIT 23A.13计算记录条数 24A.14用Where子句替换HAVING子句 24A.15减少对表的查询 24A.16通过内部函数提高SQL效率 26A.17使用表的别名(Alias) 27A.18用EXISTS替代IN 27A.19用NOT EXISTS替代NOT IN 28A.20用表连接替换EXISTS 29A.21用EXISTS替换DISTINCT 30A.22识别'低效执行'的SQL语句 31A.23使用TKPROF 工具来查询SQL性能状态 31A.24用EXPLAIN PLAN 分析SQL语句 32A.25用索引提高效率 34A.26索引的操作 34A.27基础表的选择 36A.28多个平等的索引 37A.29等式比较和范围比较 38A.30不明确的索引等级 39A.31强制索引失效 40A.32避免在索引列上使用计算 41A.33自动选择索引 42A.34避免在索引列上使用NOT 42A.35用>=替代> 44A.36用UNION替换OR (适用于索引列) 44A.37用IN来替换OR 48A.38避免在索引列上使用IS NULL和IS NOT NULL 49 A.39总是使用索引的第一个列 50A.40ORACLE内部操作 51A.41用UNION-ALL 替换UNION ( 如果有可能的话) 51 A.42使用提示(Hints) 53A.43用WHERE替代ORDER BY 54A.44避免改变索引列的类型 56A.45需要当心的WHERE子句 57A.46连接多个扫描 58A.47CBO下使用更具选择性的索引 60A.48避免使用耗费资源的操作 60A.49优化GROUP BY 61A.50使用日期 62A.51使用显式的游标(CURSORs) 62A.52优化EXPORT和IMPORT 62A.53分离表和索引 631注释规范.1. 一般性注释.1.1. 创建每一数据库对象时都要加上COMMENT ON注释,以说明该对象的功能和用途;建表时,对某些数据列也要加上COMMENT ON注释,以说明该列和/或列取值的含义。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2
1.SQL(PL/SQL)编码格式规范
一些第三方开发工具,例如TOAD等,都有比较好的格式化功能,大家可以用 其做风格统一和美化使用,以下是自定义的一套规范,可以供大家参考。


大小写风格
所有数据库的关键字和保留字均使用大写,对象名称、列名称则使用小写。 缩进风格
程序块以及SQL均采取统一的缩进风格书写,保持代码的清晰易懂,风格一致,
ANSI标准写法:使用RIGHT(LEFT) OUTER JOIN ON来实现外连接
SELECT i.first_name, st_name, z.state FROM instructor i RIGHT OUTER JOIN zipcode z ON i.zip = z.zip GROUP BY i.first_name, z.state;
7. FOR UPDATE语句使用注意
FOR UPDATE语句的作用在于并发环境下,某用户将查询到的数据加锁,以
便后续的操作过程中,该数据不会被其他用户所修改,这通常用于一些公共模块的 公共处理场景。
由于锁定操作势必会影响到并发性,所以原则就是尽量把条件限定严格,使
锁定的记录数最少,并且在后续的操作完成后尽快提交或回滚事务,以便其他用户 能尽快得到锁资源。 除特殊原因外,严格禁止不加过滤条件的SELECT语句中使用FOR UPDATE 子句。
多表连接的ANSI写法:
SELECT s.section_no, c.course_no, c.description,i.first_name, st_name FROM course c JOIN section s ON (s.course_no = c.course_no) JOIN instructor i ON (i.instructor_id = s.instructor_id);
10
2.ANSI SQL标准规范
外连接(OUTER JOIN)
ORACLE的方言写法:使用(+)来实现外连接
SELECT i.first_name, st_name, z.state FROM instructor i, zipcode z WHERE i.zip (+) = z.zip GROUP BY i.first_name, st_name, z.state;
缩进格式保持2到4个。缩进使用空格,而不要使用【Tab】键。 当一条SQL中的谓词和子句比较多时,尽量断开成多行,可以采用使子句开头 保持一行的方式,谓词关键字保持右侧对齐,左侧缩进的方式。
3
1.SQL(PL/SQL)编码格式规范
IF flag = 1 THEN SELECT username INTO v_userinfo FROM userinfo WHERE userid = :iuserid; END IF;
2.ANSI SQL标准规范
多表连接的ORACLE方言写法:
SELECT s.section_no, c.course_no, c.description,i.first_name,st_name FROM course c,section s,instructor i WHERE s.course_no = c.course_no AND i.instructor_id = s.instructor_id
8.提交语句(commit)使用的原则
事务设计中,为了保证事务的完整性和有效性必然使用到提交语句。但提交 语句在使用上也有一些需要注意的地方。 必须及时提交。 这主要是针对高并发的联机事务型(OLTP)数据库所考虑的,因为提交会 使本事务所锁定的资源释放给其它事务,以提高并发性。锁的设计是并发联机事 务所必须要考虑的东西,提交操作又是其中最重要的部分之一。 提交的动作不宜过于频繁。 在不违背第一条原则的前提下,提交又不宜过于频繁。比如一些循环语句的 内部。这一点主要是从性能角度所考虑的。因为提交动作本身会使ORACLE后台 产生一系列操作,将会消耗掉很大的系统资源。究竟循环处理多少条做一次提交, 需要做一些对比测试来最终决定,但过于频繁的提交必定会影响整体性能。
SELECT s.first_name, st_name, z.zip, z.city, z.state FROM student s, zipcode z WHERE s.zip = z.zip;
ANSI写法1:
SELECT s.first_name, st_name, z.zip, z.city, z.state FROM student s JOIN zipcode z ON (s.zip=z.zip);
比如,如下的三条SQL,其达到的目的是一样的,但是在ORACLE看来这是三条
完全不同的语句,所以要进行三次硬解析。 select * from employees where department_id = 60; SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID = 60; select /*+ PARALLEL */ * from employees where department_id = 60; 对于联机交易型系统来说,SQL的软解析率是非常关注的一个指标。而引起 SQL不能共享的主要因素包括:大小写、空格、注释、提示等。
直接截断表的空间存储与表定义之间的关系。 因为是字典一级的操作,所以速度会非常快,而且无论表记录数的多少,正 常情况下TRUNCATE语句都会在数秒内完成。但要注意其与DELETE操作的区别 是不需要提交操作,且无法回滚。 TRUNCATE操作可以针对表以及表分区级,在对分区数据做清理时还是非常 有用的。
ORACLE SQL编写规范 v1.1
武明明
2012年11月
技术规划部 数据库组 wumingming@boco
1.SQL(PL/SQL)编码格式规范
统一的SQL编码格式规范不但可以使阅读者感到清晰明了,而且可以最大程度 上避免同一SQL语句在不同地方处理时由于书写格式的不统一,而造成无法共享从 而增加SQL解析负担的问题。

空格及换行 不允许把多个语句写在一行,即一行只写一条语句; 避免将复杂的语句写在同一行,建议在谓词和关键字处换行; 相对独立的程序块之间必须加空行; BEGIN、END独立成行; 太长的表达式应在低优先级操作符处换行,操作符或关键字放在新行之首, 划分出新行应适当地缩进,使排列整齐,语句可读;
1.SQL(PL/SQL)编码格式规范
3.提示(HINT)的书写注意
提示中的+不能少,如果少了,会被优化器当做注释来处理。

提示必须跟在语句的第一个关键字后面,如第二个语句中如果在INTO关键字
后面放置提示的话,将会被优化器忽略。

如需要写多个提示,则可以合在一起,中间使用空格隔开。
ห้องสมุดไป่ตู้
提示中所引用的表如果定义了别名,则提示中必须引用别名,否则该提示也
SELECT * FROM instructor, course;
ANSI写法:
SELECT * FROM instructor CROSS JOIN course;
2.ANSI SQL标准规范
等价连接(EQUI JOIN),也称内连接(INNER JOIN)或规则连接 (REGULAR JOIN),是指表间有等价连接条件的连接方式。 ORACLE方言写法:
2.ANSI SQL标准规范
1989年,美国国家标准协会(ANSI)第一次发布了SQL标准规范,92年被修
订,简称SQL-92,目前这个标准为SQL-99。各主要数据库厂商均宣布支持该标准,
但因历史遗留问题,大多也有一些各自的特性在产品中。如果我们在SQL编写规范 上面做到符合ANSI的标准,在产品向不同的数据库平台移植的过程中就不会遇到 由于某一产品的特殊语法与其他产品不兼容而需要调整的问题。 ORACLE由于早于ANSI有一套SQL语法定义方式,其与ANSI的不同主要体现 在“关联”(JOIN)语句的书写方式上。 一些使用过ORACLE老版本的SQL编码人员还是非常习惯于ORACLE那套老 的书写方式。是否使用ANSI SQL规范并非强制,可以由项目管理人员决定。如果
起不到作用。
4.尽量避免笛卡尔连接
产生笛卡尔连接的原因就是在多张表进行关联的操作中缺少了表间的连接条
件。由于笛卡尔积产生的结果集将是多表记录的乘积关系,因此当哪怕只有一张 表的记录数比较大时,其结果集都将被数倍以上地放大,这势必给数据库性能带
来严重影响。
因此,除一些特殊原因外,要尽量避免笛卡尔连接的产生,也就是说在写关 联语句时要严格检查连接条件是否有遗漏。 请编码及检查人员注意,不带连接条件的多表连接语句是严格禁止的,如果 有则必须要说明原因。
2.ANSI SQL标准规范
ANSI写法2:
SELECT s.first_name, st_name, zip, z.city, z.state FROM student s JOIN zipcode z USING (zip);
注意:
ANSI写法中没有使用WHERE语句列出连接条件,而是使用了ON或者USING 子句。 在使用USING子句的方式中,SELECT语句针对表间连接字段是不能用别名加 限定的,如例中的zip字段。
考虑向不同数据库平台做移植时减少兼容性带来的问题,可以参考一下此规范。
2.ANSI SQL标准规范
为了对比上的清晰,分别列出ORACLE老版本上的书写方式(也称ORACLE
方言)与ANSI规范的主要不同之处。
交叉连接(CROSS JOIN),也称笛卡尔连接,是指不限定关联条件的连接
ORACLE方言写法:
且认真检查所提取的每一个字段都是否有必要将是严谨而避免低效的方法。
INSERT语句中列出具体的字段还有一个好处就是可以避免当表结构发生变 化时产生编译性的错误。
相关文档
最新文档