首页 / 专利库 / 电脑编程 / 别名 / SQL语句的执行方法、装置、设备和存储介质

SQL语句的执行方法、装置、设备和存储介质

阅读:648发布:2020-05-11

专利汇可以提供SQL语句的执行方法、装置、设备和存储介质专利检索,专利查询,专利分析的服务。并且本 发明 实施例 公开了一种SQL语句的执行方法、装置、设备和存储介质。所述方法包括:获取SQL语句的原始关系树;依次判断所述原始关系树中的各原始 节点 是否为目标过滤节点,并在判定所述原始节点为目标过滤节点时,删除与所述原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名,以得到新的关系树;根据所述新的关系树执行所述SQL语句。本发明实施例通过采用上述技术方案,能够减少SQL语句进行分组计算的次数,提高 数据库 的查询效率。,下面是SQL语句的执行方法、装置、设备和存储介质专利的具体信息内容。

1.一种SQL语句的执行方法,其特征在于,包括:
获取SQL语句的原始关系树;
依次判断所述原始关系树中的各原始节点是否为目标过滤节点,并在判定所述原始节点为目标过滤节点时,删除与所述原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名,以得到新的关系树;
根据所述新的关系树执行所述SQL语句;
其中,所述目标过滤节点的过滤条件中包含常量子表达式且不包含或运算和非运算;
与所述原始节点对应的第一目标节点包括所述原始节点的祖先节点中的分组节点,所述第一目标运算条件包含至少列名,所述至少两个列名中存在目标列名,所述目标列名为所述常量子表达式中的常量列列名或所述常量列列名的别名
2.根据权利要求1所述的方法,其特征在于,所述删除与所述目标过滤节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列列名,包括:
针对与所述原始节点对应的每一个第一目标节点,如果所述第一目标节点的第一目标运算条件中仅包含目标列名,则选取一个目标列名作为预留列名,并删除所述第一目标运算条件中的非预留列名;如果所述第一目标节点的第一目标运算条件中包含非目标列名,则删除所述第一目标运算条件中的所有目标列名。
3.根据权利要求1所述的方法,其特征在于,在所述删除与所述原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名之前,还包括:
确定所述原始节点与所述第一目标节点之间不存在全外连接节点,且所述原始节点不为左外连接节点或半连接节点的右孩子。
4.根据权利要求1所述的方法,其特征在于,在判定所述原始节点为目标过滤节点时,所述方法还包括:
将与所述原始节点对应的第二目标节点的第二目标运算条件内包含的目标列名替换为所述常量子表达式中的常量,其中,与所述原始节点对应的第二目标节点包括所述原始节点,以及所述原始节点的祖先节点中的结果集投影节点、过滤节点、内连接节点、左外连接节点和半连接节点中的至少一项;所述第二目标运算条件中包含所述目标列名。
5.根据权利要求1-4任一所述的方法,其特征在于,依次判断所述原始关系树中的各原始节点是否为目标过滤节点,并在判定所述原始节点为目标过滤节点时,删除与所述原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名,包括:
初始化祖先链表,并选取所述原始关系树的根节点作为当前原始节点;
将所述当前原始节点添加至祖先链表的末尾;
判断所述当前原始节点是否为目标过滤节点;
如果所述当前原始节点为目标过滤节点,则删除与所述当前原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名,按照先序遍历的顺序选取下一原始节点,将所述下一原始节点确定为当前原始节点,并返回执行将所述当前原始节点添加至祖先链表的末尾的操作,直至不存在下一原始节点为止;
所述方法还包括:
如果所述当前原始节点不为目标过滤节点,则按照先序遍历的顺序选取下一原始节点,将所述下一原始节点确定为当前原始节点,并返回执行将所述当前原始节点添加至祖先链表的末尾的操作,直至不存在下一原始节点为止。
6.根据权利要求5所述的方法,其特征在于,在所述将所述下一原始节点确定为当前原始节点之前,还包括:
如果所述当前原始节点不为所述下一原始节点的父节点,则确定所述当前原始节点与所述下一原始节点的最近公共祖先节点,并删除所述祖先链表中存储的所述当前原始节点以及位于所述当前原始节点和所述最近公共祖先节点之间的其他原始节点。
7.根据权利要求6所述的方法,其特征在于,在所述删除与所述当前原始节点对应的第一目标节点的运算条件中包含的至少一个目标列名之前,还包括:
将所述祖先链表内存储的运算条件包含所述目标列名的分组节点、排序节点和去重节点确定为与所述当前原始节点对应的第一目标节点。
8.一种SQL语句的执行装置,其特征在于,包括:
获取模,用于获取SQL语句的原始关系树;
删除模块,用于依次判断所述原始关系树中的各原始节点是否为目标过滤节点,并在判定所述原始节点为目标过滤节点时,删除与所述原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名,以得到新的关系树;
执行模块,用于根据所述新的关系树执行所述SQL语句;
其中,所述目标过滤节点的过滤条件中包含常量子表达式且不包含或运算和非运算;
与所述原始节点对应的第一目标节点包括所述原始节点的祖先节点中的分组节点,所述第一目标运算条件包含至少列名,所述至少两个列名中存在目标列名,所述目标列名为所述常量子表达式中的常量列列名或所述常量列列名的别名。
9.一种计算机设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的SQL语句的执行方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行实现如权利要求1-7中任一所述的SQL语句的执行方法。

说明书全文

SQL语句的执行方法、装置、设备和存储介质

技术领域

[0001] 本发明涉及数据库技术领域,尤其涉及一种SQL语句的执行方法、装置、设备和存储介质。

背景技术

[0002] 结构化查询语言(Structured Query Language,SQL)是最重要的也是最常用的关系型数据库操作语言。
[0003] 分组子句(GROUP BY子句)是SQL标准中用于对数据进行分组处理的子句。当前通用的数据库技术中,在实现一个包含GROUP BY子句的SQL查询语句时,无论SQL查询语句所对应的表结构和数据特征是怎样的,都需要读取表中的数据并将其按照GROUP BY子句指定的分组项来进行分组。
[0004] 但是,当数据库实际面对较复杂的SQL查询语句时,采用当前通用的分组方式进行分组往往需要花费较多的时间,使得数据库的查询效率较低。

