CN104050264A - 一种生成sql语句的方法和装置 - Google Patents
一种生成sql语句的方法和装置 Download PDFInfo
- Publication number
- CN104050264A CN104050264A CN201410276540.2A CN201410276540A CN104050264A CN 104050264 A CN104050264 A CN 104050264A CN 201410276540 A CN201410276540 A CN 201410276540A CN 104050264 A CN104050264 A CN 104050264A
- Authority
- CN
- China
- Prior art keywords
- separate views
- view
- relation
- field
- source
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种生成SQL语句的方法和装置,以解决现有技术的SQL语句查询方法生成的SQL语句包括大量子查询,导致语句复杂度很高和损耗很大的技术问题。在本发明一些可行的实施方式中,方法包括:查找报表中每个字段的来源,找出包括所述字段的独立视图,找出的所有独立视图组成独立视图集合;查找所述独立视图集合中任意两个独立视图之间的最短关系路径,并将所述最短关系路径上的其它独立视图添加到所述独立视图集合中,以及记录任意两个独立视图之间的关系表达式;根据所述独立视图集合及其中任意两个独立视图之间的关系表达式,生成SQL语句。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种生成SQL语句的方法和装置。
背景技术
商业智能(Business Intelligence,BI)描述了一系列的概念和方法,通过应用基于事实的支持系统来辅助商业决策的制定。商业智能技术提供使企业迅速分析数据的技术和方法。企业中会有很多各种各样的数据,通常会将这些数据存放在数据库中统一管理。并且,为了有效区分这些数据,将这些数据放在数据库的不同数据表中。数据库中还存在视图的概念,视图是原始数据库数据的一种变换,是查看数据表中数据的另外一种方式。视图一般是虚表,是从一个或几个基本的数据表(或视图)中导出的表,在数据库中仅存放视图的定义,不存放视图对应的数据,对应的数据仍然存放在所引用的数据表中。当然,数据库中最基本的数据表也可认为是视图。
通常采用结构化查询语言(Structured Query Language,SQL)语句进行数据库查询,查询结果也可认为是一种视图。可根据查询结果构建报表,报表是按一定的格式生成的数据只读表,用于呈现给用户查阅。
SQL的查询语句包括有select<字段列表>from<表名>where<条件表达式>语句。其中,如果略去条件表达式where,且select查询所有字段,则查询结果就是from<表名>中多个报表的笛卡尔积。笛卡尔积是指包含两个集合中任意取出两个元素构成的组合的集合。例如,集合A表示某学校学生的集合,集合B表示该学校所有课程的集合,则A与B的笛卡尔积就是任一个学生和任一种课程的组合的集合,可用于表示所有可能的选课情况。
但是,在数据表之间存在关联关系的情况下,笛卡尔积中的某些组合就是错误或者无用的数据,即,查询结果不能是笛卡尔积,此时,必须利用where<条件表达式>对查询结果进行限制,筛选出有用的信息。例如,集合A表示学生的集合,集合B表示所有学生的成绩的集合,当查询学生的成绩时,查询结果就不能是集合A与集合B的笛卡尔积。
举例说明:假设数据库中已存在“产品线表、产品类型表、产品表、产品销量表”这四张报表,另外,用户设备中还有一张“产品信息表”,产品信息表的字段由产品类型表和产品表的字段通过页面拖拽生成,且产品信息表是逻辑视图,在数据库中不存在。其中,假设用户没有预先建立产品线表与其它报表的逻辑关系。需要注意,各个报表之间的逻辑关系不存在于数据库中。则,构建包括“产品线名称,产品类型名称,产品名称,销量”这四个字段的报表,生成SQL语句的过程如下:
由于产品线名称字段来源于产品线表,产品类型名称和产品名称来源于产品信息表,销量来源于产品销量表,产品信息表的字段由产品类型表、产品表字段通过页面拖拽组成,则,因为从逻辑上,产品线表和产品销量表之间没有关系,逻辑上显示笛卡尔积是正确的。但是,从业务语义上面看来,实际上产品线表和产品信息表、产品销量表都是有关系的,数据不能是笛卡尔积。
为了解决该问题,现有的技术中,最接近的查询技术是,手工直接建立产品线表和产品信息表的关系,这样查询时就可以加上限制条件,以此避免出现笛卡尔积。此时,生成的SQL语句如下:
“select产品线名称,产品类型名称,产品名称,销量
from
(select产品类型名称,产品名称from产品类型表产品表where产品类型表.标识=产品表.产品类型标识)产品信息表产品线表产品销量表
where产品线表.标识=产品信息表.产品线标识and产品信息表.标识=产品销量表.产品信息表标识”
可见,from字句中有一个子查询。但事实上,from字句的子查询在此次构建的报表中是不需要出现的,手工直接建立产品线表和产品信息表的关系也是多余的。
理论上,性能最优最简单的SQL语句应该是:
“select产品线名称,产品类型名称,产品名称,销量
from产品线表产品类型表产品表产品销量表
where产品线表.标识=产品类型表.产品线标识
and产品类型表.标识=产品表.产品类型表标识
and产品表.标识=产品销量表.产品标识”
上述数据还是很简单的情况,若存在多级逻辑表,即A表由B、C表字段拖拽组成,B由B1、B2、B3拖拽组成,C由C1、C2、C3拖拽组成,B1又由B11、B12拖拽组成,C1由C11、C12、C13组成等等,那最后报表的SQL语句中将存在大量的子查询,那就非常损耗性能,而且SQL语句复杂度也指数增长。可见,现有的SQL语句查询方法中,生成的SQL语句包括大量子查询,导致语句复杂度很高,损耗很大。
发明内容
本发明实施例提供一种生成SQL语句的方法和装置,以解决现有技术的SQL语句包括大量子查询,导致语句复杂度很高和损耗很大的技术问题。
本发明第一方面提供一种生成SQL语句的方法,包括:
查找报表中每个字段的来源,找出包括所述字段的独立视图,找出的所有独立视图组成独立视图集合;查找所述独立视图集合中任意两个独立视图之间的最短关系路径,并将所述最短关系路径上的其它独立视图添加到所述独立视图集合中,以及记录任意两个独立视图之间的关系表达式;根据所述独立视图集合及其中任意两个独立视图之间的关系表达式,生成SQL语句。
在第一种可能的实现方式中,所述查找报表中每个字段的来源,找出包括所述字段的独立视图包括:分析报表中每个字段的表达式,以查找每个字段的来源视图;判断查找到的来源视图是否是独立视图;如果查找到的来源视图是独立视图,则将查找到的独立视图添加到独立视图集合中;如果查找到的来源视图不是独立视图,则分析查找到的来源视图中的所述字段的表达式,继续递归查找所述字段的来源视图,直到查找到的来源视图是独立视图为止。
结合第一方面或者第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述判断查找到的来源视图是否是独立视图包括:如果查找到的来源视图是数据库导入的视图,则判断查找到的来源视图是独立视图;如果查找到的来源视图是新建的视图,则,判断所述新建的视图是否与其它视图有直接关系,若有,则判断所述新建的视图是独立视图;或者,判断所述新建的视图中是否有新的聚合方式,若有,则判断所述新建的视图是独立视图。
结合第一方面或者第一方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述查找所述独立视图集合中任意两个独立视图之间的最短关系路径包括:判断第一独立视图和第二独立视图之间是否有直接关系,若没有,则查找所述第一独立视图和第二独立视图之间的间接关系;从查找到的所有关系路径中,找出所述第一独立视图和第二独立视图之间的最短关系路径;其中,所述第一独立视图和第二独立视图是所述独立视图集合中的任意两个独立视图。
结合第一方面或者第一方面的第一种至第三种可能的实现方式中的任一种,在第四种可能的实现方式中,针对多个指定字段新建独立视图,所述新建的独立视图包括:从所述多个指定字段的直接来源视图中复制来的所述指定字段,以及所述指定字段在所述直接来源视图中与其它视图的直接关系。
结合第一方面的第四种可能的实现方式中的任一种,在第五种可能的实现方式中,所述针对多个指定字段新建独立视图包括:查找每个指定字段的直接来源视图;查找与找出的直接来源视图存在直接关系的其它视图;从找出的直接来源视图中,复制所述指定字段以及所述指定字段与其它视图的所有直接关系到新建的独立视图中。
本发明第二方面提供一种生成SQL语句的装置,包括:
视图查找模块,用于查找报表中每个字段的来源,找出包括所述字段的独立视图,找出的所有独立视图组成独立视图集合;关系查找模块,用于查找所述独立视图集合中任意两个独立视图之间的最短关系路径,并将所述最短关系路径上的其它独立视图添加到所述独立视图集合中,以及记录任意两个独立视图之间的关系表达式;语句生成模块,用于根据所述独立视图集合及其中任意两个独立视图之间的关系表达式,生成SQL语句。
在第一种可能的实现方式中,所述视图查找模块包括:分析查找单元,用于分析报表中每个字段的表达式,以查找每个字段的来源视图;视图判断单元,用于判断查找到的来源视图是否是独立视图;记录处理单元,用于如果所述视图判断单元判断查找到的来源视图是独立视图,则将查找到的独立视图添加到独立视图集合中;所述分析查找单元,还用于如果所述视图判断单元判断查找到的来源视图不是独立视图,则分析查找到的来源视图中所述字段的表达式,继续递归查找所述字段的来源视图,直到所述视图判断单元判断查找到的来源视图是独立视图为止。
结合第二方面或者第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述视图判断单元,具体用于如果所述分析查找单元查找到的来源视图是数据库导入的视图,则判断查找到的来源视图是独立视图;如果所述分析查找单元查找到的来源视图是新建的视图,则,判断所述新建的视图是否与其它视图有直接关系,若有,则判断所述新建的视图是独立视图;或者,判断所述新建的视图中是否有新的聚合方式,若有,则判断所述新建的视图是独立视图。
结合第二方面或者第二方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述关系查找模块包括:关系判断单元,用于判断第一独立视图和第二独立视图之间是否有直接关系,其中,所述第一独立视图和第二独立视图是所述独立视图集合中的任意两个独立视图;关系查找单元,用于若所述关系判断单元判断为没有直接关系,则查找所述第一独立视图和第二独立视图之间的间接关系;并从查找到的所有关系路径中,找出所述第一独立视图和第二独立视图之间的最短关系路径。
结合第二方面或者第二方面的第一种至第三种可能的实现方式中的任一种,在第四种可能的实现方式中,所述装置还包括:视图创建模块,用于针对多个指定字段新建独立视图,所述新建的独立视图包括:从所述多个指定字段的直接来源视图中复制来的所述指定字段,以及所述指定字段在所述直接来源视图中与其它视图的直接关系。
结合第二方面的第四种可能的实现方式中的任一种,在第五种可能的实现方式中,所述视图创建模块包括:查找单元,用于查找每个指定字段的直接来源视图;以及,查找与找出的直接来源视图存在直接关系的其它视图;复制单元,用于从找出的直接来源视图中,复制所述指定字段以及所述指定字段与其它视图的所有直接关系到新建的独立视图中。
由上可见,本发明实施例采用生成SQL语句时,查找每个字段来源的独立视图,并查找任意两个独立视图之间的最短关系路径,进而根据查找到的独立视图集合及其中任意两个独立视图之间的关系表达式,来生成SQL语句的技术方案,所生成的SQL语句相对于现有技术被大幅度简化,不仅减少了select语句中包含的子查询的数量,还降低了Where语句中关系表达式的复杂度,从而,可以生成最优或接近最优的SQL语句,提升查询性能和查询效率,节省数据库系统的计算和连接资源,并降低损耗,以及简化业务操作步骤,提升开发效率。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例和现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明实施例提供的一种生成SQL语句的方法的示意图;
图2a是本发明一个场景例提供的一种生成SQL语句的方法的示意图;
图2b是本发明一个场景例中多个视图以及相互关系的示意图;
图3是本发明实施例提供的一种生成SQL语句的装置的示意图;
图4是本发明实施例提供的另一种生成SQL语句的装置的示意图;
图5是本发明实施例提供的一种计算机设备的示意图。
具体实施方式
本发明实施例提供一种生成SQL语句的方法和装置,以解决现有技术的SQL语句包括大量子查询,导致语句复杂度很高和损耗很大的技术问题。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
下面通过具体实施例,分别进行详细的说明。
首先对本发明技术方案涉及的数据库系统做简单介绍。所说的数据库系统实质是一个计算机系统,包括构成计算机的硬件和运行在硬件上的操作系统以及运行在操作系统上的应用软件,还包括存储在计算机内的数据库,以及运行在计算机硬件之上的数据库管理系统等。
所说的硬件可包括处理器(例如CPU)和存储器(例如内存),还可以包括输入/输出(I/O,Input/Output)装置,及具有特定处理功能的其它装置,如输入输出内存管理单元(IOMMU,Input/Output Memory Management Unit)等,上述各装置通过通信总线连接。
所说的数据库是指存储在计算机内的,有组织,可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享。数据库中数据的基本存储形式一般是数据表。不同类型的数据一般存放在不同的数据表中。数据库中还存在视图的概念,视图是原始数据库数据的一种变换,是查看数据表中数据的另外一种方式。视图一般是虚表,是从一个或几个基本的数据表(或视图)中导出的表,在数据库中仅存放视图的定义,不存放视图对应的数据,对应的数据仍然存放在所引用的数据表中。当然,数据库中最基本的数据表也可认为是视图。数据库中的数据表和视图的定义等所有数据都存储在计算机的存储器中。
所说的数据库管理系统是数据库系统的核心,对数据库的一切操作,如原始数据的装入、检索、更新、再组织等等,都是在数据库管理系统的调度下进行;数据库管理系统是用户与物理数据库之间的桥梁,根据用户的命令对数据库执行必要的操作。本发明实施例技术方案可具体由数据库管理系统实施。
请参考图1,本发明实施例提供一种生成SQL语句的方法,可包括:
110、查找报表中每个字段的来源,找出包括所述字段的独立视图,找出的所有独立视图组成独立视图集合。
数据库管理系统创建报表或者执行其它业务需要进行数据库查询时,首先需要从数据库中查找需要查询的每个字段的来源视图。
现有技术中,是查找到每个字段的直接来源视图后,就停止查找,后续根据查找到的直接来源视图生成SQL语句。该种查询方式中,查找到的多个视图多是虚表,每个虚表一般都是从多个视图导出的表,而且,虚表相互之间可能没有逻辑关系。这就导致生成的SQL语句中会包含很多子查询,语句复杂,损耗很大。
本发明实施例中,则是查找报表中每个字段的来源,找出包括所述字段的独立视图,而不是在查找到直接来源视图后就停止查找,具体可包括:分析报表中每个字段的表达式,以查找每个字段的来源视图;判断查找到的来源视图是否是独立视图;如果查找到的来源视图是独立视图,则将查找到的独立视图添加到独立视图集合中,同时,可记录查找到的独立视图与字段的对应关系;如果查找到的来源视图不是独立视图,则分析查找到的来源视图中所述字段的表达式,继续递归查找所述字段的来源视图,直到找到的来源视图是独立视图为止。最后,查找到的所有独立视图组成独立视图集合。
其中,本发明实施例中所说的独立视图可以是指以下的几种视图:数据库导入的视图,例如,数据库中存在的基本的数据表;或者,新建的视图,且新建的视图与其它至少一个视图建立有直接关系,则,该新建的视图也可以视为是独立视图;又或者,新建的视图,且新建的视图中有新的聚合方式,例如,增加了求和或其它计算,则,该新建的视图也可以视为是独立视图。
相应的,上述判断查找到的来源视图是否是独立视图可包括:如果查找到的来源视图是数据库导入的视图,则判断查找到的来源视图是独立视图;如果查找到的来源视图是新建的视图,则,判断新建的视图是否与其它视图有直接关系,若有,则判断新建的视图是独立视图;或者,判断新建的视图中是否有新的聚合方式,若有,则判断新建的视图是独立视图。
容易理解,每个字段来源的独立视图,相对于其直接来源视图,与数据库中的数据表的层级更接近,或者说更基本,则,根据查找到的独立视图生成SQL语句,可以减少很多子查询。
120、查找所述独立视图集合中任意两个独立视图之间的最短关系路径,并将所述最短关系路径上的其它独立视图添加到所述独立视图集合中,以及记录任意两个独立视图之间的关系表达式。
独立视图集合中的各个独立视图之间,在语义上通常都是有关系的,即便某些情况下,在逻辑上是没有关系的,但实际上仍有关系。为了避免查询结果出现笛卡尔积,则生成SQL语句之前,必须找出查找到的各个独立视图之间的关系,以便在Where语句中加入限制条件。
本发明实施中,由于查找到的视图是独立视图,与数据表的层级更接近,因此,更容易找出各个独立视图之间的关系。任意两个独立视图之间,往往可能存在多条关系路径,例如,视图A和B之间,可能有直接关系,也可能通过视图C有间接关系,还可能通过视图D和E有间接关系。为了降低where语句中条件表达式的复杂度,本发明实施例中,查找所述独立视图集合中任意两个独立视图之间的最短关系路径,并记录对应的关系表达式,利用最短关系路径的关系表达式来降低where语句中条件表达式的复杂度。
其中,任意两个独立视图的最短关系路径上可能存在其它视图,即,两个独立视图通过其它视图存在间接关系,而该最短关系路径上的其它视图有可能并不存在于上一步骤找出的独立视图集合中,这时候,就必须把最短关系路径上、不存在于独立视图集合中的其它视图也作为独立视图,添加到独立视图集合中,只有这样,才能找出各个独立视图之间全部的关联关系,生成正确的SQL语句,得出正确的查询结果。
本发明一些实施例中,上述查找独立视图集合中任意两个独立视图之间的最短关系路径可包括:判断第一独立视图和第二独立视图之间是否有直接关系,若没有,则查找所述第一独立视图和第二独立视图之间的间接关系;从查找到的所有关系路径中,找出所述第一独立视图和第二独立视图之间的最短关系路径;其中,所述第一独立视图和第二独立视图是所述独立视图集合中的任意两个独立视图。
130、根据所述独立视图集合及其中任意两个独立视图之间的关系表达式,生成SQL语句。
在查找出的独立视图集合和所有关系表达式的基础上,即可根据常规的查询规则,针对所有需要查询的字段,生成相应的SQL语句,利用生成的SQL语句从数据库中查询出所需要的字段,查询结果也可以视为一种视图。对于技术人员,生成SQL语句,得出查询视图就可以结束了;但是,对于企业管理人员,还需要根据查询视图构建出报表或者构建出其他的表示方式,以方便审阅,供企业管理人员进行管理和决策。
本发明一些实施例中,根据用户需求或报表需要,在进行SQL查询的过程中,或者在SQL查询之前,还需要新建一个或多个独立视图。则本发明实施例方法还可包括:针对多个指定字段新建独立视图,所述新建的独立视图包括:从所述多个指定字段的直接来源视图中复制来的所述指定字段,以及所述指定字段在所述直接来源视图中与其它视图的直接关系。该步骤可以在110之前或者130之前执行。
本发明实施例中,新建的独立视图,与现有技术相比不同之处在于,不仅包括从所述多个指定字段的直接来源视图中复制来的所述指定字段,还包括:直接来源视图中的所述指定字段与其它视图的直接关系。通过将前述的直接关系也复制到新建的独立视图中,可以保证视图之间的关系不会丢失,在步骤120中一定会被查询到,而且,可以降低查询难度,缩短关系路径,进而,降低Where语句中关系表达式的复杂度。
本发明一些实施例中,所述针对多个指定字段新建独立视图可包括:查找每个指定字段的直接来源视图;查找与找出的直接来源视图存在直接关系的其它视图;从找出的直接来源视图中,复制所述指定字段以及所述指定字段与其它视图的所有直接关系到新建的独立视图中。
以上,本发明实施例公开了一种生成SQL语句的方法,该方法可在数据库设备或者与数据库设备通信的用户设备上实施。
本发明实施例方法采用生成SQL语句时,查找每个字段来源的独立视图,并查找任意两个独立视图之间的最短关系路径,进而根据查找到的独立视图集合及其中任意两个独立视图之间的关系表达式,来生成SQL语句的技术方案,所生成的SQL语句相对于现有技术被大幅度简化,不仅减少了select语句中包含的子查询的数量,还降低了Where语句中关系表达式的复杂度,从而,可以生成最优或接近最优的SQL语句,提升查询性能和查询效率,节省数据库系统的计算和连接资源,并降低损耗,以及简化业务操作步骤,提升开发效率。
为便于更好的理解本发明实施例提供的技术方案,下面通过一个具体场景下的实施方式为例进行介绍。
请参考图2a,本发明实施例的另一种生成SQL语句的方法。本场景例方法可包括:
201、分析报表中所有字段的表达式,然后遍历每个表达式,找出每个字段的来源视图;
202、判断每个字段的来源视图是否是独立视图,如果不是,继续递归追溯报表字段的来源;
203、如果找出的来源视图是独立视图,则,记录报表字段与找出的独立视图的对应关系,添加该独立视图至独立视图集合;
其中,所说的独立视图是指:数据库导入的视图,例如,数据库中存在的基本的数据表;或者,新建的视图,且新建的视图与其它至少一个视图建立有直接关系;又或者,新建的视图,且新建的视图中有新的聚合方式。
204、遍历独立视图集合,查找任意两个独立视图之间的最短关系路径;具体可包括:分析所有视图两两之间的直接关系,记录关系表达式,若没有直接关系,则分析间接关系,优选找出最短的间接关系路径;
205、判断找出的最短关系路径上的其它视图是否在独立视图集合中,若不在,则添加至独立视图集合中;
206、记录独立视图集合中任意两个独立视图之间的关系表达式;
207、对于报表中的字段,根据找出的独立视图集合以及找出的所有关系表达式,构建SQL语句。
下面以一个具体实例进一步详细说明。
假设需要创建一个报表,该报表由产品名称、产品线名称、销量以及销售员名称这几个字段组成。其中,产品线名称字段来源于产品线表,产品类型名称和产品名称来源于产品信息表,销量来源于销量信息表,销售员名称来源于销售员信息表;并且,产品信息表的字段由产品类型表、产品表字段通过页面拖拽组成;销售信息表由销售表头和销售事实表组成,即,所有字段来源于销售表头和销售事实表;新建逻辑关系如图2b所示。图中,带箭头的连接线段表示建立有直接关系,字符1和n表示是1对多的关系。其中,销售方式表和销售信息表建立有一对多的关系,销售员信息表和销售表头建立有一对多的关系。销售事实表与产品表或产品信息表等有直接或间接关系。
则构建SQL语句的过程如下:
1、分析报表所有字段,找出每个字段来源的独立视图,组建独立视图集合。
报表中的产品名称字段,来源于产品信息表,该产品信息表不是独立视图,此时需要在组成产品信息表的产品表和产品类型表查找产品类型名称,找到产品表中存在该字段,发现产品表是数据库中的数据表,是独立视图,此次查找结束,记录字段和视图名称的对应关系。
产品线名称字段的查找是类似过程,找出产品线表是来源的独立视图。
销售字段,来源于销售信息表,该视图和销售方式表建立了多对一的关系,因此销售信息表为独立视图,直接记录该字段名称和视图名称的对应关系。
销售员名称字段,来源于销售员信息表,该表是从数据库直接导入的,所以是独立视图,接记录该字段名称和视图名称的对应关系。
最终找到的独立视图集合包括:产品表、产品线表、销售信息表、销售员信息表。报表的各个字段分别存在于各自对应的独立视图中,或者说,各个字段在各自对应的独立视图中中有映射字段。
2、寻找独立视图集合中任意两个独立视图之间的最短关系路径。
例如基于上述独立视图集合,需要寻找这些独立视图间的直接或间接关系,直接关系寻找相对简单,这里重要的是间接关系的寻找。例如,产品线表和产品表,二者间没有直接的关系,此时需要查找所有和产品线表关联的表,发现有产品类型表,再递归查找产品类型表和产品表的关联关系,发现存在关系,则独立视图集合中添加视图产品类型表,并记录产品线表和产品类型表的关系表达式、产品类型表和产品表的关系表达式至关系集合中。其它任意两个独立视图之间的关系的查找类似,此处不再一一列举。
3、根据最终查找出的独立视图集合以及所有关系表达式,构建SQL语句。
一些应用场景中,假设销售信息表是新建的逻辑视图,且是独立视图,该视图中的部分字段的直接来源是销售表头,本发明中,需要复制销售表头的直接关系至销售信息表上,例如销售表头与销售员信息表的直接关系到销售信息表上。则,新建的销售信息表与销售员信息表建立起直接关系。
由上可见,本应用场景例中,以创建报表为例,通过分析报表中每个字段隐藏的表达式,递归寻找字段的来源,直至找到存在报表字段映射的独立视图,记录字段和独立视图名称;递归路由查找独立视图间直接或间接关系,记录途径的所有独立视图以及独立视图之间的关系表达式,最后拼接最优或接近最优的SQL语句。其中,新建独立视图时从新建的独立视图所有字段的直接来源视图中,复制所有需要的字段以及直接来源视图的直接关系至新建的独立视图。最终生成的SQL语句相对于现有技术可被大幅度简化,不仅减少了select语句中包含的子查询的数量,还降低了Where语句中关系表达式的复杂度,从而,可以生成最优或接近最优的SQL语句,提升查询性能和查询效率,节省数据库系统的计算和连接资源,并降低损耗,以及简化业务操作步骤,提升开发效率。
为了更好的实施本发明实施例的上述方案,下面还提供用于配合实施上述方案的相关装置。
请参考图3,本发明实施例提供一种生成SQL语句的装置300,可包括:
视图查找模块310,用于查找报表中每个字段的来源,找出包括所述字段的独立视图,找出的所有独立视图组成独立视图集合;
关系查找模块320,用于查找所述独立视图集合中任意两个独立视图之间的最短关系路径,并将所述最短关系路径上的其它独立视图添加到所述独立视图集合中,以及记录任意两个独立视图之间的关系表达式;
语句生成模块330,用于根据所述独立视图集合及其中任意两个独立视图之间的关系表达式,生成SQL语句。
在本发明的一些实施例中,所述视图查找模块310可包括:
分析查找单元,用于分析报表中每个字段的表达式,以查找每个字段的来源视图;
视图判断单元,用于判断查找到的来源视图是否是独立视图;
记录处理单元,用于如果所述视图判断单元判断查找到的来源视图是独立视图,则将查找到的独立视图添加到独立视图集合中;
所述分析查找单元,还用于如果所述视图判断单元判断查找到的来源视图不是独立视图,则分析查找到的来源视图中所述字段的表达式,继续递归查找所述字段的来源视图,直到所述视图判断单元判断查找到的来源视图是独立视图为止。
在本发明的一些实施例中,所述视图判断单元,具体用于如果所述分析查找单元查找到的来源视图是数据库导入的视图,则判断查找到的来源视图是独立视图;如果所述分析查找单元查找到的来源视图是新建的视图,则,判断新建的视图是否与其它视图有直接关系,若有,则判断新建的视图是独立视图;或者,判断新建的视图中是否有新的聚合方式,若有,则判断新建的视图是独立视图。
在本发明的一些实施例中,所述关系查找模块320可包括:
关系判断单元,用于判断第一独立视图和第二独立视图之间是否有直接关系,其中,所述第一独立视图和第二独立视图是所述独立视图集合中的任意两个独立视图;
关系查找单元,用于若所述关系判断单元判断为没有直接关系,则查找所述第一独立视图和第二独立视图之间的间接关系;并从查找到的所有关系路径中,找出所述第一独立视图和第二独立视图之间的最短关系路径。
请参考图4,在本发明的一些实施例中,所述装置还可以包括:
视图创建模块340,用于针对多个指定字段新建独立视图,所述新建的独立视图包括:从所述多个指定字段的直接来源视图中复制来的所述指定字段,以及所述指定字段在所述直接来源视图中与其它视图的直接关系。
在本发明的一些实施例中,所述视图创建模块340可包括:
查找单元,用于查找每个指定字段的直接来源视图;以及,查找与找出的直接来源视图存在直接关系的其它视图;
复制单元,用于从找出的直接来源视图中,复制所述指定字段以及所述指定字段与其它视图的所有直接关系到新建的独立视图中。
本发明实施例生成SQL语句的装置例如可以是计算机设备如数据库系统。本发明实施例生成SQL语句的装置,具体可对应于数据库系统中的数据库管理系统,换言之,所述生成SQL语句的装置可部署在数据库管理系统中。
可以理解,本发明实施例装置的各个功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述方法实施例中的相关描述,此处不再赘述。
由上可见,在本发明的一些可行的实施方式中,采用生成SQL语句时,查找每个字段来源的独立视图,并查找任意两个独立视图之间的最短关系路径,进而根据查找到的独立视图集合及其中任意两个独立视图之间的关系表达式,来生成SQL语句的技术方案,所生成的SQL语句相对于现有技术被大幅度简化,不仅减少了select语句中包含的子查询的数量,还降低了Where语句中关系表达式的复杂度,从而,可以生成最优或接近最优的SQL语句,提升查询性能和查询效率,节省数据库系统的计算和连接资源,并降低损耗,以及简化业务操作步骤,提升开发效率。
本发明实施例还提供一种计算机存储介质,该计算机存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的生成SQL语句的方法的部分或全部步骤。
请参考图5,本发明实施例还提供一种计算机设备500,可包括:
处理器510,存储器520,通信接口530,总线540;所述处理器510,存储器520,通信接口530通过所述总线540相互的通信;所述通信接口530,用于接收和发送数据;所述存储器520用于存储数据和程序;所述处理器510用于执行所述存储器中的所述程序。所述存储器520中具体存储有数据库,或者说,数据库中的数据表等所有数据存储在存储器520中,供处理器510调用。处理器510执行存储器520中存储的程序时,所述计算机500执行如图1实施例所示的生成SQL语句的方法。
具体的,处理器510执行如下步骤:
查找报表中每个字段的来源,找出包括所述字段的独立视图,找出的所有独立视图组成独立视图集合;查找所述独立视图集合中任意两个独立视图之间的最短关系路径,并将所述最短关系路径上的其它独立视图添加到所述独立视图集合中,以及记录任意两个独立视图之间的关系表达式;根据所述独立视图集合及其中任意两个独立视图之间的关系表达式,生成SQL语句。
在本发明的一些实施例中,处理器510查找报表中每个字段的来源,找出包括所述字段的独立视图包括:分析报表中每个字段的表达式,以查找每个字段的来源视图;判断查找到的来源视图是否是独立视图;如果查找到的来源视图是独立视图,则将查找到的独立视图添加到独立视图集合中;如果查找到的来源视图不是独立视图,则分析查找到的来源视图中的所述字段的表达式,继续递归查找所述字段的来源视图,直到找到的来源视图是独立视图为止。
在本发明的一些实施例中,处理器510判断查找到的来源视图是否是独立视图包括:如果查找到的来源视图是数据库导入的视图,则判断查找到的来源视图是独立视图;如果查找到的来源视图是新建的视图,则,判断新建的视图是否与其它视图有直接关系,若有,则判断新建的视图是独立视图;或者,判断新建的视图中是否有新的聚合方式,若有,则判断新建的视图是独立视图。
在本发明的一些实施例中,处理器510查找所述独立视图集合中任意两个独立视图之间的最短关系路径包括:判断第一独立视图和第二独立视图之间是否有直接关系,若没有,则查找所述第一独立视图和第二独立视图之间的间接关系;从查找到的所有关系路径中,找出所述第一独立视图和第二独立视图之间的最短关系路径;其中,所述第一独立视图和第二独立视图是所述独立视图集合中的任意两个独立视图。
在本发明的一些实施例中,处理器510还可以执行如下步骤:针对多个指定字段新建独立视图,所述新建的独立视图包括:从所述多个指定字段的直接来源视图中复制来的所述字段,以及所述指定字段在所述直接来源视图中与其它视图的直接关系。
在本发明的一些实施例中,处理器510针对多个指定字段新建独立视图包括:查找每个指定字段的直接来源视图;查找与找出的直接来源视图存在直接关系的其它视图;从找出的直接来源视图中,复制所述指定字段以及所述指定字段与其它视图的所有直接关系到新建的独立视图中。
由上可见,在本发明的一些可行的实施方式中,采用生成SQL语句时,查找每个字段来源的独立视图,并查找任意两个独立视图之间的最短关系路径,进而根据查找到的独立视图集合及其中任意两个独立视图之间的关系表达式,来生成SQL语句的技术方案,所生成的SQL语句相对于现有技术被大幅度简化,不仅减少了select语句中包含的子查询的数量,还降低了Where语句中关系表达式的复杂度,从而,可以生成最优或接近最优的SQL语句,提升查询性能和查询效率,节省数据库系统的计算和连接资源,并降低损耗,以及简化业务操作步骤,提升开发效率。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
以上对本发明实施例所提供的一种生成SQL语句的方法和装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1.一种生成结构化查询语言SQL语句的方法,其特征在于,包括:
查找报表中每个字段的来源,找出包括所述字段的独立视图,找出的所有独立视图组成独立视图集合;
查找所述独立视图集合中任意两个独立视图之间的最短关系路径,并将所述最短关系路径上的其它独立视图添加到所述独立视图集合中,以及记录任意两个独立视图之间的关系表达式;
根据所述独立视图集合及其中任意两个独立视图之间的关系表达式,生成SQL语句。
2.根据权利要求1所述的方法,其特征在于,所述查找报表中每个字段的来源,找出包括所述字段的独立视图包括:
分析报表中每个字段的表达式,以查找每个字段的来源视图;
判断查找到的来源视图是否是独立视图;
如果查找到的来源视图是独立视图,则将查找到的独立视图添加到独立视图集合中;
如果查找到的来源视图不是独立视图,则分析查找到的来源视图中的所述字段的表达式,继续递归查找所述字段的来源视图,直到查找到的来源视图是独立视图为止。
3.根据权利要求2所述的方法,其特征在于,所述判断查找到的来源视图是否是独立视图包括:
如果查找到的来源视图是数据库导入的视图,则判断查找到的来源视图是独立视图;
如果查找到的来源视图是新建的视图,则,判断所述新建的视图是否与其它视图有直接关系,若有,则判断所述新建的视图是独立视图;或者,判断所述新建的视图中是否有新的聚合方式,若有,则判断所述新建的视图是独立视图。
4.根据权利要求1所述的方法,其特征在于,所述查找所述独立视图集合中任意两个独立视图之间的最短关系路径包括:
判断第一独立视图和第二独立视图之间是否有直接关系,若没有,则查找所述第一独立视图和第二独立视图之间的间接关系;从查找到的所有关系路径中,找出所述第一独立视图和第二独立视图之间的最短关系路径;其中,所述第一独立视图和第二独立视图是所述独立视图集合中的任意两个独立视图。
5.根据权利要求1所述的方法,其特征在于,还包括:
针对多个指定字段新建独立视图,所述新建的独立视图包括:从所述多个指定字段的直接来源视图中复制来的所述指定字段,以及所述指定字段在所述直接来源视图中与其它视图的直接关系。
6.根据权利要求5所述的方法,其特征在于,所述针对多个指定字段新建独立视图包括:
查找每个指定字段的直接来源视图;
查找与找出的直接来源视图存在直接关系的其它视图;
从找出的直接来源视图中,复制所述指定字段以及所述指定字段与其它视图的所有直接关系到新建的独立视图中。
7.一种生成结构化查询语言SQL语句的装置,其特征在于,包括:
视图查找模块,用于查找报表中每个字段的来源,找出包括所述字段的独立视图,找出的所有独立视图组成独立视图集合;
关系查找模块,用于查找所述独立视图集合中任意两个独立视图之间的最短关系路径,并将所述最短关系路径上的其它独立视图添加到所述独立视图集合中,以及记录任意两个独立视图之间的关系表达式;
语句生成模块,用于根据所述独立视图集合及其中任意两个独立视图之间的关系表达式,生成SQL语句。
8.根据权利要求7所述的装置,其特征在于,所述视图查找模块包括:
分析查找单元,用于分析报表中每个字段的表达式,以查找每个字段的来源视图;
视图判断单元,用于判断查找到的来源视图是否是独立视图;
记录处理单元,用于如果所述视图判断单元判断查找到的来源视图是独立视图,则将查找到的独立视图添加到独立视图集合中;
所述分析查找单元,还用于如果所述视图判断单元判断查找到的来源视图不是独立视图,则分析查找到的来源视图中所述字段的表达式,继续递归查找所述字段的来源视图,直到所述视图判断单元判断查找到的来源视图是独立视图为止。
9.根据权利要求8所述的装置,其特征在于:
所述视图判断单元,具体用于如果所述分析查找单元查找到的来源视图是数据库导入的视图,则判断查找到的来源视图是独立视图;如果所述分析查找单元查找到的来源视图是新建的视图,则,判断所述新建的视图是否与其它视图有直接关系,若有,则判断所述新建的视图是独立视图;或者,判断所述新建的视图中是否有新的聚合方式,若有,则判断所述新建的视图是独立视图。
10.根据权利要求7所述的装置,其特征在于,所述关系查找模块包括:
关系判断单元,用于判断第一独立视图和第二独立视图之间是否有直接关系,其中,所述第一独立视图和第二独立视图是所述独立视图集合中的任意两个独立视图;
关系查找单元,用于若所述关系判断单元判断为没有直接关系,则查找所述第一独立视图和第二独立视图之间的间接关系;并从查找到的所有关系路径中,找出所述第一独立视图和第二独立视图之间的最短关系路径。
11.根据权利要求7所述的装置,其特征在于,还包括:
视图创建模块,用于针对多个指定字段新建独立视图,所述新建的独立视图包括:从所述多个指定字段的直接来源视图中复制来的所述指定字段,以及所述指定字段在所述直接来源视图中与其它视图的直接关系。
12.根据权利要求11所述的装置,其特征在于,所述视图创建模块包括:
查找单元,用于查找每个指定字段的直接来源视图;以及,查找与找出的直接来源视图存在直接关系的其它视图;
复制单元,用于从找出的直接来源视图中,复制所述指定字段以及所述指定字段与其它视图的所有直接关系到新建的独立视图中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410276540.2A CN104050264A (zh) | 2014-06-19 | 2014-06-19 | 一种生成sql语句的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410276540.2A CN104050264A (zh) | 2014-06-19 | 2014-06-19 | 一种生成sql语句的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104050264A true CN104050264A (zh) | 2014-09-17 |
Family
ID=51503096
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410276540.2A Pending CN104050264A (zh) | 2014-06-19 | 2014-06-19 | 一种生成sql语句的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104050264A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106484699A (zh) * | 2015-08-25 | 2017-03-08 | 北京国双科技有限公司 | 数据库查询字段的生成方法及装置 |
CN107066499A (zh) * | 2016-12-30 | 2017-08-18 | 江苏瑞中数据股份有限公司 | 面向异构存储多源数据管理及可视化系统的数据查询方法 |
CN108509637A (zh) * | 2018-04-10 | 2018-09-07 | 口碑(上海)信息技术有限公司 | 数据表关联查询方法及装置 |
CN111552792A (zh) * | 2020-04-30 | 2020-08-18 | 中国建设银行股份有限公司 | 一种信息查询方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050076045A1 (en) * | 2001-03-19 | 2005-04-07 | Pal Stenslet | Method and system for handling multiple dimensions in relational databases |
CN1786950A (zh) * | 2004-12-06 | 2006-06-14 | 国际商业机器公司 | 处理抽象查询的方法和系统 |
CN101067814A (zh) * | 2007-05-10 | 2007-11-07 | 浪潮集团山东通用软件有限公司 | 数据访问层Xml格式数据与关系数据间的映射转换方法 |
CN102402626A (zh) * | 2011-12-28 | 2012-04-04 | 用友软件股份有限公司 | 版本继承数据的动态查询系统和方法 |
-
2014
- 2014-06-19 CN CN201410276540.2A patent/CN104050264A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050076045A1 (en) * | 2001-03-19 | 2005-04-07 | Pal Stenslet | Method and system for handling multiple dimensions in relational databases |
CN1786950A (zh) * | 2004-12-06 | 2006-06-14 | 国际商业机器公司 | 处理抽象查询的方法和系统 |
CN101067814A (zh) * | 2007-05-10 | 2007-11-07 | 浪潮集团山东通用软件有限公司 | 数据访问层Xml格式数据与关系数据间的映射转换方法 |
CN102402626A (zh) * | 2011-12-28 | 2012-04-04 | 用友软件股份有限公司 | 版本继承数据的动态查询系统和方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106484699A (zh) * | 2015-08-25 | 2017-03-08 | 北京国双科技有限公司 | 数据库查询字段的生成方法及装置 |
CN106484699B (zh) * | 2015-08-25 | 2020-04-17 | 北京国双科技有限公司 | 数据库查询字段的生成方法及装置 |
CN107066499A (zh) * | 2016-12-30 | 2017-08-18 | 江苏瑞中数据股份有限公司 | 面向异构存储多源数据管理及可视化系统的数据查询方法 |
CN108509637A (zh) * | 2018-04-10 | 2018-09-07 | 口碑(上海)信息技术有限公司 | 数据表关联查询方法及装置 |
CN111552792A (zh) * | 2020-04-30 | 2020-08-18 | 中国建设银行股份有限公司 | 一种信息查询方法、装置、电子设备及存储介质 |
CN111552792B (zh) * | 2020-04-30 | 2023-11-21 | 中国建设银行股份有限公司 | 一种信息查询方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9672272B2 (en) | Method, apparatus, and computer-readable medium for efficiently performing operations on distinct data values | |
US20170139991A1 (en) | Dynamic query plan based on skew | |
CN110609902A (zh) | 一种基于融合知识图谱的文本处理方法及装置 | |
RU2614933C2 (ru) | Способ и устройство для поиска информации на электронной коммерческой платформе | |
US9201700B2 (en) | Provisioning computer resources on a network | |
US10496645B1 (en) | System and method for analysis of a database proxy | |
CN104408171A (zh) | 单据子表行关联查询装置和方法 | |
US11720543B2 (en) | Enforcing path consistency in graph database path query evaluation | |
Sarma et al. | Uncertainty in data integration and dataspace support platforms | |
CN105518669A (zh) | 数据模型改变管理 | |
TW202004526A (zh) | 基於行動端NoSQL資料庫的索引建立方法及裝置 | |
CN104050264A (zh) | 一种生成sql语句的方法和装置 | |
CN105760418B (zh) | 用于对关系数据库表进行交叉列搜索的方法和系统 | |
CN109885585A (zh) | 支持存储过程、触发器与视图的分布式数据库系统和方法 | |
US11010380B2 (en) | Minimizing processing using an index when non-leading columns match an aggregation key | |
US20190303478A1 (en) | Path query evaluation in graph databases | |
US20220027358A1 (en) | Object relational mapping with a single database query | |
CN110765100B (zh) | 标签的生成方法、装置、计算机可读存储介质及服务器 | |
Hwang et al. | A selection method of database system in Bigdata environment: a case study from smart education service in Korea | |
CN111984745A (zh) | 数据库字段动态扩展方法、装置、设备及存储介质 | |
US11423098B2 (en) | Method and apparatus to generate a simplified query when searching for catalog items | |
CN105518671A (zh) | 在数据存储系统上管理多个数据模型 | |
CN114860851A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN108241624A (zh) | 一种查询脚本的生成方法及装置 | |
US9886520B2 (en) | Exposing relationships between universe objects |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140917 |