首页 > 范文大全 > 正文

复杂查询数据库数据的方法初探

开篇:润墨网以专业的文秘视角,为您筛选了一篇复杂查询数据库数据的方法初探范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

【摘 要】数据库应用系统中数据的复杂查询问题,长期困扰着使用者和开发者。本文通过具体问题,论述了实现复杂查询的方法,同时论证了各种方法的特点及适用范围。

【关键词】查询;动态;数据窗口

当今数据库技术已成为计算机应用的核心技术,可以认为当今任何计算机信息系统和计算机应用系统都与数据库的应用分不开,数据库已成为其核心和基础。建立数据库应用系统是要充分利用数据库中的数据。对数据库中的数据进行的操作除增加、更改和删除外,最常用,也是重要的是查询操作。即便是最简单的数据库应用系统,也离不开查询功能,查询可以说是进行数据管理的重要手段,不过也是数据库应用系统开发过程中较困难、花时间、有一定难度的部分。

1. 问题的描述

某单位根据上级部门的要求建立人员信息管理应用系统,它是人事管理信息系统的子系统。人员信息管理系统是对人员所有信息的全面管理,包括:基本信息、培训或进修信息、履历信息、工资变动信息、离退信息、家庭成员及社会关系信息等等。

在应用中为保证数据的规范化,需充分利用国际代码和组标代码,这样做也可以节省存储空间。将这些代码表建成数据库中的静态表,包括:性别(GB2261)、籍贯(ZB01)、民族(GB3304)、婚姻状况(GB4766)、政治面貌(GB4762)、学历(GB4658)、工资变动文件(ZB52)和离退状态(GB12405)。它们的结构基本相同,每个表中都有两个字段,分别存储代码及内容。 这些代码表一旦建立,表中数据对应用来讲是相对不变的,所以称为静态表。在需要的时候,静态表的数据可以修改,一般放在维护中进行。

2.使用SQL语句

SQL查询语句只使用命令动词:SELECT但这种方法要求操作者对数据库的结构有充分的了解,对用户即使了解SQL语法,也只能完成简单的查询,对复杂的查询工作简直是望尘莫及了。也就是说单单是SQL语句,并不能很好地完成数据库的复杂查询,必须要与其他技术配合使用。另外,使用SQL语句进行查询,只能直接反映每一列的信息,而我们的基本表是尽可能地保存代码以保证数据的规范且节约存储空间。也就是说,我们能得到准确的查询结果,但得到地却是整篇的代码,这对开发者和使用者都难以接受。如果能够将整篇的代码自动转换成所表达的文字,那当然是再好不过了。

3. 借助PowerBuilder实现综合信息的查询

目前,随着工具软件的发展和广泛采用,使数据库应用系统的开发如虎添翼,其中PowerBuilder以其独特的数据窗口(DataWindow)倍受欢迎。利用PowerBuilder提供的内部查询机制,我们即可以让数据窗口作为查询条件的输入,又可以让该数据窗口作为查询结果的输出,这样就可以使数据窗口中的所有数据项进行自由组合的查询。事实上条件的输入及元组的显示完全可以在一个数据窗口中实现,考虑到这两种操作的差别,将其用两个数据窗口控制来实现。这就要求dw_2与dw_1数据共享,即要求dw_que1与dw_que2两数据窗口的数据源完全相同,用这种方法实现查询优点突出,注意:这要事先建好下拉式数据窗口。设置数据窗口中对应列的编辑风格同样可满足其它显示需要。利用数据窗口的风格特点:查询表的列宽、列序可自由改变,甚至可以覆盖掉一些列,以达到更满足查询显示的需要。

综合查询的信息来自多个表,改变数据窗口的数据源,采用多表连接的数据源即可实现。但是如我们问题的描述,如果我们需要的查询项随机地来自这些表中的数据项,显示项也是随机地。这种任意条件的组合,可选输出项的显示称为动态查询(Dynamic Query)依然采用上述方法,数据窗口dw_que1与dw_que2的数据源将是这些表的连接,先不说效率问题,单从这426个项中输入查询条件,又显示这426个项,就使人敬而远之。因为,在每一次查询前,都不了解此次查询的要求是什么,这样,每张表中的每一个数据项都缺一不可;另一方面,每一次的查询,一旦查询条件确定、显示条目也确定后,我们会发现,每一次有意义的查询并不是需要全部的些表,换言之,每一次查询没有必要将些表全部连结,而应只连接那些被选中数据项所在的表,即数据源是动态产生的。由于数据源不确定,数据窗口就无法设计,动态查询无法用这种方法实现。