发明内容

[0005] 有鉴于此,本发明实施例提供一种SQL语句的执行方法、装置、设备和存储介质,以减少执行SQL查询语句所花费的时间,提升数据库的查询效率。
[0006] 第一方面,本发明实施例提供了一种SQL语句的执行方法,包括:
[0007] 获取SQL语句的原始关系树;
[0008] 依次判断所述原始关系树中的各原始节点是否为目标过滤节点,并在判定所述原始节点为目标过滤节点时,删除与所述原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名,以得到新的关系树;
[0009] 根据所述新的关系树执行所述SQL语句;
[0010] 其中,所述目标过滤节点的过滤条件中包含常量子表达式且不包含或运算和非运算;与所述原始节点对应的第一目标节点包括所述原始节点的祖先节点中的分组节点,所述第一目标运算条件包含至少列名,所述至少两个列名中存在目标列名,所述目标列名为所述常量子表达式中的常量列列名或所述常量列列名的别名
[0011] 第二方面,本发明实施例提供了一种SQL语句的执行装置,包括:
[0012] 获取模,用于获取SQL语句的原始关系树;
[0013] 删除模块,用于依次判断所述原始关系树中的各原始节点是否为目标过滤节点,并在判定所述原始节点为目标过滤节点时,删除与所述原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名,以得到新的关系树;
[0014] 执行模块,用于根据所述新的关系树执行所述SQL语句;
[0015] 其中,所述目标过滤节点的过滤条件中包含常量子表达式且不包含或运算和非运算;与所述原始节点对应的第一目标节点包括所述原始节点的祖先节点中的分组节点,所述第一目标运算条件包含至少列名,所述至少两个列名中存在目标列名,所述目标列名为所述常量子表达式中的常量列列名或所述常量列列名的别名。
[0016] 第三方面,本发明实施例提供了一种计算机设备,包括:
[0017] 一个或多个处理器;
[0018] 存储器,用于存储一个或多个程序,
[0019] 当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明实施例所述的SQL语句的执行方法。
[0020] 第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行实现如本发明实施例所述的SQL语句的执行方法。
[0021] 在上述执行SQL语句的技术方案中,获取SQL语句的原始关系树;依次判断该原始关系树中的各原始节点是否为过滤条件中包含常量子表达式且不包含或运算和非运算的目标过滤节点,并在判定某一原始节点为目标过滤节点时,将该原始节点的祖先节点中包含至少两个列名且至少一个列名为目标列名的分组节点确定为第一目标节点,并删除该第一目标节点中的至少一个目标列名,以生成新的关系树,进而根据该新的关系树执行该SQL语句。本发明实施例通过采用上述技术方案,删除分组节点中的常量分组项,能够减少SQL语句进行分组计算的次数,提高数据库的查询效率。附图说明
[0022] 通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
[0023] 图1为本发明实施例一提供的一种SQL语句的执行方法的流程示意图;
[0024] 图2为本发明实施例一提供的一棵原始关系树的结构示意图;
[0025] 图3为本发明实施例一提供的一棵新的关系树的结构示意图;
[0026] 图4为本发明实施例二提供的一种SQL语句的执行方法的流程示意图;
[0027] 图5为本发明实施例二提供的一棵原始关系树的结构示意图;
[0028] 图6为本发明实施例二提供的一棵新的关系树的结构示意图;
[0029] 图7为本发明实施例三提供的一种SQL语句的执行装置的结构框图
[0030] 图8为本发明实施例四提供的一种计算机设备的结构示意图。

具体实施方式

