CN112100207B - 一种子查询处理方法、装置、设备及存储介质 - Google Patents

一种子查询处理方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN112100207B
CN112100207B CN202010928464.4A CN202010928464A CN112100207B CN 112100207 B CN112100207 B CN 112100207B CN 202010928464 A CN202010928464 A CN 202010928464A CN 112100207 B CN112100207 B CN 112100207B
Authority
CN
China
Prior art keywords
query
data type
current sub
sub
column
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010928464.4A
Other languages
English (en)
Other versions
CN112100207A (zh
Inventor
朱仲颖
望声宜
韩朱忠
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Dameng Database Co Ltd
Original Assignee
Shanghai Dameng Database Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Dameng Database Co Ltd filed Critical Shanghai Dameng Database Co Ltd
Priority to CN202010928464.4A priority Critical patent/CN112100207B/zh
Publication of CN112100207A publication Critical patent/CN112100207A/zh
Application granted granted Critical
Publication of CN112100207B publication Critical patent/CN112100207B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种子查询处理方法、装置、设备及存储介质。该方法包括:若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型;若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数。通过本发明的技术方案,以实现解决背景技术中提出的方法存在的问题,丰富相关子查询的处理方法。

Description

一种子查询处理方法、装置、设备及存储介质
技术领域
本发明实施例涉及计算机技术,尤其涉及一种子查询处理方法、装置、设备及存储介质。
背景技术
结构化查询语言(Structured Query Language,简称SQL)是一种数据库编程语言,用于存储数据、查询、更新和管理关系型数据库系统。一条查询语句由SELECT、FROM、WHERE等多部分组成,当一条查询语句嵌套在另一条查询语句的组成部分中时,称之为子查询(简称子SQL)。
子查询分为非相关子查询和相关子查询两种。非相关子查询与外层查询没有任何关系,是可以独立执行的SQL语句;只执行一次,执行完成后将结果传递给外层查询。相关子查询依赖于外层查询的某些字段;其执行依赖于外层查询的结果集,外层查询一行传递给子查询执行一次。
相关子查询的执行逻辑一般如下:
1)从外层查询中取出一行元组,将元组中被子查询引用的字段传递给子查询;
2)执行子查询,获取子查询执行结果,并将结果传递给外层查询;
3)执行外层查询,获取满足条件的执行结果;
4)外层查询取出下一行元组,循环第一到第三步,直到外层查询的元组取完为止。
目前的数据库管理系统中对相关子查询的优化处理机制为将相关子查询转换为等价的非相关子查询或非子查询进行处理,主要包括两种方法,具体如下:
一、转换为连接查询。
嵌套SQL一般可以通过转换为连接查询的方式进行平坦化或去相关性,如例1所示。
例1:假设存在数据库对象表T1(C1 INT,C2 INT)、T2(D1 INT,D2 INT),执行下述语句“SELECT*FROM T1 WHERE C1=(SELECT D1 FROM T2 WHERE D2=C2)”,其中,子查询引用了外层查询对象T1的字段C2,因此为相关子查询。平坦化时,先将外层查询对象T1下推到子查询与T2做连接查询,再将子查询的连接查询结果与外层查询对象T1做连接查询。执行计划类似于:
上述执行计划中,子查询的连接查询结果通过引用列或行的唯一标识ROWID字段作为关键字与外层查询进行连接查询,确保平坦化后结果的正确性。
转化为连接查询平坦化并不适用于所有的相关子查询,如例2所示。
例2,执行下列语句“SELECT*FROM T1 WHERE C1=(SELECT TOP 1D1 FROM T2WHERE D2=C2)”,其中,子查询中包含“TOP 1”表示子查询只返回满足条件的第一行,如果子查询转换为连接查询只返回一行数据与外层查询对象T1进行连接查询会导致结果错误。
二、转换为变量
将相关子查询中引用外层查询的字段转换为变量。
针对例2可以采用转换为变量的方式处理,执行计划类似于:
上述计划执行流程如下:外层查询逐行取出对象T1元组中字段C2的值赋值给变量var1,子查询取出变量var1执行并将执行结果赋值给var2,外层查询取出var2执行返回满足条件的结果。例1也可以采用转换为变量的方式,只是例1比例2的执行计划少了第8行的TOPN。
同样转换为变量的方式也不可能适用于所有的相关子查询,例如:数据库共享集群环境,当主节点对变量修改无法传递给从节点时,容易导致结果错误,因此在某些情况下限制了相关子查询转换为变量的处理方式。
上述相关子查询的两种处理方法相互互补,方法一平坦化去相关性后子查询只执行一次,方法二外层查询的一行子查询就执行一次。两种实现方法各有优劣,都有自己的局限性,并不适用相关子查询的所有场景。
发明内容
本发明实施例提供一种子查询处理方法、装置、设备及存储介质,以实现解决背景技术中提出的方法存在的问题,丰富相关子查询的处理方法。
第一方面,本发明实施例提供了一种子查询处理方法,包括:
若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型;
若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数。
进一步的,在获取引用外层查询对象的列定义的数据类型之前,还包括:
获取引用外层查询对象的列;
若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数之后,还包括:
获取所述当前子查询对应的原始语句;
将所述原始语句中所述当前子查询所在的位置改写为临时命名函数的调用,其中,所述调用函数对应的调用参数为所述当前子查询引用外层查询对象的列。
进一步的,若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型包括:
判断当前子查询是否引用外层查询对象的列;
若所述当前子查询引用外层查询对象的列,则所述当前子查询为相关子查询;
获取引用外层查询对象的列定义的数据类型。
进一步的,将所述当前子查询所属查询表达式转换为临时命名函数包括:
若所述当前子查询属于查询表达式,则根据所述当前子查询中引用外层查询列的个数和数据类型确定临时命名函数对应参数的个数和数据类型,其中,所述临时命名函数每一个参数对应一个引用外层查询对象的列,所述临时命名函数的定义体为赋值子句。
进一步的,将所述当前子查询所属布尔表达式转换为临时命名函数包括:
若所述当前子查询属于布尔表达式,则根据所述当前子查询所属布尔表达式中引用外层查询对象的列的个数和数据类型确定临时命名函数对应参数的个数和数据类型,其中,所述临时命名函数每一个参数对应一个引用外层查询对象的列,所述临时命名函数的定义体为条件子句。
第二方面,本发明实施例还提供了一种子查询处理装置,该装置包括:
第一获取模块,用于若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型;
第二获取模块,用于若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数。
进一步的,还包括:
第三获取模块,用于在获取引用外层查询对象的列定义的数据类型之前,获取引用外层查询对象的列;
还包括:
第四获取模块,用于在若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数之后,获取所述当前子查询对应的原始语句;
改写模块,用于将所述原始语句中所述当前子查询所在的位置改写为临时命名函数的调用,其中,所述调用函数对应的调用参数为所述当前子查询引用外层查询对象的列。
进一步的,第一获取模块具体用于:
判断当前子查询是否引用外层查询对象的列;
若所述当前子查询引用外层查询对象的列,则所述当前子查询为相关子查询;
获取引用外层查询对象的列定义的数据类型。
第三方面,本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明实施例中任一所述的子查询处理方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例中任一所述的子查询处理方法。
本发明实施例通过若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型;若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数,以实现解决背景技术中提出的方法存在的问题,丰富相关子查询的处理方法。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1是本发明实施例一中的一种子查询处理方法的流程图;
图2是本发明实施例二中的一种子查询处理装置的结构示意图;
图3是本发明实施例三中的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
实施例一
图1为本发明实施例一提供的一种子查询处理方法的流程图,本实施例可适用于子查询引用了外层查询对象的列时,去除其相关性的情况,该方法可以由本发明实施例中的子查询处理装置来执行,该装置可采用软件和/或硬件的方式实现,如图1所示,该方法具体包括如下步骤:
S110,若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型。
其中,所述相关子查询为引用了外层查询对象的子查询。
其中,所述引用外层对象的列定义的数据类型可以为临时命名函数的参数支持的数据类型,也可以为临时命名函数的参数不支持的数据类型,本发明实施例对此不进行限制。
具体的,在获取到当前子查询后,判断所述当前子查询是否为相关子查询,若所述当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型。
S120,若所述数据类型为预设类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数。
其中,所述子查询处于布尔表达式中,或者可以为子查询处于查询表达式中,还可以为所述子查询处于其他包含子查询的数据库语句中,本发明实施例对此不进行限制。
其中,所述预设类型可以为用户根据需要设置的数据类型,也可以为临时命名函数的参数支持的任意数据类型,本发明实施例对此不进行限制。
具体的,在获取到引用外层查询对象的列定义的数据类型后,判断所述引用外层查询对象的列定义的数据类型是否为预设类型,若引用外层查询对象的列定义的数据类型为预设类型,则说明当前子查询可以转换为临时命名函数,若引用外层查询对象的列定义的数据类型为非预设类型,则说明当前子查询不能够转换为临时命名函数。若当前子查询可以转换为临时命名函数,则获取当前子查询所在位置,若当前子查询不能够转换为临时命名函数,则按照常规方式处理,不进行转换。
具体的,若当前子查询处于布尔表达式中,则将当前子查询所属布尔表达式转换为临时命名函数,若当前子查询处于查询表达式中,则将当前子查询所属查询表达式转换为临时命名函数。
可选的,在获取引用外层查询对象的列定义的数据类型之前,还包括:
获取引用外层查询对象的列;
若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数之后,还包括:
获取所述当前子查询对应的原始语句;
将所述原始语句中所述当前子查询所在的位置改写为临时命名函数的调用,其中,所述调用函数对应的调用参数为所述当前子查询引用外层查询对象的列。
可选的,若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型包括:
判断当前子查询是否引用外层查询对象的列;
若所述当前子查询引用外层查询对象的列,则所述当前子查询为相关子查询;
获取引用外层查询对象的列定义的数据类型。
具体的,若当前子查询引用外层查询对象的列,则说明当前子查询为相关子查询,获取引用外层查询对象的列定义的数据类型。
具体的,若当前子查询引用外层查询对象的列定义的数据类型为临时命名函数的参数支持的数据类型,则说明当前子查询能够转换为临时命名函数。
可选的,将所述当前子查询所属布尔表达式转换为临时命名函数包括:
若所述当前子查询属于布尔表达式,则根据所述当前子查询所属布尔表达式中引用外层查询对象的列的个数和数据类型确定临时命名函数对应参数的个数和数据类型,其中,所述临时命名函数每一个参数对应一个引用外层查询对象的列,所述临时命名函数的定义体为条件子句。
其中,所述条件子句可以为IF子句,也可以为CASE WHEN子句等,本发明实施例对此不进行限制。
具体的,若当前子查询属于布尔表达式,则根据当前子查询所属布尔表达式中引用外层查询对象的列的个数和数据类型确定临时命名函数对应参数的个数和数据类型,且临时命名函数每一个参数对应一个引用外层查询对象的列,所述临时命名函数的定义体为条件子句。
可选的,将所述当前子查询所属查询表达式转换为临时命名函数包括:
若所述当前子查询属于查询表达式,则根据所述当前子查询中引用外层查询列的个数和数据类型确定临时命名函数对应参数的个数和数据类型,其中,所述临时命名函数每一个参数对应一个引用外层查询对象的列,所述临时命名函数的定义体为赋值子句。
其中,所述赋值语句可以是普通赋值语句,也可以是SELECT INTO语句等,本发明实施例对此不进行限制。
在一个具体的例子中,是将相关子查询转换为WITH FUNCTION函数以去除其相关性。临时命名函数WITH FUNCTION函数的作用是在SQL语句中临时声明并定义存储函数,该存储函数不会存储到系统表中,只在当前SQL语句内有效。目前的主流商用数据库管理系统大都支持WITH FUNCTION函数功能。
例3,针对例1中的SQL,将相关子查询转换为WITH FUNCTION子句,如下:
WITH FUNCTION F1(ARG1 INT,ARG2 INT)RETURN INT IS
DECLARE
RET_VAR INT;
BEGIN
SELECT CASE WHEN
(ARG1=(SELECT D1 FROM T2 WHERE D2=ARG2))
THEN 1ELSE 0END INTO RET_VAR FROM DUAL;
RETURN RET_VAR;
END;
转换WITH FUNCTION后,原始SQL改写为如下:
SELECT*FROM T1 WHERE F1(C1,C2)=1;
例3转换机制如下:布尔表达式“C1=(SELECT D1 FROM T2 WHERE D2=C2)”作为整体,首先将布尔表达式中引用外层查询对象T1的字段C1、C2作为WITH FUNCTION函数的参数,参数类型根据引用字段的数据类型定义,其次WITH FUNCTION函数的定义体为CASEWHEN子句,如果条件满足则返回1,否则返回0,函数返回值类型恒为INT。改写后的SQL语句执行计划如下:
其中,本发明对WITH FUNCTION函数返回值的数据类型不进行限制,示例性的可以定义返回值数据类型为BOOLEAN,当条件满足时返回TRUE,否则返回FALSE。
例3的转换规则适用于相关子查询存在于布尔表达式的情况,当相关子查询存在于布尔表达式(NOT)EXISTS、(NOT)LIKE、(NOT)IN、ANY/SOME/ALL等时,都可以采用此方法转换为WITH FUNCTION去相关性。当相关子查询存在于SELECT语句查询表达式时,则需要采用另外一种方法转换为WITH FUNCTION去相关性,如例4所示。
例4,执行下列语句“SELECT C1,(SELECT D1 FROM T2 WHERE D2=C2)FROM T1”,转换为WITH FUNCTION如下:
WITH FUNCTION F1(ARG1 INT)RETURN INT IS
DECLARE
RET_VAR INT;
BEGIN
RET_VAR=(SELECT D1 FROM T2 WHERE D2=ARG1);
RETURN RET_VAR;
END;
转换WITH FUNCTION后,原始SQL改写如下:
SELECT C1,F1(C2)FROM T1;
例4转换机制如下:SELECT查询表达式“(SELECT D1 FROM T2 WHERE D2=C2)”作为整体,首先将引用外层查询对象T1的字段C2作为WITH FUNCTION函数的参数,参数类型根据引用字段的数据类型定义,其次WITH FUNCTION函数的定义体为赋值语句,被赋值的变量数据类型由子查询的查询表达式对应数据类型决定。改写后的SQL语句执行计划如下:
1#NSET
2#PRJT:C1,F1(C2)
3#CSCN:(T1)
其中,本发明对WITH FUNCTION函数定义体不进行限制,示例性的可以定义为普通赋值语句、也可以定义为SELECT INTO语句等,本发明实施例对此不进行限制。
相关子查询转换为WITH FUNCTION具体执行流程如下:
1、检查当前子查询是否为相关子查询。
子查询解析过程中登记访问的数据库对象,如果子查询引用了外层查询的对象则为相关子查询。
2、判断当前相关子查询能否转换为WITH FUNCTION函数。
引用外层查询对象的列需要转换为WITH FUNCTION函数的参数,如果列定义的数据类型是函数参数不支持的数据类型,则无法转换为WITH FUNCTION函数。
各数据库管理系统的函数参数不支持的数据类型各不相同,此处不做赘述。
3、根据当前相关子查询所在的位置,转换为不同的WITH FUNCTION函数。具体转换规则见表1所示:
表1
4、改写原始SQL语句,原始SQL语句为当前子查询对应的原始SQL语句,将相关子查询转换为WITH FUNCTION函数,生成新的SQL,调用WITH FUNCTION函数。具体的,转换规则见表2所示:
表2
5、根据转换后的新SQL生成对应的执行计划。
其中,WITH FUNCTION函数会生成其语句块对应执行计划,作为SQL整体计划的一部分。
6、执行转换后生成的执行计划。
本实施例的技术方案,通过若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型;若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数,以实现解决背景技术中提出的方法存在的问题,丰富相关子查询的处理方法。
实施例二
图2为本发明实施例二提供的一种子查询处理装置的结构示意图。本实施例可适用于子查询引用了外层查询对象的列时,去除其相关性的情况,该装置可采用软件和/或硬件的方式实现,该装置可集成在任何提供子查询处理功能的设备中,例如可以是,计算机。如图2所示,所述子查询处理装置具体包括:第一获取模块210和第二获取模块220。
其中,第一获取模块210,用于若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型;
第二获取模块220,用于若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数。
可选的,还包括:
第三获取模块,用于在获取引用外层查询对象的列定义的数据类型之前,获取引用外层查询对象的列;
还包括:
第四获取模块,用于在若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数之后,获取所述当前子查询对应的原始语句;
改写模块,用于将所述原始语句中所述当前子查询所在的位置改写为临时命名函数的调用,其中,所述调用函数对应的调用参数为所述当前子查询引用外层查询对象的列。
可选的,第一获取模块具体用于:
判断当前子查询是否引用外层查询对象的列;
若所述当前子查询引用外层查询对象的列,则所述当前子查询为相关子查询;
获取引用外层查询对象的列定义的数据类型。
上述产品可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。
本实施例的技术方案,通过若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型;若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数,以实现解决背景技术中提出的方法存在的问题,丰富相关子查询的处理方法。
实施例三
图3为本发明实施例三中的一种计算机设备的结构示意图。图3示出了适于用来实现本发明实施方式的示例性计算机设备12的框图。图3显示的计算机设备12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图3所示,计算机设备12以通用计算设备的形式表现。计算机设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图3未显示,通常称为“硬盘驱动器”)。尽管图3中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机设备12交互的设备通信,和/或与使得该计算机设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。另外,本实施例中的计算机设备12,显示器24不是作为独立个体存在,而是嵌入镜面中,在显示器24的显示面不予显示时,显示器24的显示面与镜面从视觉上融为一体。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机设备12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的子查询处理方法:
若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型;
若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数。
实施例四
本发明实施例四提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请所有发明实施例提供的子查询处理方法:
若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型;
若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网(LAN)或广域网(WAN)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (8)

