版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、利用工具进行数据库数据的复杂查询摘要: 数据库应用系统中数据的复杂查询问题,长期困扰着使用者和开发者。本文通过具体问题,论述了实现复杂查询的方法,同时论证了各种方法的特点及适用范围。关键词:查询 动态 数据窗口当今数据库技术已成为计算机应用的核心技术,可以认为当今任何计算机信息系统和计算机应用系统都与数据库的应用分不开,数据库已成为其核心和基础。建立数据库应用系统是要充分利用数据库中的数据。对数据库中的数据进行的操作除增加(Insert)、更改(update)和删除(delete)外,最常用,也是重要的是查询操作。即便是最简单的数据库应用系统,也离不开查询功能,查询可以说是进行数据管理的重要手
2、段,不过也是数据库应用系统开发过程中较困难、花时间、有一定难度的部分。1. 问题的描述某单位根据上级部门的要求建立人员信息管理应用系统,它是人事管理信息系统(Personnel Management Information System)的子系统。人员信息管理系统是对人员所有信息的全面管理,包括:基本信息、培训或进修信息、履历信息、工资变动信息、离退信息、家庭成员及社会关系信息等等。根据中共中央组织部颁布的全国组织、干部、人事管理信息系统信息结构体系的要求,对人员的信息描述共有43个信息集(对应43张表),426个数据项,本文根据数据库设计的要求进行加工,只列出3张表(table)。1)表名:
3、基本信息 编码:personnel主码 字段编码 数据类型 长度 字段名称personnel_id char 9 人员代码name varchar 20 姓名sex char 1 性别birthday datetime 出生日期native_place char 6 籍贯 nationality char 2 民族marriage char 1 婚姻状况 workday datetime 参加工作时间 party char 2 政治面貌 graduaton char 2 学历 department char 30 所在单位 identification char 15 身份证号 cul_fie
4、ld char 6 培训专业(2)表名:工资变动信息 编码:wages主码 外码 字段编码 数据类型 长度 字段名称* * personnel_id char 9 人员代码 sa_id char 3 人员内码 change_day datetime 工资变动日期 sa_file_num char 3 工资变动文件 salary money 工资 3)表名:离退信息 编码:retirement主码 外码 字段编码 数据类型 长度 字段名称* * personnel_id char 9 人员代码ret_day datetime 离退日期rel_style char 2 离退类别pay money
5、离退休费comment text 离退说明在应用中为保证数据的规范化,需充分利用国际代码和组标代码,这样做也可以节省存储空间。将这些代码表建成数据库中的静态表,包括:性别(GB2261)、籍贯(ZB01)、民族(GB3304)、婚姻状况(GB4766)、政治面貌(GB4762)、学历(GB4658)、工资变动文件(ZB52)和离退状态(GB12405)。它们的结构基本相同,每个表中都有两个字段,分别存储代码及内容。以性别为例:表名:性别 编码:GB2261字段编码 数据类型 长度 字段名称-code char 2 代码comment char 4 内容表中数据:code comment-男性
6、女性 这些代码表一旦建立,表中数据对应用来讲是相对不变的,所以称为静态表。在需要的时候,静态表的数据可以修改,一般放在维护中进行。当这些静态表建成后,可得到完善的人员信息管理系统的数据模型,2.使用SQL语句SQL(Structured Query Language)语言是1974年由Boyce和Chamberlin提出的,并在IBM公司San Jose Research Laboratory研制的System R上实现了这种语言。由于它功能丰富,语言简洁,使用方式灵活而倍受青睐,并扎根于计算机工业界及计算机用户。SQL是集数据操纵(Data Manipulation)、数据定义(Data D
7、efinition)与数据控制(Data Control)为一体的关系数据语言。查询是数据操纵语言中最主要的部分。从SQL的英文名称:结构化的查询语言,即能看出SQL在查询中的贡献,可以说数据库查询语句是SQL语言的核心。 SQL查询语句只使用命令动词,SELECT一般格式: SELECT目标列FROM基本表(或视图)WHERE条件表达式GROUP BY列名1HAVING内部函数表达式ORDER BY列名2ASCDESC格式说明:中的内容为根据需要的具体内容;中的内容为可选项。语句含义:根据WHERE子句中的条件表达式,从基本表(或视图)中找出满足条件的元组,按SELECT子句中的目标列,选出
8、元组中的分量形成表。GROUP子句将结果按列名1分组,每个组产生结果表中的一个元组;ORDER子句使结果表按列名2升序或降序排列。 这是最基本的方法,只要能够对库操作,就可以实施所需要的查询。例如:想了解所有离退休人员的基本情况及他们的离退休费,可以键入如下语句:SELECT DISTINCT retirement.personnel_id,name,sex,birthday,workday,retirement.payFROM personnel,retirementWHERE personnel.personnel_id=retirement.personnel_id执行后得到下列列表,显
9、示所需信息:personnel_id name sex birthday workday pay-1 林立兰 1 1919/03/21 1994/05/06 1,187.0013 安 静 2 1935/05/04 1954/11/13 457.302 付石龙 1 1928/03/21 1935/05/06 947.005 魏 芳 2 1917/05/21 1933/05/21 937.008 李 四 1 1939/05/31 1960/07/13 1,128.809 王丽立 1 1917/05/21 1933/05/21 745.00 但这种方法要求操作者对数据库的结构有充分的了解,例此数据库
10、有多少个表,有多少个数据项,这些数据项分别属于哪一个表等。显然,这是数据库管理员的工作范畴。对用户,即使了解SQL语法,也只能完成简单的查询,对复杂的查询工作简直是望尘莫及了。也就是说单单是SQL语句,并不能很好地完成数据库的复杂查询,必须要与其他技术配合使用。另外,使用SQL语句进行查询,只能直接反映每一列的信息,而我们的43张基本表是尽可能地保存代码以保证数据的规范且节约存储空间。也就是说,我们能得到准确的查询结果,但得到地却是整篇的代码(例上表中的sex列),这对开发者和使用者都难以接受。如果能够将整篇的代码自动转换成所表达的文字,那当然是再好不过了。3. 借助PowerBuilder实
11、现综合信息的查询目前,随着工具软件的发展和广泛采用,使数据库应用系统的开发如虎添翼,其中PowerBuilder以其独特的数据窗口(DataWindow)倍受欢迎。PowerBuider是美国著名的数据库应用开发工具生产厂家Powersoft公司于1991年6月推出的功能强大、性能优异的开发工具,它是一种面向对象的、具有可视图形界面的、快速的交互开发工具。智能化的数据窗口对象是其精华所在。利用此对象可以操作关系数据库的数据而无需写入SQL语句,即可以直接检索、更新和用多种形式表现数据源中的数据。但要注意,必须使数据窗口成为窗口(Window)下数据窗口控制的一个连接对象,数据窗口才能使用户在应
12、用执行期间访问数据库中的数据。利用PowerBuilder提供的内部查询机制,我们即可以让数据窗口作为查询条件的输入,又可以让该数据窗口作为查询结果的输出,这样就可以使数据窗口中的所有数据项进行自由组合的查询。例如:在窗口W_que上建立两个数据窗口控制dw_1和dw_2,分别连接两个数据窗口对象dw_que1与dw_que2,其中dw_1用于输入查询条件,而dw_2用于显示满足查询条件的所有元组。事实上条件的输入及元组的显示完全可以在一个数据窗口中实现,考虑到这两种操作的差别(例:条件输入可编辑,而元组显示不可编辑;条件输入可为某一范围,而元组显示仅为满足条件的所有纪录)将其用两个数据窗口控
13、制来实现。这就要求dw_2与dw_1数据共享,即要求dw_que1与dw_que2两数据窗口的数据源完全相同,如图2所示。(略)用这种方法实现查询优点突出,例:通过设置数据窗口中对应列的编辑风格(Edit Styles)为相应的下拉式数据窗口(DropDownDataWindow),使显示的元组文字化。注意,这要事先建好下拉式数据窗口。设置数据窗口中对应列的编辑风格同样可满足其它显示需要。利用数据窗口的风格特点:查询表的列宽、列序可自由改变,甚至可以覆盖掉一些列,以达到更满足查询显示的需要。综合查询的信息来自多个表,改变数据窗口的数据源,采用多表连接的数据源即可实现。但是如我们问题的描述,如果
14、我们需要的查询项随机地来自这43张表中的数据项,显示项也是随机地。这种任意条件的组合,可选输出项的显示称为动态查询(Dynamic Query)依然采用上述方法,数据窗口dw_que1与dw_que2的数据源将是这43张表的连接,先不说效率问题,单从这426个项中输入查询条件,又显示这426个项,就使人敬而远之。因为,在每一次查询前,都不了解此次查询的要求是什么,这样,每张表中的每一个数据项都缺一不可;另一方面,每一次的查询,一旦查询条件确定、显示条目也确定后,我们会发现,每一次有意义的查询并不是需要全部的43张表,换言之,每一次查询没有必要将43张表全部连结,而应只连接那些被选中数据项所在的
15、表,即数据源是动态产生的。由于数据源不确定,数据窗口就无法设计,动态查询无法用这种方法实现。4. 动态查询的实现在某些实际的应用系统开发中,由于用户在开发前提不出查询的需求,而在系统运行中希望能够对所有的数据项任意组合进行查询,以满足来自多方的需求,实现动态地查询(即随机地从43张表中选择数据项进行组合作为查询条件并任意地选择数据项作为显示条目)。对于此类查询的实现要利用PowerBuilder通过编程的方式在运行时动态地创建数据窗口,并动态地控制数据窗口。动态地创建一个数据窗口,应用程序需要执行下列任务:动态地构造SQL语句。用符合数据窗口语法的字符串,为现在的数据窗口控制创建一个数据窗口对
16、象。具体实现如下:1)动态地生成SQL语句,根据SQL的语法:SELECT stringaFROM stringbWHERE stringc也就是动态地生成 stringa, stringb, stringc.由用户输入要显示的列,一旦输入完毕,列名就随之确定,将所有列名拼成一个“串”,中间用“,”分隔,形如“columm1,column2,column3,.,columnr”,则动态地生成stringa;同样由用户输入查询条件,包括相应的列、满足的条件或范围、逻辑关系等,将这些条件拚成一个串,即为stringc,显然,所有的列名都确定了,他们所在的表名也确定了,按照stringb的语法规则即
17、可构造。注意:上面的stringc由两部分(表间关系stringc1及查询条件stringc2)组成;表名串stringb与表间关系stringc1、查询条件stringc2及显示条目stringa均有关。在实现的过程中:为贴近实际应用,习惯上,先输入查询条件,再输入显示条目。即在输入查询条件后,生成strinc2,stringb,stringc1;然后,再在输入显示条目后生成stringa,并修改stringc1,stringb。最后形成SQL语法:str=select+stringa+from+stringb+where+stringcl+stringc22)在现在的事物对象里利用相关的S
18、yntaxFromSQL()函数生成符合数据窗口语法的字符串: 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. 小结使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省南通市通州区2024-2025学年上学期九年级英语期末学业水平质量监测试题(含答案无听力音频含原文)
- 2025壁画数字技术应用与服务合作协议范本3篇
- 2024数据资源整合与编辑录入服务合同书3篇
- 2024版饭店承包合同书范本
- 2024版建筑工程中介服务合同合同版B版
- 福建省南平市莒口中学2020-2021学年高一语文上学期期末试题含解析
- 2024版个人担保借款合同协议书
- 2024电子商务平台业务外包合同2篇
- 2024年分包合同(62篇)
- 2024版租赁无人机合同2篇
- 有机农业种植技术操作手册
- 2024-2025学年四年级上册数学人教版期末测评卷(含答案)
- 2024-2030年中国裸眼3D市场深度调查与竞争格局分析研究报告
- 曲线与曲面积分练习题含答案
- 《ISO56001-2024创新管理体系 - 要求》之25:“9绩效评价-9.2内部审核”解读和应用指导材料(雷泽佳编制-2024)
- 小升初典型奥数:相遇问题(讲义)-2023-2024学年六年级下册数学人教版
- 河南省南阳市2022-2023学年高二上学期期终模拟测试物理试题(含答案解析)
- 2024年俄罗斯压缩天然气(CNG)和液化石油气(LPG)车行业应用与市场潜力评估
- 二年级上册口算题大全(可直接打印)
- 宜宾市翠屏区2022-2023学年七年级上学期期末生物试题【带答案】
- 八年级下册语文教材分析
评论
0/150
提交评论