[0031] 下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合
[0032] 实施例一
[0033] 本发明实施例一提供一种SQL语句的执行方法。所述方法可以由SQL语句的执行装置执行,其中,该装置可以由软件和/或硬件实现,一般可集成于计算机设备中,适用于对SQL语句进行常量替换的场景。图1为本发明实施例一提供的一种SQL语句的执行方法的流程示意图,如图1所示,所述方法包括:
[0034] S101、获取SQL语句的原始关系树。
[0035] 在本实施例中,在生成SQL语句后,将该SQL语句转换为关系树,即可得到该SQL语句的原始关系树)。其中,SQL语句可以为数据库接收到的任意类型的语句,相应的,本实施例可以在接收到用户输入的任意类型SQL语句时,无论其是否包含where过滤子句,均将其转换为关系树并对其执行后续判断原始关系树中的各原始节点是否为目标过滤节点的操作。考虑到当SQL语句不包含where过滤子句时,其关系树中的各原始节点必然不为目标过滤节点,因此,本实施例中的SQL语句优选为包含where过滤子句的SQL查询语句,以避免后续对SQL语句原始关系树中的各原始节点进行不必要的判断。以下以SQL语句为包含where过滤子句的SQL查询语句为例进行说明。
[0036] 示例性的,数据库在获取到SQL语句之后,可以对其进行语法语义分析,判断该SQL语句中是否包含where过滤子句,若是,则确定该SQL语句为SQL查询语句,并对其执行后续操作;否则,则直接基于该SQL语句的原始关系树生成原始执行计划,并根据该原始执行计划执行该SQL语句。也可以在生成SQL语句的原始关系树的过程中,每在原始关系树上添加一个原始节点,即执行判断该原始节点是否为过滤节点的操作,并在判定某一原始节点为过滤节点时,确定该SQL语句为包含where过滤子句的SQL查询语句,并不再对后续添加的原始节点执行上述判断操作,若直至原始关系树生成结束仍未出现过滤节点,则直接基于所生成原始关系树生成原始执行计划,并根据该原始执行计划执行该SQL语句。
[0037] S102、依次判断所述原始关系树中的各原始节点是否为目标过滤节点,并在判定所述原始节点为目标过滤节点时,删除与所述原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名,以得到新的关系树。
[0038] 其中,所述目标过滤节点的过滤条件中包含常量子表达式且不包含或运算和非运算;与所述原始节点对应的第一目标节点包括所述原始节点的祖先节点中的分组节点,所述第一目标运算条件包含至少两个列名,所述至少两个列名中存在目标列名,所述目标列名为所述常量子表达式中的常量列列名或所述常量列列名的别名。
[0039] 在本步骤中,过滤节点为关系树中的一种包含where过滤条件的节点,目标过滤节点为过滤条件中包含常量子表达式且不包含或运算和非运算的过滤节点;与某一原始节点对应的第一目标节点包括该原始节点的祖先节点中的分组节点,第一目标运算条件包含至少两个列名,且该至少两个列名中存在表达式为该原始节点包含的常量子表达式的目标列名;数据库的关系树中节点的节点类型可以包括但不限于基表节点(REL_TABLE)、过滤节点(REL_SELECT)、结果集投影节点(REL_PROJECT)、排序节点(REL_ORDER)、内连接节点、左外连接节点(REL_LEFT)、右外连接节点、全外连接节点、半连接节点、集合运算节点(REL_UNIONALL)、分组节点(REL_GROUP)、取指定N行节点(REL_TOPN,即select top n操作)、层次查询节点、去重节点(REL_DISTINCT)、取前N行节点(REL_ROWNUM)和分析函数节点(REL_AFUN)等等。
[0040] 在本实施例中,对于一条包含where过滤条件的SQL查询语句而言,当过滤条件中的某一分组项为常量时,即当其过滤条件中包含常量子表达式时,过滤得到的该分组项对应的列(即常量列)的值均为该常量,此种情况下,即使按照常量列对过滤得到的数据进行分组也仅相当于将全部数据划分在同一组中,与去除该分组项后等价。例如,假设表T1定义为:CREATE TABLE T1(C1 INT,C2 INT);原始SQL查询语句为:select c1,c2 from t1 where c2=1group by c1,c2;由于过滤结果中c2列的值为常量1,此时按照c1和c2对过滤结果进行分类得到的分类结果与仅按照c1对过滤结果进行分类得到的过滤结果相同,即上述原始SQL查询语句实际等价于:select c1,1from t1 where c2=1group by c1。因此,本实施例可以在过滤节点的过滤条件中包含常量子表达式时,将对其过滤结果进行分组的分组项中表达式与该常量子表达式相同的目标分组项删除,以达到提升查询效率的目的。
[0041] 其中,常量子表达式可以理解为目标过滤节点中的常量过滤项的表达式,其为等式,且等号的一侧为常量列列名,另一侧为一常量。由于当包含或运算或非运算时,过滤结果中的相应列不一定仅存在一个取值,因此,在本实施例中,目标过滤节点为表达式包含常量子表达式且不包含或运算和非运算的过滤节点,即目标过滤节点的过滤条件由一个或多个过滤项组成,当目标过滤节点由一个过滤项组成时,该过滤项的表达式应为常量子表达式;当目标过滤节点的过滤条件由多个过滤项组成时,该多个过滤项中应包含至少一个表达式为常量子表达式的过滤项,且其各表达式之间通过表征与运算的相关字符(如and)连接。
[0042] 为了确保基于所得到的新的关系树可以正确执行所述SQL语句,需要使删除目标列名后的第一目标节点的运算条件内仍至少存在一个列名(即确保运算条件中包含至少一个运算项),因此,本实施例需要进一步将第一目标运算节点的运算条件中包含的列名的个数限定为大于或等于2,此时,当某一节点中只包含一个列名时,即使该列名为目标过滤节点中的常量子表达中的常量列列名或常量列列名的别名,也仍然不对其执行删除目标列名的操作。其中,某一原始节点的祖先节点包括该原始节点的父节点;第一目标节点的运算条件中包含至少一个目标列名,其节点类型包括但不限于分组节点,如其还可以包括排序节点和/或去重节点。
[0043] 示例性的,本步骤的执行过程可以为:按照一定的排序规则(如先序遍历、中序遍历、后序遍历或随机排序等)对原始关系树中的各节点进行排序,并选取排序结果中的第一个节点作为当前原始节点;判断当前原始节点是否为过滤节点,若为过滤节点,则继续判断当前原始节点是否包含常量子表达式,若包含常量子表达式,则进一步判断当前原始节点中是否包含或运算或非运算,若不包含,则将当前原始节点确定为目标过滤节点,并删除与当前原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名;若当前原始节点包含或运算和/或非运算、当前原始节点不包含常量子表达式或当前原始节点不为过滤节点,则按照上述排序结果选取与当前原始节点相邻的下一节点作为当前原始节点,并返回执行上述判断当前原始节点是否为过滤节点的操作,以此类推,直至各节点均判断完成为止,由此,即可完成对原始关系树中与各被确定为目标过滤节点的原始节点对应的第一目标节点的第一目标运算条件中包含的目标列名的删除。
[0044] 在本步骤中,删除与某一原始节点对应的第一目标节点的第一目标运算条件中包含的目标列名时,若原始节点的过滤条件中仅包含一个常量子表达式,或者,原始节点的过滤条件中包含多个常量子表达式且第一目标节点的第一目标运算条件中仅包含一个目标列名时,可以仅删除该第一目标运算条件中的一个目标列名;若原始节点的过滤条件中包含多个常量子表达式且第一目标节点的第一目标运算条件中包含多个目标列名时,可以删除该第一目标运算条件中的一个或多个目标列名,本实施例不对此进行限制。
[0045] 为了进一步提高数据库的查询效率,优选的,本实施例可以在确保删除目标列名后第一目标运算条件内仍剩余至少一个列名的前提下,尽量多地删除第一目标节点的第一目标运算条件中的目标列名。此时,所述删除与所述目标过滤节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名可优化包括:针对与所述原始节点对应的每一个第一目标节点,如果所述第一目标节点的第一目标运算条件中仅包含目标列名,则选取一个目标列名作为预留列名,并删除所述第一目标运算条件中的非预留列名;如果所述第一目标节点的第一目标运算条件中包含非目标列名,则删除所述第一目标运算条件中的所有目标列名。即,若第一目标运算条件中包含N个目标列名,则当第一运算式中包含非目标列名时,将此N个目标列名全部自第一目标运算式中删除;当第一运算式中不包含非目标列名时,自第一运算式中删除N-1个目标列名。其中,预留列名可以为第一运算式中的任意一个目标列名,其可以根据需要选取,如可以随机选取、选取第一个或选取最后一个作为预留列名等。
[0046] 在本实施例中,考虑到当原始节点与其第一目标节点之间存在全外连接节点时,或者,当原始节点为某一左外连接节点或半连接节点的右孩子时,执行全连接运算/左外连接运算/半连接运算可能会向原始节点过滤得到的常量列中引入NULL值,此时,如果若仍然删除第一目标节点的第一运算式中包含的目标列名,可能会导致SQL语句出现查询结果不准确的情况,因此,本实施例优选可以在原始节点与其第一目标节点之间存在全外连接节点时,或者,当原始节点为某一左外连接节点或半连接节点的右孩子时,不对该第一目标节点执行删除其第一目标运算条件中包含的目标列名的操作,以提高SQL语句查询结果的准确性。此时,优选的,在所述删除与所述原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名之前,还包括:确定所述原始节点与所述第一目标节点之间不存在全外连接节点,且所述原始节点不为左外连接节点或半连接节点的右孩子。
[0047] S103、根据所述新的关系树执行所述SQL语句。
[0048] 具体的,可以根据所述新的关系树生成执行计划,并根据该执行计划执行所述SQL语句。
[0049] 举例而言,假设表T1的定义为:CREATE TABLE T1(C1 INT,C2 INT);SQL语句为:select c1,c2 from t1 where c2=1group by c1,c2;该SQL语句的原始关系树如图2所示,该SQL语句的新的关系树如图3所示,按照新的关系树可以将上述SQL语句转换为:
select c1,1from t1 where c2=1group by c1;则基于SQL语句的原始关系树确定的该SQL语句的执行计划可以为:
[0050] 1   #NSET2:[1,1,52]
[0051] 2     #PRJT2:[1,1,52];exp_num(2),is_atom(FALSE)
[0052] 3       #HAGR2:[1,1,52];grp_num(2),sfun_num(0);
[0053] 4         #SLCT2:[0,1,52];exp_cast(T1.C2)=1
[0054] 5           #CSCN2:[0,1,52];INDEX33555453(T1)
[0055] 基于SQL语句的新的关系树确定的该SQL语句的执行计划可以为:
[0056] 1   #NSET2:[1,1,8]
[0057] 2     #PRJT2:[1,1,8];exp_num(2),is_atom(FALSE)
[0058] 3        #HAGR2:[1,1,8];grp_num(1),sfun_num(0);slave_empty(0)[0059] keys(T1.C1)
[0060] 4         #SLCT2:[0,1,8];T1.C2=1
[0061] 5           #CSCN2:[0,10,8];INDEX33555449(T1)
[0062] 基于上述两执行计划可以看出,现有技术在执行GROUP BY分组项时,需要获取C1的所有取值并按照C1的取值对过滤节点生成的过滤结果进行分组,然后再获取C2的所有取值并按照C2的取值对按照C1取值进行分组得到的结果再次进行分组;然而,本实施例提供的SQL语句的执行方法只需要获取C1的所有取值并按照C1的取值对过滤节点生成的过滤结果进行分组即可,能够提升数据库的查询效率,尤其是面对较复杂的SQL语句时,此种效果尤为明显。
[0063] 本发明实施例一提供的SQL语句的执行方法,获取SQL语句的原始关系树;依次判断该原始关系树中的各原始节点是否为过滤条件中包含常量子表达式且不包含或运算和非运算的目标过滤节点,并在判定某一原始节点为目标过滤节点时,将该原始节点的祖先节点中包含至少两个列名且至少一个列名为目标列名的分组节点确定为第一目标节点,并删除该第一目标节点中的至少一个目标列名,以生成新的关系树,进而根据该新的关系树执行该SQL语句。本实施例通过采用上述技术方案,删除分组节点中的常量分组项,能够减少SQL语句进行分组计算的次数,提高数据库的查询效率。
[0064] 在上述实施例的基础上,在判定所述原始节点为目标过滤节点时,所述SQL语句的执行方法还可以优化包括:将与所述原始节点对应的第二目标节点的第二目标运算条件内包含的目标列名替换为所述常量子表达式中的常量,其中,与所述原始节点对应的第二目标节点包括所述原始节点,以及,所述原始节点的祖先节点中的结果集投影节点、过滤节点、内连接节点、左外连接节点和半连接节点中的至少一项;所述第二目标运算条件中包含所述目标列名。在本实施例中,当原始关系树中存在能够对其目标列名进行删除的第一目标节点时,还可以针对能够删除的目标列名,将目标过滤节点及其父节点中与该目标列名对应的常量子表达式中的常量列的列名和别名替换为常量子表达式中的常量,以进一步减少SQL语句执行过程中所需的运算量。其中,第二目标节点可以为结果集投影节点、过滤节点、内连接节点、左外连接节点和/或半连接节点等节点。
[0065] 实施例二
[0066] 图4为本发明实施例二提供的一种SQL语句的执行方法的流程示意图。本实施例在上述实施例的基础上,将所述“依次判断所述原始关系树中的各原始节点是否为目标过滤节点,并在判定所述原始节点为目标过滤节点时,删除与所述原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名”优化为:初始化祖先链表,并选取所述原始关系树的根节点作为当前原始节点;将所述当前原始节点添加至祖先链表的末尾;判断所述当前原始节点是否为目标过滤节点;如果所述当前原始节点为目标过滤节点,则删除与所述当前原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名,按照先序遍历的顺序选取下一原始节点,将所述下一原始节点确定为当前原始节点,并返回执行将所述当前原始节点添加至祖先链表的末尾的操作,直至不存在下一原始节点为止。
[0067] 进一步地,所述SQL语句的执行方法还包括:如果所述当前原始节点不为目标过滤节点,则按照先序遍历的顺序选取下一原始节点,将所述下一原始节点确定为当前原始节点,并返回执行将所述当前原始节点添加至祖先链表的末尾的操作,直至不存在下一原始节点为止。
[0068] 进一步地,在所述将所述下一原始节点确定为当前原始节点之前,还包括:如果所述当前原始节点不为所述下一原始节点的父节点,则确定所述当前原始节点与所述下一原始节点的最近公共祖先节点,并删除所述祖先链表中存储的所述当前原始节点以及位于所述当前原始节点和所述最近公共祖先节点之间的其他原始节点。
[0069] 进一步地,在所述删除与所述当前原始节点对应的第一目标节点的运算条件中包含的至少一个目标列名之前,还包括:将所述祖先链表内存储的运算条件包含所述目标列名的分组节点、排序节点和去重节点确定为与所述当前原始节点对应的第一目标节点。
[0070] 相应的,如图4所示,本实施例提供的SQL语句的执行方法包括:
[0071] S201、获取SQL语句的原始关系树。
[0072] S202、初始化祖先链表,并选取所述原始关系树的根节点作为当前原始节点。
[0073] 本步骤中,祖先链表可以用于存放原始关系树中的原始节点的节点路径;假设原始关系树为如图2所示的关系树,则将原始关系树中的根节点REL_PROJECT确定为当前原始节点。
[0074] S203、将所述当前原始节点添加至祖先链表的末尾。
[0075] 具体的,可以将当前原始节点的节点路径添加至祖先链表的末尾,以便后续可以直接基于祖先链表查找当前原始节点的祖先节点(包括父节点),而不再需要通过繁琐的遍历关系树的方式进行查找,提升后续第一目标节点的确定效率,进而进一步提升数据库的查询效率。
[0076] S204、判断所述当前原始节点是否为目标过滤节点,若是,则执行S205;若否,则执行S207。
[0077] 示例性的,可以判断当前原始节点是否为过滤节点,若不为过滤节点,则确定当前原始节点不为目标过滤节点;若为过滤节点,则继续判断当前原始节点的过滤条件中是否存在常量过滤项(即是否包含常量子表达式),若不存在常量过滤项,则确定当前原始节点不为目标过滤节点;若包含常量过滤项,则进一步判断当前原始节点的过滤条件中是否包含或运算或非运算,若包含或运算或非运算,则确定当前原始节点不为目标过滤节点;若不包含或运算和非运算,则确定当前原始节点为目标过滤节点。
[0078] S205、将所述祖先链表内存储的运算条件包含所述目标列名的分组节点、排序节点和去重节点确定为与所述当前原始节点对应的第一目标节点。
[0079] S206、删除与所述当前原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名。
[0080] 示例性的,在初始化祖先链表时,同样初始化一个用于存放常量过滤项的常量链表,相应的,在确定当前原始节点为目标过滤节点时,可以将当前原始节点的常量过滤项添加到常量链表中,并在执行上述S205和S206时,自常量链表中取出一个常量过滤项作为当前常量过滤项,按照选链表中记录的各节点从后先前的顺序,依次判断各节点是否为运算条件中包含至少两个列名且该至少两个列名中包含表达式与该当前常量过滤项的表达式相同的当前目标列名的第一目标节点,若是,则自该第一目标节点的第一目标运算条件中删除该当前目标列名;若不是,则继续对下一节点是否为第一目标运算节点进行判断,直至判断的节点为不包含当前过滤项对应的常量列的列名和别名的结果集投影节点、判断的节点为集合运算节点、判断的节点为层次查询节点或原始关系树中的各节点均判断完成为止;删除常量链表中存储的当前常量过滤项,将下一常量过滤项确定为当前常量过滤项,并返回执行按照选链表中记录的各节点从后先前的顺序,依次判断各节点是否第一目标节点的操作,直至常量链表中不存在常量过滤项为止。
[0081] S207、按照先序遍历的顺序确定是否存在下一原始节点,若是,则执行S208;若否,则执行S211。
[0082] 示例性的,如果当前原始节点存在左孩子,则将其左孩子确定为下一原始节点;如果当前原始节点不存在左孩子但存在右孩子,则将其右孩子确定为下一原始节点;如果当前原始节点不存在左孩子和右孩子,当前原始节点为其父节点的左孩子,且其父节点存在右孩子,则将其父节点的右孩子确定为下一原始节点,依此类推,按照先序遍历所规定的根节点-左孩子-右孩子的顺序,即可确定当前原始节点是否存在下一原始节点,并在其存在下一原始节点时,确定该下一原始节点。以图2所示的原始关系树举例而言,若当前原始节点为图2中的REL_SELECT(过滤节点),则其存在下一原始节点,执行S208;若当前原始节点为图2中的REL_TABLE(基表节点),则其不存在下一原始节点,执行S211。
[0083] S208、判断所述当前原始节点是否为所述一下原始节点的父节点,若否,则执行S209;若是,则执行S210。
[0084] S209、确定所述当前原始节点与所述下一原始节点的最近公共祖先节点,并删除所述祖先链表中存储的所述当前原始节点以及位于所述当前原始节点和所述最近公共祖先节点之间的其他原始节点。
[0085] 在本实施例中,当当前原始节点不为下一原始节点的父节点时,可以确定祖先链表中存储的该当前原始节点以及该当前原始节点与二者(即当前原始节点和下一原始节点)的最近公共祖先节点之间的节点均不为该下一原始节点的祖先节点,因此,此时可以删除祖先链表中存储的当前原始节点以及位于当前原始节点和二者的最近公共祖先节点之间的节点,确保当将下一原始节点确定为当前原始节点时,祖先链表中记录的除当前原始节点之外的节点均为当前原始节点的祖先节点,从而能够直接基于祖先链表查找当前原始节点的祖先节点。
[0086] S210、将所述下一原始节点确定为当前原始节点,返回执行S203。
[0087] S211、根据所述新的关系树执行所述SQL语句。
[0088] 在本实施例中,本发明实施例所提供的SQL语句的执行方法的执行过程可以示例性的描述为:
[0089] a、获取SQL语句的原始关系树,初始化常量链表和祖先链表,并获取原始关系树的根节点作为第一当前原始节点。
[0090] b、将第一当前原始节点的节点路径添加至祖先链表的末尾,并判断第一当前原始节点是否为过滤节点,若是,则执行步骤c;若否,执行步骤e。
[0091] c、对第一当前原始节点上的where过滤条件进行判断,如果其where过滤条件仅存在一个过滤项A(假设为c1=1)或者为与运算(如A and B and C),则找出其过滤条件中等号一侧为列名、等号另一侧为常量的常量过滤项(例如c1=1),则将常量过滤项加入到常量链表,执行步骤d;如果其过滤条件中不存在常量过滤项,或者,第一当前原始节点的where过滤条件中包含或运算(如D or E)或非运算,则执行步骤e。
[0092] d、每次从常量链表中取出一个常量过滤项作为当前常量过滤项,按照下述步骤对原始关系树上相应的各个上层节点进行常量替换(包括常量列删除),常量替换结束则将所取出的常量过滤项从常量链表中删除,并取出下一常量过滤项作为当前常量过滤项,直至常量链表为空。
[0093] d1、判断祖先链表的长度(即所存储节点路径的个数)是否为1,即判断祖先链表中是否只存储了第一当前原始节点本身的路径,若是,则清空常量链表,执行步骤e;若否,则执行d2。
[0094] d2、将位于祖先链表末尾的节点路径对应的节点(即第一当前原始节点)确定为第二当前原始节点,执行步骤d3-d9中的某一项。
[0095] d3、当第二当前原始节点为全外连接节点时,确定针对当前常量过滤项的常量替换结束。
[0096] d4、当第二当前原始节点为左外连接节点或半连接节点时,如果第一当前原始节点为第二当前原始节点的右孩子,则确定针对当前常量过滤项的常量替换结束;如果第一当前原始节点不为第二当前原始节点的右孩子,则判断第二当前原始节点的表达式中是否包含当前常量过滤项的列名(即当前常量列列名),若包含,则将其表达式中的当前常量列列名替换为当前常量过滤项的表达式(即常量子表达式)中的常量,执行步骤d10;若不包含,执行步骤d10。
[0097] d5、当第二当前原始节点为分组节点、排序节点或去重节点时,如果第二当前原始节点的运算条件中包含的列名的个数大于1,且存在与当前常量过滤项的表达式相同的目标表达式,则删除其运算条件中的目标表达式,执行步骤d10;如果第二当前原始节点的运算条件中仅包含一个表达式或者第二当前原始节点的运算条件中不存在目标表达式,则执行步骤d10。
[0098] d6、当第二当前原始节点为结果集投影节点时,如果结果集投影节点的表达式中不包含当前常量列列名和当前常量列列名的别名(此时说明第二当前原始节点的上层节点也不需要用到当前常量列列名对应的常量列),则确定针对当前常量过滤项的常量替换结束;如果结果集投影节点中包含当前常量列列名,则将该常量列列名替换为当前常量列列名的表达式中的常量,执行步骤10;如果结果集投影节点中包含当前常量列列名的别名,则将该常量列列名的别名替换为当前常量列列名的表达式中的常量,并将该常量列列名的别名确定为当前常量列列名,执行步骤d10。
[0099] 在本步骤中,如果第一当前原始节点的过滤项中的别名(如内部生成或在SQL语句中定义),该过滤项为常量过滤项且结果集投影节点的表达式中包含该常量过滤项的别名,则需要继续向上进行常量替换,此时,可以将常量列列名替换为别名,如过滤项select c1 a1,说明c1有别名a1,且结果集投影节点的表达式中包含别名a1,则将可以将常量列的表达式c1=1替换为a1=1后继续对本结果集投影节点以及本结果集投影节点上层的节点进行常量替换。
[0100] d7、当第二当前原始节点为集合运算节点或层次查询节点时,确定针对当前常量过滤项的常量替换结束。因为集合运算节点或层次查询节点会重新为表达式命名,其上层节点都会使用新名,不会再出现当前常量列列名,因此,可以结束针对当前常量过滤项的常量替换操作。
[0101] d8、当第二当前原始节点为过滤节点、内连接节点、左外连接节点或半连接节点时,如果第二当前原始节点的表达式中包含当前常量列列名,则将其表达式中包含的当前常量列列名替换为当前常量列列名的表达式中的常量,执行步骤d10;如果第二当前原始节点的表达式中不包含当前常量列列名,则执行步骤d10。
[0102] d9、如果第二当前原始节点为其他表达式中不会存在列名的节点,如REL_TABLE、REL_TOPN、REL_ROWNUM或REL_AFUN,则执行步骤d10。
[0103] d10、按照祖先链表中记录的各节点从后向前的顺序,判断第二当前原始节点是否存在下一节点,若是,则将该下一节点确定为第二当前原始节点,并返回执行d3-d9中的某一项;若否,确定针对当前常量过滤项的常量替换结束。
[0104] e、判断第一当前原始节点是否存在左孩子,若是,则将其左孩子确定为第一当前原始节点,返回执行步骤b;若否,则执行步骤f。
[0105] f、判断第一当前原始节点是否存在右孩子,若是,则将其右孩子确定为第一当前原始节点,返回执行步骤b;若否,则执行步骤g。
[0106] g、将第一当前原始节点的节点路径自祖先链表中移除,判断第一当前原始节点是否存在父节点,若是,则执行步骤h;若否,则执行步骤i。
[0107] h、判断第一当前原始节点是否为其父节点的左孩子,若是,则将其父节点确定为第一当前原始节点,返回执行步骤f;若否,则将其父节点确定为第一当前原始节点,返回执行步骤g。
[0108] i、根据所生成的新的关系树执行所述SQL语句。
[0109] 在本实施例的一个具体应用场景中,假设表t1和表t2存在定义:create table t1(c1 int,c2 int);create table t2(d1 int,d2 int);SQL语句为:select d1,c2 from t1 left outer join t2 on c2=d2 where c2=1group by d1,c2 union all select*from t2 where d2=1group by d1,d2;对该SQL语句进行语法语义分析后生成的原始关系树如图5所示,则该SQL语句的执行过程可以描述为:
[0110] 首先,初始化常量量表和祖先链表。
[0111] 其次,将根节点REL_PROJECT的节点路径加入祖先链表,该节点不为过滤节点,不作优化处理。
[0112] 继续分析该REL_PROJECT的左孩子REL_UNIONALL,将REL_UNIONALL的节点路径加入祖先链表,该节点不为过滤节点,不作优化处理。
[0113] 继续分析该REL_UNIONALL的左孩子REL_PROJECT,将REL_PROJECT的节点路径加入祖先链表,该节点不为过滤节点,不作优化处理。
[0114] 继续分析该REL_PROJECT的左孩子REL_GROUP,将REL_GROUP的节点路径加入祖先链表,该节点不为过滤节点,不作优化处理。
[0115] 继续分析该REL_GROUP的左孩子REL_PROJECT,将REL_PROJECT的节点路径加入祖先链表,该节点不为过滤节点,不作优化处理。
[0116] 继续分析该REL_PROJECT的左孩子REL_LEFT,将REL_LEFT的节点路径加入祖先链表,该节点不为过滤节点,不作优化处理。
[0117] 继续分析该REL_LEFT的左孩子REL_SELECT,将REL_SELECT的节点路径加入祖先链表,该节点为过滤节点,REL_SELECT上存在常量过滤项c2=1,不包含或运算和非运算,且祖先链表的长度为7>1,进行优化处理:将常量过滤项c2=1加入常量链表,由于没有其他可加入常量链表的常量过滤项,继续下一步,从常量链表中取出一个常量过滤项c2=1,按照祖先链表中各节点路径从后向前的顺序,将该REL_SELECT中的c2替换为常量1;REL_SELECT的父节点为REL_LEFT,且REL_SELECT为REL_LEFT的左孩子,所以可以替换,将REL_LEFT的连接条件c2=d2替换为1=d2;REL_LEFT的父节点为REL_PROJECT,将REL_PROJECT中的查询项c2替换为常量1;REL_PROJECT父节点为REL_GROUP,REL_GROUP包含两个分组项,所以可以替换,将分组项c2移除;REL_GROUP父节点为REL_PROJECT,将REL_PROJECT中的查询项c2替换为常量1;REL_PROJECT的父节点为REL_UNIONALL,不需要再继续向上替换,常量过滤项c2=1替换结束,将常量过滤项c2=1常量链表中删除,常量链表为空,该REL_SELECT节点常量过滤项均替换完成。
[0118] 继续分析REL_SELECT的左孩子REL_TABLE,将REL_TABLE的节点路径加入祖先链表,该节点不为过滤节点,不作优化处理,且由于REL_TABLE不存在左孩子和右孩子,说明REL_TABLE分析结束,将REL_TABLE的节点路径从祖先链表移除。
[0119] 继续分析REL_TABLE的父节点REL_SELECT,REL_TABLE为REL_SELECT的左孩子,且REL_SELECT不存在右孩子,说明REL_SELECT分析结束,将REL_SELECT的节点路径从祖先链表移除。
[0120] 由于REL_SELECT的父节点REL_LEFT,REL_SELECT为REL_LEFT的左孩子且REL_LEFT存在右孩子REL_TABLE,则继续分析REL_LEFT的右孩子REL_TABLE,将REL_TABLE的节点路径加入祖先链表,该节点不为过滤节点,不作优化处理,且由于REL_TABLE不存在左孩子和右孩子,说明REL_TABLE分析结束,将REL_TABLE的节点路径从祖先链表移除。
[0121] 继续分析REL_TABLE的父节点REL_LEFT,REL_TABLE为REL_LEFT的右孩子,说明REL_LEFT分析结束,将REL_LEFT的节点路径从祖先链表移除。
[0122] 依此类推,继续分析后面节点,当祖先链表清空时,说明所有的节点均分析处理完毕,得到一个新的关系树,如图6所示。
[0123] 最后,根据新的关系树生成执行计划,并根据该执行计划执行SQL语句。
[0124] 本发明实施例二提供的SQL语句的执行方法,采用先序遍历的方式对各节点是否为目标过滤节点进行判断,通过祖先链表记录各节点的父节点及祖先节点,并在判定某一节点为目标过滤节点时,按照祖先链表记录的各节点由后向前的顺序依次对该节点的各祖先节点进行常量替换,在进行常量替换时能够快速的确定各节点的过滤节点,提高常量替换地速度,从而进一步提高SQL语句的执行速度,减少用户的等待时间。
[0125] 实施例三
[0126] 本发明实施例三提供一种SQL语句的执行装置。该装置可以由软件和/或硬件实现,一般可集成于计算机设备中,适用于对SQL语句进行常量替换的场景,可通过执行本发明实施例提供的SQL语句的执行方法对SQL语句中的常量进行替换。图7为本发明实施例三提供的SQL语句的执行装置的结构框图,如图7所示,所述装置包括获取模块301、删除模块302和执行模块303,其中,
[0127] 获取模块301,用于获取SQL语句的原始关系树;
[0128] 删除模块302,用于依次判断所述原始关系树中的各原始节点是否为目标过滤节点,并在判定所述原始节点为目标过滤节点时,删除与所述原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名,以得到新的关系树;
[0129] 执行模块303,用于根据所述新的关系树执行所述SQL语句;
[0130] 其中,所述目标过滤节点的过滤条件中包含常量子表达式且不包含或运算和非运算;与所述原始节点对应的第一目标节点包括所述原始节点的祖先节点中的分组节点,所述第一目标运算条件包含至少列名,所述至少两个列名中存在目标列名,所述目标列名为所述常量子表达式中的常量列列名或所述常量列列名的别名。
[0131] 本发明实施例三提供的SQL语句的执行装置,通过获取模块获取SQL语句的原始关系树;通过删除模块依次判断该原始关系树中的各原始节点是否为过滤条件中包含常量子表达式且不包含或运算和非运算的目标过滤节点,并在判定某一原始节点为目标过滤节点时,将该原始节点的祖先节点中包含至少两个列名且至少一个列名为目标列名的分组节点确定为第一目标节点,并删除该第一目标节点中的至少一个目标列名,以生成新的关系树,进而通过执行模块根据该新的关系树执行该SQL语句。本实施例通过采用上述技术方案,删除分组节点中的常量分组项,能够减少SQL语句进行分组计算的次数,提高数据库的查询效率。
[0132] 在上述方案中,所述删除模块301具体可用于:用于依次判断所述原始关系树中的各原始节点是否为目标过滤节点,并在判定所述原始节点为目标过滤节点时,针对与所述原始节点对应的每一个第一目标节点,如果所述第一目标节点的第一目标运算条件中仅包含目标列名,则选取一个目标列名作为预留列名,并删除所述第一目标运算条件中的非预留列名;如果所述第一目标节点的第一目标运算条件中包含非目标列名,则删除所述第一目标运算条件中的所有目标列名,以得到新的关系树。
[0133] 在上述方案中,所述删除模块301还可以用于:在所述删除与所述原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名之前,确定所述原始节点与所述第一目标节点之间不存在全外连接节点,且所述原始节点不为左外连接节点或半连接节点的右孩子。
[0134] 在上述方案中,所述删除模块301还可以用于:在判定所述原始节点为目标过滤节点时,将与所述原始节点对应的第二目标节点的第二目标运算条件内包含的目标列名替换为所述常量子表达式中的常量,其中,与所述原始节点对应的第二目标节点包括所述原始节点,以及所述原始节点的祖先节点中的结果集投影节点、过滤节点、内连接节点、左外连接节点和半连接节点中的至少一项;所述第二目标运算条件中包含所述目标列名。
[0135] 在上述方案中,所述删除模块301可以包括:初始化单元,用于:初始化祖先链表,并选取所述原始关系树的根节点作为当前原始节点;添加单元,用于将所述当前原始节点添加至祖先链表的末尾;判断单元,用于判断所述当前原始节点是否为目标过滤节点;列名删除单元,用于在所述当前原始节点为目标过滤节点时,删除与所述当前原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名,按照先序遍历的顺序选取下一原始节点,将所述下一原始节点确定为当前原始节点,并返回执行将所述当前原始节点添加至祖先链表的末尾的操作,直至不存在下一原始节点为止;在所述当前原始节点不为目标过滤节点,则按照先序遍历的顺序选取下一原始节点,将所述下一原始节点确定为当前原始节点,并返回执行将所述当前原始节点添加至祖先链表的末尾的操作,直至不存在下一原始节点为止。
[0136] 在上述方案中,所述删除模块301还可以包括:节点删除单元,用于在所述将所述下一原始节点确定为当前原始节点之前,如果所述当前原始节点不为所述下一原始节点的父节点,则确定所述当前原始节点与所述下一原始节点的最近公共祖先节点,并删除所述祖先链表中存储的所述当前原始节点以及位于所述当前原始节点和所述最近公共祖先节点之间的其他原始节点。
[0137] 在上述方案中,所述删除模块301还可以包括:节点确定单元,用于在所述删除与所述当前原始节点对应的第一目标节点的运算条件中包含的至少一个目标列名之前,将所述祖先链表内存储的运算条件包含所述目标列名的分组节点、排序节点和去重节点确定为与所述当前原始节点对应的第一目标节点。
[0138] 本发明实施例三提供的SQL语句的执行装置可执行本发明任意实施例提供的SQL语句的执行方法,具备执行SQL语句的执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的SQL语句的执行方法。
[0139] 实施例四
[0140] 图8为本发明实施例四提供的一种计算机设备的结构示意图,如图8所示,该计算机设备包括处理器40和存储器41,还可以包括输入装置42和输出装置43;计算机设备中处理器40的数量可以是一个或多个,图8中以一个处理器40为例;计算机设备中的处理器40、存储器41、输入装置42和输出装置43可以通过总线或其他方式连接,图8中以通过总线连接为例。
[0141] 存储器41作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的SQL语句的执行方法对应的程序指令/模块(例如,SQL语句的执行装置中的获取模块301、删除模块302和执行模块303)。处理器40通过运行存储在存储器41中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述的SQL语句的执行方法。
[0142] 存储器41可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器41可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器41可进一步包括相对于处理器40远程设置的存储器,这些远程存储器可以通过网络连接至计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0143] 输入装置42可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置43可包括显示屏等显示设备。
[0144] 本发明实施例四还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种SQL语句的执行方法,该方法包括:
[0145] 获取SQL语句的原始关系树;
[0146] 依次判断所述原始关系树中的各原始节点是否为目标过滤节点,并在判定所述原始节点为目标过滤节点时,删除与所述原始节点对应的第一目标节点的第一目标运算条件中包含的至少一个目标列名,以得到新的关系树;
[0147] 根据所述新的关系树执行所述SQL语句;
[0148] 其中,所述目标过滤节点的过滤条件中包含常量子表达式且不包含或运算和非运算;与所述原始节点对应的第一目标节点包括所述原始节点的祖先节点中的分组节点,所述第一目标运算条件包含至少列名,所述至少两个列名中存在目标列名,所述目标列名为所述常量子表达式中的常量列列名或所述常量列列名的别名。
[0149] 当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的SQL语句的执行方法中的相关操作。
[0150] 通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0151] 值得注意的是,上述SQL语句的执行装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
[0152] 注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