1、中华人民共和国国家标准信息处理系统数据库语言发布实施国家技术监督局发布中华人民共和国国家标准信息处理系统数据库语言国家技术监督局批准实施本标准等同采用国际标准信息处理系统数据库语言具有完整性增强特征的主题内容与适用范围本标准规定两种数库语言的语法与语义模式定义语言它用来申明数据库的结构与完整性约束模块语言与数据操纵语言它用来申明具体的数据库应用程序的数据库过程与可执行的语句本标准定义了数据库的逻辑数据结构和基本操作它提供数据库的设计访问维护控制以及保护方面的能力本标准在互相符合的实现之间为数据库定义与应用程序的移植提供一种途径本标准指明两个级别和一个单独的完整性增强特征级是除了完整性增强特征之
2、外的完备的数据库语言级是在第章级中所定义的级的子集注语言新增加部分计划用作本标准的补篇补篇中要考虑的主要题目包括增强的事务管理某些实现者定义规则的说明增强的字符处理设施和民族字符集的支持该完整性增强特征包括下述指明的三种方式表之间必需满足的引用约束应用于表中行的检验约束把一行插入表中时列的缺省值本标准的附录指明包含在其它标准应用程序中的数据操纵语言的嵌入语法上述的嵌入语法定义为一个标准应用程序的简化表示法在该程序里用包含语句的数据库过程的显式调用替换嵌入的语句本标准适用于这样一种环境中的各种实现该环境可以包含应用程序设计语言最终用户查询语言报告生成器数据字典系统程序库系统分布式通信系统以及各类
3、用于数据库设计数据管理与性能优化诸方面的工具引用标准程序设计语言程序设计语言程序设计语言程序设计语言概述结构本标准的结构如下表示法与约定定义本标准内使用的表示法与约定相符性定义相符性准则第章概念定义定义中使用的术语与提出所用到的概念第章公用元素定义语言中某些部分所出现的语言元素第章模式定义语言定义用来指明数据库的设施第章模块语言定义模块与过程第章数据操纵语言定义的数据操纵语句第章级定义的两个级别和完整性增强特征表示法本标准内所使用的语法表示法是巴科斯范式或巴科斯诺尔范式具有如下的扩展方括号表示任选元素省略号表示可重复一次或多次的元素花括号表示元素的组合序列在语法中如果产生式符号出现在产生式符号
4、的展开式的某个位置则定义为包含如果包含则包含于中如果包含则是所在的的产生式符号约定本标准的语法元素按以下形式指明功能对元素用途的简短陈述格式对元素语法的定义语法规则在内没有表示出的而元素应当满足的附加语法限制一般规则该元素运行时效果的一个顺序说明在语法规则中术语应当定义能在语法上完全符合语言所要求的一些条件对不符合格式或语法规则的语言的处理由实现者定义在一般规则中术语应当定义一些条件在语言执行期间对这些条件做运行测试如果这些条件全部为真则该语句执行成功并将参数置为一个已定义好的非负数如果任何一个条件为假则语句执行不成功且该语句的执行不影响数据库并将参数置为由实现者定义的负数相符的实现并不是要求
5、按照一般规则中所定义的动作的严格顺序执行而是应当对数据库产生与那个顺序同样的效果术语有效地用在一般规则中以强调某些动作它们的效果可由实现以其它方式得到术语持久对象用来表征如模块和模式这一类对象它们由实现者定义的机制予以建立和取消相符性本标准指明符合的语言与符合的实现符合的语言应当遵从范式与相关的语法规则符合的实现则应按照一般规则来处理与标准相符合的语言声称具有相符性的实现应在级或级上处理模式声称具有相符性的实现应在级或级上作下述处理数据操纵语句语句的直接调用和或模块语言模块和或一个或多个下述程序设计语言嵌入的嵌入的程序嵌入的嵌入的程序嵌入的嵌入的程序嵌入的嵌入的程序声称具有全相符性的实现应当在
6、级或级上提供与的相符性相符的实现可以提供一些本标准未指明的附加设施或任选功能一个实现即使给用户提供了处理不相符的语言或以不相符的方式处理相符的语言的选择该实现仍然是相符的声称与本标准相符应陈述具有下列哪些类型的相符性级全相符性级全相符性级相符性级相符性级相符性级相符性实现了下述哪些设施数据操纵语言语句的直接处理模块语言模块嵌入的嵌入的程序嵌入的嵌入的程序嵌入的嵌入的程序嵌入的嵌入的程序是否实现完整性增强特征本标准不定义应用程序与数据库管理系统部件之间结合的方法与时间概念集集是不同对象的无序集合多重集是未必不同的对象的无序集合序列则是未必不同的对象的有序集合集合的基数是这个集合中的对象的个数除非
7、另外指定任一集合可以为空数据类型数据类型是可表示值的集值的逻辑表示是字值值的物理表示是由实现者定义的在本标准内值是初等项对其不能再作逻辑细分值或是空值或是非空值空值是实现者定义的与类型相关的特殊值该值不同于这个类型的所有非空值非空值是字符串或是数字符串与数是相互不可比较的值字符串字符串由实现者定义的字符集的字符序列组成字符串有长度它是一个正整数指出该序列中字符的个数所有的字符串都是可比较的当且仅当按照谓词中所指明的比较规则一个字符串与另一个字符串相等时它们相等数数或是精确数字值或是近似数字值所有的数都是可比较的精确数字值有精度和标度精度为正整数它确定该数字值的有效十进制数的位数标度为非负整数标
8、度为表示该数字是一个整数标度为表示这个精确数字值是有效十进制整数乘以的次方近似数字值由尾数和指数组成尾数为带符号的数字值而指数为带符号的整数指数说明尾数的数量级近似数字值有一个精度该精度是正整数它说明在尾数中有效二进制数的位数每当把一个精确数字值赋予一个表示精确数字值的数据项或参数时则按目标数据类型表示精确数值的近似值此近似值保存了高位的有效数字转换这个值使它具有目标的精度与标度每当把一个精确数字值或近似数字值赋予一个表示近似数字值的数据项或参数时则按目标数据类型表示该值的近似值把该值转换为具有目标的精度列列是一些可随时变更的值的一个多重集同一列的所有值具有同样的数据类型且都是在同一个表中的值
9、列的值是从表中可选择的数据的最小单位也是可以更新数据的最小单位列有一个描述和一个在表内的顺序位置列的描述包括它的数据类型和说明该列是否限于只包含非空值字符串列的描述还指明它的长度近似数值列的描述指明该数值的精度精确数值列的描述指明该数值的精度和标度命名列是命名表的一个列或是继承了命名列的描述的一个列命名列的描述包括它的名字表表是行的多重集行是值的非空序列同一表中的每一行都有相同的基数并包含该表每个列的一个值表的每行内的第个值是该表第列的一个值行是能够插入到表中并能从表中删除的数据的最小单位表的度是该表中列的个数无论何时表的度与每一行的基数相同而表的基数与它每列的基数相同表有一个描述该描述包括对
10、它的所有列的描述基表是一个用表定义定义的命名表基表的描述包括它的名字导出表是通过对查询说明求值从一个或多个其它表中直接或间接导出的表导出表的值是当其被导出时那些作为基础的表的值视图表是由视图定义定义的命名的导出表视图表的描述包括它的名字表或是可更新的或是只读的对于可更新的表允许做插入更新和删除等操作对于只读表不允许做上述操作分组表是子句求值期间导出的分组的集一个分组是一些行的多重集在这些行内分组列的所有值都相等分组表可看作是一些表的集合集函数可在分组表内各个表上进行操作分组视图是从分组表导出的视图表完整性约束完整性约束通过约束基表中的值定义数据库的有效状态完整性约束在执行每个语句之后受到有效的
11、检验如果与一个完整性约束相联系的基表未满足该完整性约束则该语句无效参数则置为实现者定义的一个负数唯一性约束定义要求一个表中的任意两行在指定的一列或若干列上不具有相同的值要求一个列中没有任何一个值是空值引用约束定义要求对于一个指明的引用表的每一行其中指明的某一列或某些列的值或者至少有一个空值或者和另一个指明的被引用表的某行中指明的一列或若干列的值相同引用表与被引用表可以是同一个表检验约束定义要求指定的搜索条件对一个表的任意一行都不为假值模式模式是由模式定义语言所指明的一个持久对象它由一个模式授权子句与所有表定义视图定义与特权定义组成在一个环境中系统用所指明的授权标识符识别模式的上述组成这里环境的
12、概念是实现者定义的由模式定义的表视图和特权可看成是对该模式所指明的授权标识符所拥有的或建立的注实现可以提供一些设施如与允许对给定授权标识符的表视图和特权的定义随着时间的推移而予以建立消除和修改然而本标准仅说明了能表示在给定时刻系统已知定义的那些模式数据库数据库是一个环境中由若干模式定义的所有数据的集合环境的概念是由实现者定义的模块模块是用模块语言指明的持久对象一个模块是由一个任选的模块名一个语言子句一个模块授权子句零个或多个由申明游标指明的游标以及一个或多个过程组成一个应用程序是一段可执行的代码它可能由多个子程序组成单个模块在其执行期间与一个应用程序相联系一个应用程序应至多与一个模块相联系其中
13、指明的联系方式包括执行某个实现者定义语句的可能要求是由实现者定义的过程过程由过程名参数申明序列和单个语句组成与模块相联系的应用程序可以通过调用语句来引用那个模块中的过程这个调用语句指明该过程的过程名并提供参数值的序列其参数的个数和数据类型对应于该过程的参数申明过程的调用导致该过程所包含的语句的执行参数参数是在过程中由参数申明来申明的参数申明指明参数值的数据类型参数在过程调用中接受或提供相应变元的值参数参数是一个专用的整数型参数它的值设置为一个状态码该码或指示过程的一个调用已成功地完成或指示在过程执行期间产生了一个异常条件指示符参数指示符参数是整数型参数它在另一个参数之后指明主要用来指示该参数接
14、受或提供的值是否为空值标准程序设计语言本标准指明当模块中过程由符合规定的标准程序设计语言的程序调用时这些过程的动作术语标准程序标准程序标准程序标准程序系指在第章引用标准中列出的满足这些标准的相符性准则的那些程序游标游标由申明游标指明对于模块中的每个申明游标当引用该模块的一个事务参见事务初始化时才能有效地建立一个游标并在该事务终止时取消此游标游标或处于打开状态或处于关闭状态游标的初始状态是关闭状态通过语句可将游标置于打开状态通过语句语句或语句可使游标回到关闭状态处于打开状态的游标指示一个表该表的行序和对应于该行序的一个位置如果申明游标没有包括子句或如果包括一个没有完全指明行序的子句则该表的那些行
15、有一个完全或部分由实现者定义的行序在同一个事务中当没有定义行序或用子句没有完全定义行序的情况下任意两行的相对位置在每次打开游标时一般应该一样如果在申明游标中查询说明引用的数据库的值或参数值不同则两次打开的行序可以不同在独立的一些事务中即使申明游标的查询说明引用的数据库或参数值相同用同一游标说明和语句指示的那些行序也可以不相同处于打开状态的游标位置或在某一行之前或在某一行上或在最后一行之后如果游标在某一行上则该行是该游标的当前行即使该表为空游标也可以在第一行之前或最后一行之后语句将一个打开的游标的位置推进到游标所在位置的下一行并检索出该行各个列的值语句定位更新游标的当前行语句定位删除游标的当前行
16、如果游标在某一个行之前并把一个新行插入到那个位置对这个游标位置如果有影响其影响是实现者定义的如果游标在某一行上或在某一行之前且该行被删除那么游标就被定位在紧接着被删除行之后的那个行之前如果不存在这样的行那么游标的位置就在最后一行之后如果在一个涉及打开的游标的语句的执行过程中产生了错误如果对该游标位置或状态有影响其影响是实现者定义的工作表是由于游标打开而产生的表游标打开是否会导致工作基表或者工作视图表的建立是实现者定义的对工作视图表的每一行仅当游标定位在该行时才被导出工作基表在游标打开时建立当游标关闭时撤消语句语句指明数据库操作或游标操作语句从表中取出值语句把行插入到表中语句搜索或语句定位更新表
17、中行的值语句搜索或语句定位删除表中的行嵌入语法一个嵌入的宿主程序嵌入的程序嵌入的程序嵌入的程序或嵌入的程序是由程序设计语言正文与正文组成的一个应用程序程序设计语言正文应与特定的标准程序设计语言的要求一致正文应由一个或多个嵌入的语句和可任选的一个或多个嵌入的申明节组成这就允许将数据库应用表示为一个混合形式在此形式中语句直接嵌入到应用程序中这样的混合应用程序定义为一个等价的标准应用程序在该标准应用程序中用标准过程或独立的模块中的过程的子例行程序的替换语句特权特权是通过所指明的授权标识符对指明的表或视图授权在其上执行的一个给定的动作类这些动作可以指明为和对每个模块与模块都要指明一个授权标识符对模块所
18、指明的授权标识符应与同一环境中任何其它模式的授权标识符不同模式的授权标识符是这个模块所定义的所有表和视图的拥有者表与视图用表名指定表名由授权标识符和标识符组成授权标识符标识模式在该模式中由表名指定的表或视图是已定义的在不同的模式内定义的表与视图可以有相同的标识符如果对表名的引用没有明显地包含授权标识符则其所在模式的或模块的授权标识符指明为缺省模式的授权标识符对该模式内定义的表和视图具有所有特权具有一个给定授权标识符的模式可以包含有特权定义该特权定义把特权授予其它授权标识符所授予的特权可以应用于当前模式中定义的表和视图或者它们可以是由其它模式授予给定授权标识符的特权特权定义中的子句指明一个特权的
19、接收者是否可以把此特权授予其他的授权标识符模块指明一个授权标识符即模块授权标识符它应具有该模块内每个语句所指明的特权事务事务是一个包括有数据库操作的操作序列该序列是关于恢复与并发的原子单位当一个过程被调用且当前没有事务活动事务就被初始化事务用语句或语句来终止如果事务用语句终止则该事务使数据库产生的全部改变对所有并发事务都是可访问的如果用语句终止事务则这个事务对数据库所做的全部改变都被撤消而已交付的改变不能撤消事务对数据库所产生的改变可被该事务所感知但是在这个事务用语句终止之前这些改变不能被其他事务所感知并发事务的执行应确保可串行化可串行化的执行定义为并发执行事务操作的一种执行该执行与同一组事务
20、的某个顺序执行产生相同的效果顺序执行的含义是每个事务的执行应在下一个事务开始之前完成除在语句的一般规则所陈述的效果以外在一个事务中语句的执行对数据库没有影响联系到串行化的执行意味着在一个事务中所有的读操作是可重现的以下情况除外事务本身显式地使数据库和它的内容改变所产生的影响提供给打开游标并接着通过该游标检索的过程以不同参数值的影响公用元素字符功能定义语言的终结符号与字符串元素格式字符数字字母专用字符数字字母大写字母小写字母大写字母小写字母专用字符见语法规则语法规则专用字符是实现者定义的除数字和字母的字符以外的任意字符如果实现者定义的行结束指示符是一个字符则它不列为专用字符注参见记号内新行的格式
21、专用字符应包括在语言最终产生式中出现的除数字和字母以外的所有符号另外还应包括百分比号与下划线字符一般规则无字值功能指明一个非空值格式字值字符串字值数值字值字符串字值字符表示字符表示非引号字符引号表示非引号字符见语法规则引号表示数值字值精确数值字值近似数值字值精确数值字值无符号整数无符号整数无符号整数无符号整数近似数值字值尾数指数尾数精确数值字值指数带符号整数带符号整数无符号整数无符号整数数字语法规则非引号字符是任意一个不同于单引号字符的字符字符串字值的数据类型是字符串字符串字值的长度是它所包含的字符表示的个数在字符串字值内的每个引号表示在该字符串字值的值和长度方面代表单个引号字符不带小数点的一
22、个精确数值字值有一个隐含的小数点它位于最后的数字之后精确数值字值的数据类型是精确数值精确数值字值的精度是它所包含数字的个数精确数值字值的标度是小数点右边数字的个数近似数值字值的数据类型是近似数值近似数值字值的精度是它尾数的精度一般规则字符串字值的值是它包含的字符序列精确数值字值的数值按带符号的定点十进制表示法的通常数学解释导出近似数值字值的数值是两个数的乘积一个是由尾数表示的精确数值另一个是的指数表示的幂记号功能指明词法单元格式记号非定界符记号定界符记号非定界符记号标识符关键字数值字值标识符大写字母下划线字母或数字下划线字母或数字大写字母数字关键字定界符记号字符串字值分隔符注解空格新行注解注解
23、引入符字符新行注解引入符见语法规则新行实现者定义的行结束指示符空格空格字符语法规则记号与字符串字值不同它不应包含空格任何记号后面可跟一个分隔符一个非定界符记号的后面应跟一个定界符记号或分隔符如果语法不允许一个非定界符记号的后面跟一个定界符记号那么该非定界符记号的后面应跟一个分隔符构成一个标识符的字符个数不应多于标识符不能与关键字相同注解引入符是不用空格或新行分开的两个或多个连续的连字符序列且该序列不包含在字符串字值内一般规则无名功能指明名字格式表名授权标识符表标识符授权标识符标识符表标识符标识符列名标识符相关名标识符模块名标识符游标名标识符过程名标识符参数名标识符语法规则表名标识命名表如果表名
24、不包含授权标识符则有两种情况如果表名包含在模式中则其授权标识符隐含为该模式的模式授权标识符如果表名包含在模块中则其授权标识符隐含为该模块的模块授权标识符当且仅当两个表名有相同的表标识符和相同的授权标识符时不论授权标识符是显式或隐式则这两个表名是等同的表名在表定义或视图定义内申明语句内的表名应标识模式中定义的表授权标识符表示授权标识符作为相关名申明的标识符与特定作用域的表相联系相关名的作用域或是语句或是子查询或是查询说明见子句作用域可以是嵌套的在不同的作用域内同样的相关名可以与不同的表或相同的表相联系列名标识命名列由表定义或视图定义将标识符定义为列名模块名标识模块游标名标识游标过程名标识过程参数
25、名标识参数一般规则无数据类型功能指明数据类型格式数据类型字符串类型精确数值类型近似数值类型字符串类型长度长度精确数值类型精度标度精度标度精度标度近似数值类型精度长度无符号整数精度无符号整数标度无符号整数语法规则是的同义词是的同义词是的同义词作为长度或精度的无符号整数的值应大于如果长度省略则假设它为如果标度省略则假设它为如果精度省略则它是实现者定义的精确数值类型的标度不应大于它的精度指明字符串数据类型其长度由长度指明指明精确数值数据类型其精度与标度分别由精度与标度指明指明精确数值数据类型其标度由标度指明且具有由实现者定义的等于或大于所指明的精度值的精度指明精确数值数据类型其精度由实现者定义其标度
26、为指明精确数值数据类型其标度为其精度由实现者定义但它不大于由实现者定义的的精度指明近似数值数据类型其二进制精度大于或等于由精度指明的值指明近似数值数据类型其精度由实现者定义指明近似数值数据类型其精度由实现者定义且应大于实现者定义的的精度一般规则无值说明与目标说明功能指明一个或多个值参数或变量格式值说明参数说明变量说明字值目标说明参数说明变量说明参数说明参数名指示符参数指示符参数参数名变量说明嵌入的变量名指示符变量指示符变量嵌入的变量名语法规则值说明指明不从表中选取的值一个参数说明标识参数或参数和指示符参数指示符参数的数据类型应是标度为的精确数值指示符参数的特定精确数值类型由实现者定义一个变量说
27、明标识宿主变量或宿主变量和指示符变量指示符变量的数据类型应是实现者定义的为指示符参数指明的数据类型目标说明指明参数或变量它们是可以赋值的参数说明应包含在模块内变量说明应包含在嵌入的语句内的数据类型是由实现者定义长度的一个字符串一般规则如果参数说明包含指示符参数且指示符参数的值为负则参数说明所指明的值为空否则由参数说明所指明的值就是由参数名标识的参数的值如果变量说明包含指示符变量且指示符变量的值为负则变量说明所指明的值为空否则由变量说明所指明的值就是由嵌入的变量名标识的变量的值由字值所指明的值就是该字值所表示的值由所指明的值等于按照模块的模块授权标识符所指明的授权标识符该模块包含有语句该语句的执
28、行导致值说明的求值列说明功能引用一个命名列格式列说明限定符列名限定符表名相关名语法规则列说明引用命名列引用列的含义依赖于上下文令为列说明的列名情况如果列说明包含限定符则该列说明应出现在一个或多个等于该限定符的表名或相关名的作用域内如果有一个以上这样的表名或相关名则所指的是那个具有最小局部作用域的表名或相关名与所指明的表名或相关名相关联的表应包含一个其列名为的列如果列说明不包含限定符则它应包含在一个或多个表名或相关名的作用域内对此令短语可能的限定符表示这样一些表名与相关名与其相联系的表包含一个其列名为的列这里恰有一个具有最小局部作用域的可能的限定符且表名或相关名是隐含的注表名或相关名的作用域在子
29、句表定义语句搜索语句定位语句搜索等处指明如果列说明包含在表表达式内并且显式或隐式指明的列说明的限定符的作用域是某一个包含该表表达式的语句或表表达式则该列说明就是一个与显式或隐式指明的限定符相联系的表的外部引用令表示一个与显式或隐式指明的限定符相联系的表则列说明的数据类型是的列的数据类型一般规则或引用的一个给定行内的列集函数说明功能指明把函数应用于自变量所导出的值格式集函数说明相异集函数完全集函数相异集函数列说明完全集函数值表达式语法规则的自变量和相异集函数与完全集函数的自变量源都是一个表或是分组表的一个组表与分组表分别在表表达式子查询与查询说明中指明令表示集函数说明的自变量或自变量源相异集函数
30、的列说明和完全集函数的值表达式内的每个列说明应无歧义地引用的一个列而不应引用从集函数说明导出的一个列完全集函数的值表达式应包含引用的一个列的列说明且不应包含集函数说明如果列说明是一个外部引用则该值表达式不应包含任何运算符注外部引用在列说明中定义如果集函数说明包含一个作为外部引用的列说明则这个集函数说明应包含在子句的子查询内注外部引用在列说明中定义令是对列说明或值表达式求值得到的值的数据类型如果指明则集函数说明的结果的数据类型是精确数值其精度由实现者定义其标度为如果指明或则结果的数据类型为如果指明或则不应是字符串如果指明且是具有标度的精确数值则其结果的数据类型是精确数值其精度由实现者定义标度为如
31、果指明且是精确数值则结果的数据类型为精确数值其精度与标度由实现者定义如果是近似数值则结果的数据类型是近似数值其精度由实现者定义一般规则相异集函数的自变量是值集该集是由列说明引用的的列中消去任何空值与冗余的重复值以后得到的集完全集函数的自变量是值的一个多重集该多重集是将值表达式用于的每一行而得到的结果再从中消去所有的空值而得到的集的说明或省略并不影响完全集函数的含义令表示相异集函数或完全集函数的自变量情况如果指明相异集函数则结果是的基数如果指明则结果是的基数如果指明或且为空则结果为空值如果指明或则结果分别为内的极大值或极小值通过使用谓词内指明的比较规则来确定结果如果指明则结果是内值的和该和应在该
32、结果的数据类型的值域内如果指明则结果是内值的平均数内值的和应在该结果的数据类型的值域内值表达式功能指明一个值格式值表达式项值表达式项值表达式项项因子项因子项因子因子初等量初等量值说明列说明集函数说明值表达式语法规则包含相异集函数的值表达式不应包含任何二元运算符跟在一元运算符后面的记号的第一个字符不应是加号或减号如果初等量的数据类型是字符串则值表达式不应包含任何运算符其结果的数据类型是字符串如果运算符的两个操作数的数据类型都是精确数值则其结果的数据类型是精确数值其精度与标度确定如下令与分别为第一与第二操作数的标度加法和减法结果的精度由实现者定义且标度为乘法结果的精度由实现者定义且标度为除法结果的
33、精度与标度由实现者定义如果运算符两个操作数的任意一个数据类型是近似数值则结果的数据类型是近似数值结果的精度由实现者定义一般规则如果任意一个初等量的值是空值则值表达式的结果是一个空值如果未指明运算符则值表达式的结果就是所指明的初等量的值当值表达式运用于表的行时对该表中列的每个引用就是对该行内那个列值的引用一元算术运算符和分别指明一元加与一元减一元加不改变它的操作数一元减将它的操作数反号二元算术运算符和分别表示加减乘和除除数不应为如果一个算术运算符的结果的类型是精确数值则有以下情况如果运算符不是除号则该运算的数学结果应能用结果类型的精度与标度精确地表示出来如果运算符是除号则用结果类型的精度与标度表
34、示的该运算的近似数学结果不应丢失任何高位有效数字在括号内的表达式首先求值当求值的顺序没有用括号指明时一元运算符在乘和除之前使用乘和除在加和减之前使用同一优先级的运算符是从左到右地应用谓词功能指明一个能求出真假或未知值的条件格式谓词谓词谓词谓词谓词谓词谓词谓词语法规则无一般规则谓词的结果是通过把该谓词应用于一个表的给定行而导出的谓词功能指明两个值的比较格式谓词值表达式值表达式子查询语法规则第一个值表达式的数据类型与子查询或第二个值表达式的数据类型都应是可比较的一般规则令表示第一个值表达式的结果令表示子查询或第二个值表达式的结果子查询结果的基数不应大于如果或为空或如果子查询的结果为空则为未知如果和
35、是非空值则或为真或为假当且仅当与相等则为真当且仅当与不相等则为真当且仅当小于则为真当且仅当大于则为真当且仅当不大于则为真当且仅当不小于则为真数值根据它们的代数值进行比较两个字符串的比较是通过对相同位序的字符进行比较来确定的如果这两个串长度不同则该比较用短字符串的工作副本来做它将短字符串有效地向右扩充若干个空格使得它与另一个字符串有同样的长度如果具有相同位序的所有字符都相等则这两个字符串相等如果两个字符串不相等则它们的关系由这些字符串从左端算起出现的第一对不相等字符的比较操作来确定该比较操作是根据实现者定义的排列顺序来做的如果与均为空值虽然未知在和的上下文中一个空值等同于另一个空值或者就是另一个
36、空值的复制品谓词功能指明范围的比较格式谓词值表达式值表达式值表达式语法规则上述三个值表达式的数据类型应是可比较的一般规则令和分别表示第一第二和第三个值表达式的结果与有相同的结果与有相同的结果谓词功能指明一种用量词限定的比较格式谓词值表达式子查询值清单值清单值说明值说明语法规则第一个值表达式和子查询或值清单内的所有值说明的数据类型应是可比较的一般规则令表示值表达式的结果并令表示在谓词中的子查询的结果或者是把值清单看作度数为的单列表的各行所指明的值和有相同的结果与有相同的结果谓词功能指明模样匹配比较格式谓词列说明模样转义字符模样值说明转义字符值说明语法规则列说明应当引用一个字符串型的列模样的数据类
37、型应是字符串转义字符的数据类型应是长度为的字符串一般规则令表示由列说明引用的值并令表示该模样的值说明的结果情况如果指明一个转义字符则令表示该转义字符的值说明的结果应当有一种把串划分为若干子串的分法使得每个子串的长度为或长度为的子串都不是转义字符而长度为的每个子串都有一个转义字符其后跟以或转义字符或下划线字符或百分比号字符在的这种划分中长度为的每个子串表示该子串第二个字符的一次出现所有长度为的下划线字符子串表示任意字符的说明符所有长度为的百分比号字符子串表示一个任意串的说明符既不是下划线字符也不是百分比号字符的所有长度为的子串表示它所包含的字符如果未指明一个转义字符则内的每一个下划线字符表示任意
38、字符的说明符内的每个百分比号字符表示任意串说明符既不是下划线也不是百分比号的内的字符表示字符本身串是个数最少的子串说明符的一个序列并使得的每个字符正好是一个子串说明符的一部分子串说明符可以是任意字符的说明符任意串的说明符或不同于任意字符的说明符或任意串的说明符的字符的任意序列如果或为空值则未知如果与为非空值则或为真或为假如果存在将分为子串的划分并使得的子串是的零个或多个连续的字符组成的序列且的每个字符正好是一个子串的一部分如果的第个子串说明符是任意字符的说明符则的第个子串是任意单个字符如果的第个子串说明符是任意串的说明符则的第个子串是零个或多个字符的任意序列如果的第个子串说明符既不是任意字符的
39、说明符也不是任意串的说明符则的第个子串等于该子串说明符并具有与该子串说明符相同的长度子串的个数等于的子串说明符的个数则为真与有相同的结果谓词功能指明对空值的测试格式谓词列说明语法规则无一般规则令表示由列说明引用的值或为真或为假当且仅当是空值时为真与有相同的结果谓词功能指明一种用量词限定的比较格式谓词值表达式量词子查询量词语法规则值表达式与子查询的数据类型应是可比较的一般规则令表示值表达式的结果并令表示子查询的结果量词的结果是由对的每个值与应用隐含的谓词导出的情况如果为空或如果对于的每个值隐含的谓词为真则为真如果至少有一个值使隐含的谓词为假则为假如果至少有一个值使隐含的谓词为真则为真如果为空或如
40、果对于的每个值隐含的谓词为假则为假如果量词既不为真也不为假则它为未知谓词功能指明对空集的测试格式谓词子查询语法规则无一般规则令表示子查询的结果或为真或为假当且仅当非空时为真搜索条件功能指明一个取值为真假或未知的条件其值依赖于布尔运算符应用于指明的条件所得到的结果格式搜索条件布尔项搜索条件布尔项布尔项布尔因子布尔项布尔因子布尔因子布尔初等量布尔初等量谓词搜索条件语法规则如果在搜索条件中指明的列说明或值表达式没有在这个搜索条件的一个集函数说明或子查询中指明则称列说明或值表达式直接包含在这个搜索条件中一般规则通过把指明的布尔运算符应用于一些条件而导出结果而这些条件是由把每个指明的谓词应用于表的一个给
41、定行或分组表的一个给定组引出的如果没有指明布尔运算符则这个搜索条件的结果就是指明的谓词的结果真为假假为真未知为未知与由以下真值表定义见表表表真假未知真真假假假假假未知未知假未知表真假未知真真真真假真假未知未知真未知未知在括号内的表达式首先求值当求值顺序没有通过括号指明时应用优先于应用优先于具有相同优先级的运算符自左到右应用当一个搜索条件应用于表的一个行时通过一个直接包含在搜索条件中的列说明对该表的一列的每次引用就是对该行内该列值的引用表表达式功能指明表或分组表格式表表达式子句子句子句子句语法规则如果在子句中标识的表是一个分组视图则这个表表达式不应包含子句子句或子句一般规则如果所有的任选子句都省
42、略则表就是子句的结果反之把每个指明的子句应用于前一个指明的子句的结果上并且该表是应用最后指明的子句的结果表表达式的结果是一个导出表在该表内的第列继承了由子句指明的表的第列的描述子句功能指明从一个或多个命名表中导出的表格式子句表引用表引用表引用表名相关名语法规则当且仅当一个表引用未指明相关名时在表引用中指明的表名在其所在的子句中显现在子句中显现的表名应不同于在该子句中显现的任何其它表名在表引用中指明的相关名应不同于其所在的子句中指明的任何其它相关名而且它也应当不同于在其所在的子句中显现的任何一个表名的表标识符在子句中指明的显现的表名和相关名的作用域是包含该子句所在的表表达式的最内层子查询查询说明
43、或语句当且仅当表名在子句中显现在该子句所指明的表名才具有由子句定义的作用域如果由表名标识的表是分组视图则子句应恰好包含一个表引用情况如果子句仅包含一个表名则子句结果的描述与该表名标识的表的描述相同如果子句包含的表名多于一个则子句结果的描述就由这些表名标识的表的描述拼接而成其顺序就是这些表名在子句中出现的顺序一般规则在表引用中的相关名或显现的表名的说明将相关名或表名定义为该表引用的表名所标识的表的指定符情况如果子句仅包含一个表名则子句的结果就是由该表名标识的表如果子句包含的表名多于一个则该子句的结果就是由这些表名所标识的表的广义笛卡儿积这个广义笛卡儿积是所有这些行的多重集其中行是从每个被标识的表
44、中取出一行予以拼接而成拼接的顺序就是这些表被标识的顺序的基数是被标识的表的基数之积在中一个列的顺序位置是这里是在导出该列的那个命名表中这个列的顺序位置而是在子句中之前标识的所有表的度数之和子句功能指明将一个搜索条件应用于其前的子句的结果而导出的表格式子句搜索条件语法规则令表示其前的子句的结果描述直接包含在搜索条件中的每个列说明应无歧义地引用的一个列或是一个外部引用注外部引用在列说明中定义直接包含在搜索条件中的值表达式不应包含对从一个函数导出的列的引用如果直接包含在搜索条件中的值表达式是集函数说明则这个子句应包含在子句中并且这个集函数说明中的列说明应是一个外部引用注外部引用在列说明中定义一般规则
45、令表示子句的结果搜索条件应用于的每个行子句的结果是中对搜索条件的结果为真的那些行构成的表搜索条件中的每个子查询对于的每个行有效地执行其结果用于搜索条件对的应用如果任何执行的子查询包含对的列的外部引用则该引用是对在的给定行中那个列的值引用注外部引用在列说明中定义子句功能指明一个把子句应用于其前指明的子句的结果而导出的分组表格式子句列说明列说明语法规则令表示其前的子句或子句的结果描述子句中的每个列说明应无歧义地引用的一个列在子句中所引用的列是一个分组列一般规则令表示其前的子句或子句的结果子句的结果是把划分成一个分组的集使得对于所有多于一行的分组的每个分组列其所有的值都相同且该集分组数最少给定分组的
46、每行都包含一个给定分组列的相同值当搜索条件或值表达式应用于一个分组时对分组列的引用就是对那个列值的引用子句功能通过取消不符合搜索条件的分组指明对分组表的一种限制这个分组表是从其前的子句或子句导出的格式子句搜索条件语法规则令表示其前的子句子句或子句结果的描述直接包含在搜索条件中的每个列说明应无歧义地引用的一个分组列或是一个外部引用注外部引用在列说明中定义在引用的一个列的搜索条件中子查询所包含的每个列说明应引用的一个分组列或应在集函数说明中指明一般规则令表示其前的子句子句或子句的结果如果其前的子句不是子句则就由单独一个组构成并且没有分组列搜索条件应用于的每个分组子句的结果是其搜索条件的结果为真的的
47、那些分组构成的一个分组表当把搜索条件应用于的一个给定分组时该分组是直接包含在搜索条件中的每个集函数说明的自变量或自变量源除非集函数说明中的列说明是一个外部引用对的每个组有效地执行搜索条件中的每个子查询并将其结果用于搜索条件对的该给定组的应用如果任一被执行的子查询包含一个对的列的外部引用则该引用是对的给定分组内那个列的值的引用子查询功能指明从表表达式的结果中导出的值的多重集格式子查询结果说明表表达式结果说明值表达式语法规则包含在表表达式中对每个表名可应用的特权应包括注对表名可应用的特权在特权定义中定义情况如果在除谓词外的谓词的子查询中指明了结果说明为则表表达式的度应为并且结果说明等同于由列说明组
48、成的一个值表达式这个列说明引用表表达式的唯一列如果在谓词的子查询中指明结果说明为则这个结果说明等同于任意的值表达式这个值表达式不包含集函数说明且可以出现在这个子查询中子查询值的数据类型是隐式或显式的值表达式的数据类型令表示表表达式的结果在值表达式中的每个列说明应无歧义地引用的一个列如果是分组视图则结果说明不应包含集函数说明如果是分组表则值表达式中的每个列说明应当或引用分组列或在集函数说明中指明如果不是一个分组表并且值表达式包含集函数说明则在值表达式中的每个列说明应在集函数说明中被指明关键字在子查询中指明不应多于次该子查询包含的任意子查询除外如果子查询在谓词中指明则表表达式不应包含子句或子句并且
49、也不应标识分组视图一般规则如果不是分组表并且值表达式包含集函数说明则是值表达式中每个集函数说明的自变量或自变量源并且子查询的结果是由值表达式指定的值如果不是分组表并且值表达式不包含集函数说明则值表达式应用于产生个值的一个多重集的每个行这里是的基数如果没有指明则该多重集是子查询的结果如果指明则子查询的结果是通过消去任何冗余的重复值而从多重集中导出的值集如果是分组表则值表达式应用于的每个分组并产生个值的一个多重集这里是内组的个数当值表达式运用于的一个给定组那个分组就是值表达式中每个集函数说明的自变量或自变量源如果没有指明则该多重集就是子查询的结果如果指明则子查询的结果是通过消去任何冗余的重复值而从多重集导出的值集查询说明功能指明一个从表表达式的结果中导出的表格式查询说明选择清单表表达式选择清单值表达式值表达式语法规则在表表达式中的每个表名可适用的特权应包括注对表名的可适用的特权在特权定义中定义令表示表表达式的结果由查询说明指明的表的度等于选择清单的基数选择清单为等同于一个值表达式序列在该序列中每个值表达式是一个列说明它引用的一个列并且的每一个列恰好被