1.一种子查询处理方法,其特征在于,包括:
若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型;
若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数;所述临时命名函数为将相关子查询转换为WITH FUNCTION函数;
所述将所述当前子查询所属布尔表达式转换为临时命名函数包括:
若所述当前子查询属于布尔表达式,则根据所述当前子查询所属布尔表达式中引用外层查询对象的列的个数和数据类型确定临时命名函数对应参数的个数和数据类型,其中,所述临时命名函数每一个参数对应一个引用外层查询对象的列,所述临时命名函数的定义体为条件子句;
所述将所述当前子查询所属查询表达式转换为临时命名函数包括:
若所述当前子查询属于查询表达式,则根据所述当前子查询中引用外层查询列的个数和数据类型确定临时命名函数对应参数的个数和数据类型,其中,所述临时命名函数每一个参数对应一个引用外层查询对象的列,所述临时命名函数的定义体为赋值子句。
2.根据权利要求1所述的方法,其特征在于,在获取引用外层查询对象的列定义的数据类型之前,还包括:
获取引用外层查询对象的列;
若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数之后,还包括:
获取所述当前子查询对应的原始语句;
将所述原始语句中所述当前子查询所在的位置改写为临时命名函数的调用,其中,所述调用函数对应的调用参数为所述当前子查询引用外层查询对象的列。
3.根据权利要求1所述的方法,其特征在于,若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型包括:
判断当前子查询是否引用外层查询对象的列;
若所述当前子查询引用外层查询对象的列,则所述当前子查询为相关子查询;
获取引用外层查询对象的列定义的数据类型。
4.一种子查询处理装置,其特征在于,包括:
第一获取模块,用于若当前子查询为相关子查询,则获取引用外层查询对象的列定义的数据类型;
第二获取模块,用于若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数;所述临时命名函数为将相关子查询转换为WITH FUNCTION函数;
所述第二获取模块,具体用于若所述当前子查询属于布尔表达式,则根据所述当前子查询所属布尔表达式中引用外层查询对象的列的个数和数据类型确定临时命名函数对应参数的个数和数据类型,其中,所述临时命名函数每一个参数对应一个引用外层查询对象的列,所述临时命名函数的定义体为条件子句;若所述当前子查询属于查询表达式,则根据所述当前子查询中引用外层查询列的个数和数据类型确定临时命名函数对应参数的个数和数据类型,其中,所述临时命名函数每一个参数对应一个引用外层查询对象的列,所述临时命名函数的定义体为赋值子句。
5.根据权利要求4所述的装置,其特征在于,还包括:
第三获取模块,用于在获取引用外层查询对象的列定义的数据类型之前,获取引用外层查询对象的列;
还包括:
第四获取模块,用于在若所述数据类型为预设数据类型,则将所述当前子查询所属布尔表达式或者查询表达式转换为临时命名函数之后,获取所述当前子查询对应的原始语句;
改写模块,用于将所述原始语句中所述当前子查询所在的位置改写为临时命名函数的调用,其中,所述调用函数对应的调用参数为所述当前子查询引用外层查询对象的列。
6.根据权利要求4所述的装置,其特征在于,第一获取模块具体用于:
判断当前子查询是否引用外层查询对象的列;
若所述当前子查询引用外层查询对象的列,则所述当前子查询为相关子查询;
获取引用外层查询对象的列定义的数据类型。
7.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-3中任一所述的方法。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-3中任一所述的方法。
CN202010928464.4A 2020-09-07 2020-09-07 一种子查询处理方法、装置、设备及存储介质 Active CN112100207B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010928464.4A CN112100207B (zh) 2020-09-07 2020-09-07 一种子查询处理方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010928464.4A CN112100207B (zh) 2020-09-07 2020-09-07 一种子查询处理方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN112100207A CN112100207A (zh) 2020-12-18
CN112100207B true CN112100207B (zh) 2024-02-23