4. 动态查询的实现

在某些实际的应用系统开发中,由于用户在开发前提不出查询的需求,而在系统运行中希望能够对所有的数据项任意组合进行查询,以满足来自多方的需求,实现动态地查询(即随机地从些表中选择数据项进行组合作为查询条件并任意地选择数据项作为显示条目)。对于此类查询的实现要利用PowerBuilder通过编程的方式在运行时动态地创建数据窗口,并动态地控制数据窗口。

动态地创建一个数据窗口,应用程序需要执行下列任务:

・动态地构造SQL语句。

・用符合数据窗口语法的字符串,为现在的数据窗口控制创建一个数据窗口对象。具体实现如下:

1)动态地生成SQL语句,根据SQL的语法:SELECT stringa

FROM stringb

WHERE stringc

也就是动态地生成 stringa, stringb, stringc.由用户输入要显示的列,一旦输入完毕,列名就随之确定,将所有列名拼成一个“串”,中间用“,”分隔,形如“columm1,column2,column3,...,columnr”,则动态地生成stringa;同样由用户输入查询条件,包括相应的列、满足的条件或范围、逻辑关系等,将这些条件拚成一个串,即为stringc,显然,所有的列名都确定了,他们所在的表名也确定了,按照stringb的语法规则即可构造。注意:上面的stringc由两部分(表间关系stringc1及查询条件stringc2)组成;表名串stringb与表间关系stringc1、查询条件stringc2及显示条目stringa均有关。

在实现的过程中:为贴近实际应用,习惯上,先输入查询条件,再输入显示条目。即在输入查询条件后,生成strinc2,stringb,stringc1;然后,再在输入显示条目后生成stringa,并修改stringc1,stringb。最后形成SQL语法:

str="select"+stringa+"from"+stringb+"where"+stringcl+stringc2

2)在现在的事物对象里利用相关的SyntaxFromSQL()函数生成符合数据窗口语法的字符串:

exp=syntaxfromsq1(sq1ca,str,strsty,error)生成数据窗口的源代码

其中:strsty为数据窗口的显示风格,例:

strsty="style(type=grid)datawindow(units=lcolor=12632256)text(font.face='system')"

3) 创建数据窗口对象

dw_que.create(exp)这样就实现了用户要求的随机查询,在真实系统中,用户在输入查询条件时希望通过选项方式录入查询信息,由于库表中存放的大量信息为代码,这就需要在程序中先把录入的文字信息转化成相应的代码再连接到查询条件中。为简化输入,提高准确性,可采用代码输入,即动态地嵌套下拉式数据窗口。在显示查询结果的数据窗口中,事先不能嵌套下拉式数据窗口,可预先做一个函数,在程序运行中根据所选的列把代码转化成所对应的汉字显示,这样更完善了用户要求的随机查询。根据数据窗口的动态特性,对于那些运行时才能确定的数据窗口采用动态方式创建,使应用程序能更灵活地满足用户的需求。

5. 小结

使用SQL语句是查询操作的基础,但如何根据查询的要求自动的构造最贴切的SQL语句是问题的关键。利用PowerBuilder中的数据窗口使问题简化,如何通过嵌入动态生成的SQL语句动态地生成数据窗口是解决问题的根本。将查询条件的输入实现多级菜单选择将查询结果文字化,使复杂查询问题解决得更完善。动态查询的方法,不仅能应用于人事管理信息系统,同时也是解决其他需要复杂查询的数据库应用系统的途径。这种动态查询方法的在数据库应用系统的使用,避免了应用系统开发中开发者冥思苦想所有可能的查询条件,而系统运行中用户总遇到有些查询要求无法满足的矛盾。动态查询的实现,缩短了开发周期,减少了产品维护的工作。

参考文献:

[1]柯建勋 蔡毅《Power builder 8.0 基础篇》清华大学出版社.

[2]伍俊良《Powerbuilder 课程设计与系统开发案例》清华大学出版社.