利用工具进行数据库数据的复杂查询.docx
- 文档编号:1621315
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:5
- 大小:19.92KB
利用工具进行数据库数据的复杂查询.docx
《利用工具进行数据库数据的复杂查询.docx》由会员分享,可在线阅读,更多相关《利用工具进行数据库数据的复杂查询.docx(5页珍藏版)》请在冰豆网上搜索。
利用工具进行数据库数据的复杂查询
利用工具进行数据库数据的复杂查询
摘要:
数据库应用系统中数据的复杂查询问题,长期困扰着使用者和开发者。
本文通过具体问题,论述了实现复杂查询的方法,同时论证了各种方法的特点及适用范围。
关键词:
查询动态数据窗口
当今数据库技术已成为计算机应用的核心技术,可以认为当今任何计算机信息系统和计算机应用系统都与数据库的应用分不开,数据库已成为其核心和基础。
建立数据库应用系统是要充分利用数据库中的数据。
对数据库中的数据进行的操作除增加(Insert)、更改(update)和删除(delete)外,最常用,也是重要的是查询操作。
即便是最简单的数据库应用系统,也离不开查询功能,查询可以说是进行数据管理的重要手段,不过也是数据库应用系统开发过程中较困难、花时间、有一定难度的部分。
1.问题的描述
某单位根据上级部门的要求建立人员信息管理应用系统,它是人事管理信息系统(PersonnelManagementInformationSystem)的子系统。
人员信息管理系统是对人员所有信息的全面管理,包括:
基本信息、培训或进修信息、履历信息、工资变动信息、离退信息、家庭成员及社会关系信息等等。
根据中共中央组织部颁布的全国组织、干部、人事管理信息系统信息结构体系的要求,对人员的信息描述共有43个信息集(对应43张表),426个数据项,本文根据数据库设计的要求进行加工,只列出3张表(table)。
1)表名:
基本信息编码:
personnel
主码字段编码数据类型长度字段名称
personnel_idchar9人员代码
namevarchar20姓名
sexchar1性别
birthdaydatetime出生日期
native_placechar6籍贯
nationalitychar2民族
marriagechar1婚姻状况
workdaydatetime参加工作时间
partychar2政治面貌
graduatonchar2学历
departmentchar30所在单位
identificationchar15身份证号
cul_fieldchar6培训专业
(2)表名:
工资变动信息编码:
wages
主码外码字段编码数据类型长度字段名称
**personnel_idchar9人员代码
sa_idchar3人员内码
change_daydatetime工资变动日期
sa_file_numchar3工资变动文件
salarymoney工资
3)表名:
离退信息编码:
retirement
主码外码字段编码数据类型长度字段名称
**personnel_idchar9人员代码
ret_daydatetime离退日期
rel_stylechar2离退类别
paymoney离退休费
commenttext离退说明
在应用中为保证数据的规范化,需充分利用国际代码和组标代码,这样做也可以节省存储空间。
将这些代码表建成数据库中的静态表,包括:
性别(GB2261)、籍贯(ZB01)、民族(GB3304)、婚姻状况(GB4766)、政治面貌(GB4762)、学历(GB4658)、工资变动文件(ZB52)和离退状态(GB12405)。
它们的结构基本相同,每个表中都有两个字段,分别存储代码及内容。
以性别为例:
表名:
性别编码:
GB2261
字段编码数据类型长度字段名称
-------------------------------
codechar2代码
commentchar4内容
表中数据:
codecomment
----------------
男性
女性
这些代码表一旦建立,表中数据对应用来讲是相对不变的,所以称为静态表。
在需要的时候,静态表的数据可以修改,一般放在维护中进行。
当这些静态表建成后,可得到完善的人员信息管理系统的数据模型,
2.使用SQL语句
SQL(StructuredQueryLanguage)语言是1974年由Boyce和Chamberlin提出的,并在IBM公司SanJoseResearchLaboratory研制的SystemR上实现了这种语言。
由于它功能丰富,语言简洁,使用方式灵活而倍受青睐,并扎根于计算机工业界及计算机用户。
SQL是集数据操纵(DataManipulation)、数据定义(DataDefinition)与数据
控制(DataControl)为一体的关系数据语言。
查询是数据操纵语言中最主要的部分。
从SQL的英文名称:
结构化的查询语言,即能看出SQL在查询中的贡献,可以说数据库查询语句是SQL语言的核心。
SQL查询语句只使用命令动词,SELECT
一般格式:
SELECT〈目标列〉
FROM〈基本表(或视图)〉
[WHERE〈条件表达式〉]
[GROUPBY〈列名1〉[HAVING〈内部函数表达式〉]]
[ORDERBY〈列名2〉ASC|DESC]
格式说明:
〈〉中的内容为根据需要的具体内容;[]中的内容为可选项。
语句含义:
根据WHERE子句中的条件表达式,从基本表(或视图)中找出满足条件的元组,按SELECT子句中的目标列,选出元组中的分量形成表。
GROUP子句将结果按列名1分组,每个组产生结果表中的一个元组;ORDER子句使结果表按列名2升序或降序排列。
这是最基本的方法,只要能够对库操作,就可以实施所需要的查询。
例如:
想了解所有离退休人员的基本情况及他们的离退休费,可以键入如下语句:
SELECTDISTINCT_id,name,sex,
birthday,workday,
FROMpersonnel,retirement
WHERE_id=_id
执行后得到下列列表,显示所需信息:
personnel_idnamesexbirthdayworkdaypay
-------------------------------------------
1林立兰11919/03/211994/05/061,
13安静21935/05/041954/11/13
2付石龙11928/03/211935/05/06
5魏芳21917/05/211933/05/21
8李四11939/05/311960/07/131,
9王丽立11917/05/211933/05/21
但这种方法要求操作者对数据库的结构有充分的了解,例此数据库有多少个表,有多少个数据项,这些数据项分别属于哪一个表等。
显然,这是数据库管理员的工作范畴。
对用户,即使了解SQL语法,也只能完成简单的查询,对复杂的查询工作简直是望尘莫及了。
也就是说单单是SQL语句,并不能很好地完成数据库的复杂查询,必须要与其他技术配合使用。
另外,使用SQL语句进行查询,只能直接反映每一列的信息,而我们的43张基本表是尽可能地保存代码以保证数据的规范且节约存储空间。
也就是说,我们能得到准确的查询结果,但得到地却是整篇的代码(例上表中的sex列),这对开发者和使用者都难以接受。
如果能够将整篇的代码自动转换成所表达的文字,那当然是再好不过了。
3.借助PowerBuilder实现综合信息的查询
目前,随着工具软件的发展和广泛采用,使数据库应用系统的开发如虎添翼,其中PowerBuilder以其独特的数据窗口(DataWindow)倍受欢迎。
PowerBuider是美国着名的数据库应用开发工具生产厂家Powersoft公司于1991年6月推出的功能强大、性能优异的开发工具,它是一种面向对象的、具有可视图形界面的、快速的交互开发工具。
智能化的数据窗口对象是其精华所在。
利用此对象可以操作关系数据库的数据而无需写入SQL语句,即可以直接检索、更新和用多种形式表现数据源中的数据。
但要注意,必须使数据窗口成为窗口(Window)下数据窗口控制的一个连接对象,数据窗口才能使用户在应用执行期间访问数据库中的数据。
利用PowerBuilder提供的内部查询机制,我们即可以让数据窗口作为查询条件的输入,又可以让该数据窗口作为查询结果的输出,这样就可以使数据窗口中的所有数据项进行自由组合的查询。
例如:
在窗口W_que上建立两个数据窗口控制dw_1和dw_2,分别连接两个数据窗口对象dw_que1与dw_que2,其中dw_1用于输入查询条件,而dw_2用于显示满足查询条件的所有元组。
事实上条件的输入及元组的显示完全可以在一个数据窗口中实现,考虑到这两种操作的差别(例:
条件输入可编辑,而元组显示不可编辑;条件输入可为某一范围,而元组显示仅为满足条件的所有纪录……)将其用两个数据窗口控制来实现。
这就要求dw_2与dw_1数据共享,即要求dw_que1与dw_que2两数据窗口的数据源完全相同,如图2所示。
用这种方法实现查询优点突出,例:
通过设置数据窗口中对应列的编辑风格(
EditStyles)为相应的下拉式数据窗口(DropDownDataWindow),使显示的元组文字化。
注意,这要事先建好下拉式数据窗口。
设置数据窗口中对应列的编辑风格同样可满足其它显示需要。
利用数据窗口的风格特点:
查询表的列宽、列序可自由改变,甚至可以覆盖掉一些列,以达到更满足查询显示的需要。
综合查询的信息来自多个表,改变数据窗口的数据源,采用多表连接的数据源即可实现。
但是如我们问题的描述,如果我们需要的查询项随机地来自这43张表中的数据项,显示项也是随机地。
这种任意条件的组合,可选输出项的显示称为动态查询(DynamicQuery)依然采用上述方法,数据窗口dw_que1与dw_que2的数据源将是这43张表的连接,先不说效率问题,单从这426个项中输入查询条件,又显示这426个项,就使人敬而远之。
因为,在每一次查询前,都不了解此次查询的要求是什么,这样,每张表中的每一个数据项都缺一不可;另一方面,每一次的查询,一旦查询条件确定、显示条目也确定后,我们会发现,每一次有意义的查询并不是需要全部的43张表,换言之,每一次查询没有必要将43张表全部连结,而应只连接那些被选中数据项所在的表,即数据源是动态产生的。
由于数据源不确定,数据窗口就无法设计,动态查询无法用这种方法实现。
4.动态查询的实现
在某些实际的应用系统开发中,由于用户在开发前提不出查询的需求,而在系统运行中希望能够对所有的数据项任意组合进行查询,以满足来自多方的需求,实现动态地查询(即随机地从43张表中选择数据项进行组合作为查询条件并任意地选择数据项作为显示条目)。
对于此类查询的实现要利用PowerBuilder通过编程的方式在运行时动态地创建数据窗口,并动态地控制数据窗口。
动态地创建一个数据窗口,应用程序需要执行下列任务:
·动态地构造SQL语句。
·用符合数据窗口语法的字符串,为现在的数据窗口控制创建一个数据窗口对象。
具体实现
1)动态地生成SQL语句,根据SQL的语法:
SELECTstringa
FROMstringb
WHEREstringc
也就是动态地生成stringa,stringb,stringc.由用户输入要显示的列,一旦输入完毕,列名就随之确定,将所有列名拼成一个“串”,中间用“,”分隔,形如“columm1,column2,column3,...,columnr”,则动态地生成stringa;同样由用户输入查询条件,包括相应的列、满足的条件或范围、逻辑关系等,将这些条件拚成一个串,即为stringc,显然,所有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 工具 进行 数据库 数据 复杂 查询