Family

ID=73757915

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010928464.4A Active CN112100207B (zh) 2020-09-07 2020-09-07 一种子查询处理方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN112100207B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5761657A (en) * 1995-12-21 1998-06-02 Ncr Corporation Global optimization of correlated subqueries and exists predicates
US8862606B1 (en) * 2011-09-22 2014-10-14 Emc Corporation Executing correlated and multi-row subqueries in a MPP database
US9183254B1 (en) * 2012-05-04 2015-11-10 Paraccel Llc Optimizing database queries using subquery composition
CN109508339A (zh) * 2018-11-12 2019-03-22 上海达梦数据库有限公司 一种数据查询方法、装置、终端设备和存储介质
CN110222071A (zh) * 2019-06-06 2019-09-10 上海达梦数据库有限公司 一种数据查询方法、装置、服务器及存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7181446B2 (en) * 2004-01-23 2007-02-20 International Business Machines Corporation Query transformation for queries involving correlated subqueries having correlation join predicates with local filtering predicates involving predicate transitive closure and predicate pull-out
CN103714058B (zh) * 2012-09-28 2017-05-17 Sap欧洲公司 用于数据库查询优化的方法以及使用该方法的系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5761657A (en) * 1995-12-21 1998-06-02 Ncr Corporation Global optimization of correlated subqueries and exists predicates
US8862606B1 (en) * 2011-09-22 2014-10-14 Emc Corporation Executing correlated and multi-row subqueries in a MPP database
US9183254B1 (en) * 2012-05-04 2015-11-10 Paraccel Llc Optimizing database queries using subquery composition
CN109508339A (zh) * 2018-11-12 2019-03-22 上海达梦数据库有限公司 一种数据查询方法、装置、终端设备和存储介质
CN110222071A (zh) * 2019-06-06 2019-09-10 上海达梦数据库有限公司 一种数据查询方法、装置、服务器及存储介质

Also Published As

Publication number Publication date
CN112100207A (zh) 2020-12-18

Similar Documents

Publication Publication Date Title
CN107480198B (zh) 一种分布式NewSQL数据库系统和全文检索方法
US9471711B2 (en) Schema-less access to stored data
US8260824B2 (en) Object-relational based data access for nested relational and hierarchical databases
CN107491561B (zh) 一种基于本体的城市交通异构数据集成系统及方法
US20120084315A1 (en) Query Plan Optimization for Prepared SQL Statements
US9785725B2 (en) Method and system for visualizing relational data as RDF graphs with interactive response time
US10452655B2 (en) In-memory cursor duration temp tables
EP2652645A1 (en) Extensible rdf databases
US11334549B2 (en) Semantic, single-column identifiers for data entries
US8812489B2 (en) Swapping expected and candidate affinities in a query plan cache
US9569485B2 (en) Optimizing database query
WO2013057937A1 (en) Transformation of complex data source result sets to normalized sets for manipulation and presentation
CN110688397B (zh) 一种基于sql的分布式数据统一访问系统及方法
US10474718B1 (en) Query proxy system for client-specified models
US20130198237A1 (en) Transforming Function Calls for Interaction with Hierarchical Data Structures
US20100036805A1 (en) System Maintainable and Reusable I/O Value Caches
CN109241100B (zh) 一种查询方法、装置、设备及存储介质
US20100036804A1 (en) Maintained and Reusable I/O Value Caches
US20120330988A1 (en) Systems And Methods For Performing Index Joins Using Auto Generative Queries
CN117608652A (zh) 一种基于高级抽象语法树的sql语句翻译方法
US20040193567A1 (en) Apparatus and method for using a predefined database operation as a data source for a different database operation
CN108008947B (zh) 一种编程语句的智能提示方法、装置、服务器及存储介质
CN111475534B (zh) 一种数据查询方法及相关设备
CN112286964A (zh) 一种sql语句优化方法、装置、设备及存储介质
CN111125216B (zh) 数据导入Phoenix的方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant