结构化查询语言

2024-12-11

结构化查询语言(共7篇)

结构化查询语言 篇1

摘要:传统的数据库都是以二值逻辑和精确数据为基础的, 不能表示许多模糊不清的对象。目前模糊数据库技术是基于L.A.Zadeh所提出的模糊集, 由于Vague集在表达模糊信息方面的能力比模糊集强, 所以基于Vague集的模糊数据库具有广阔的应用前景。本文在Vague集和Vague关系基础上, 提出基于Vague集的模糊结构化查询语言VSQL, 它是针对于Vague关系模型的一种标准SQL扩展, 可以应用于机器学习、决策分析、知识获取, 以及模式匹配等方面。

关键词:Vague集,Vague关系模式,Vague关系,Vague结构化查询语言,Vague隶属度

Cantor创立的集合论是无法处理具有模糊性的不确定信息和数据的, 于是L.A.Zadeh在1965年提出了模糊集 (fuzzy set) 理论。在随后的几十年中, 模糊集理论不断发展和完善, 并在许多领域里取得被成功地应用。模糊集最主要的特征是:每一对象都有一个互不相同的隶属于模糊集A的程度, 隶属函数μA (x) (x∈U) 给每个对象分派一个[0, 1]中的数作为它的隶属度。

随着模糊集理论在模糊数据处理方面的广泛应用, 其本身所具有的一些不足也显现出来, 其中之一就是糊集理论中单值隶属度不能同时表示支持和反对的证据。为解决此问题, 台湾学者W.L.Gau和D.J.Buehrer于1993年提出了Vague集 (Vague set) 理论。作为模糊集的进一步推广, Vague集具有更强的表达数据模糊性和不精确性的能力。在Vague集中, 给每个对象同样分派一个隶属度, 不同的是该隶属度是[0, 1]的一个子区间, 这个子区间既给出了支持x∈U的证据, 同时也给出了反对x∈U的证据。与模糊集相比较, Vague集有如下特性:模糊集能表示的模糊信息, Vague集能表示;模糊集不能表示的信息, Vague集也能表示。

有关Vague集的研究已取得了丰硕的成果, 一方面是Vague集的性质研究, 主要集中在相似度测量方面[3, 4, 5], 另一方面是利用Vague扩展关系数据模型, 还有一个重要的研究方向是基于Vague集的查询研究, Prade等人提出了一种基于模糊数据库的查询语言, 并对其中的选择和投影操作进行了研究, Bosc等人基于可能性分布模糊数据库, 对其中的选择、投影和连接操作进行了讨论, 国内的赵法信等人在这方面也作出了一定的研究, 基于Vague集的代数查询语言中的选择、投影和连接操作进行了研究, Vague除操作实现方法的研究, 基于Vague关系数据模型的聚集操作研究。本文在扩展Vague关系模型的基础上, 提出了基于Vague集的模糊结构化查询语言VSQL, 并给出了相应的定义, 能够方便高效地进行查询Vague信息。

一Vague集

Vague集作为模糊集的一般化形式, 具有更强的表达模糊信息的能力。下面给出Vague集的定义。

定义1令X是一个点 (对象) 的空间, 其中的任一元素用x表示, X中的一个Vague集V用一个真隶属函数tv和一个假隶属函数fv表示。tv (x) 是从支持x的证据所导出的x的隶属度的下界, fv (x) 则是从反对x的证据所导出的x的隶属度的下界, tv (x) 和fv (x) 将区间[0, 1]的一个实数与X中的每个点联系起来, 且tv (x) +fv (x) ≤1, 即:

由定义可知, 它将x的隶属度限制在[0, 1]的一个子区间[tv (x) , 1-fv (x) ]内。

例如:如果tv (x) , 1-fv (x) =[0.5, 0.8], 那么tv (x) =0.5, fv (x) =0.2。这一结果表明:x属于Vague集V的程度为0.5, 而它不属于V的程度为0.2。用投票模型解释为:对于一个方案, 有10个专家进行投票, 有5个人支持, 2个人反对, 有3个人弃权。

换句话说, 我们可以这样理解, x的精确隶属度μv (x) 或许不知道, 但是它应是tv (x) ≤μv (x) ≤1-fv (x) , 其中tv (x) +fv (x) ≤1。

这样, x的信息的精确性就十分清楚了, 因为关于x的不确定性可以用1-fv (x) -tv (x) 来表征。如果该差值小, 表明我们相当精确地知道x;如果该差值大, 则表明关于x我们知道很少。如果1-fv (x) =tv (x) , 则表明我们精确地知道x, 此时, Vague集就退化为模糊集。如果1-fv (x) 和tv (x) 同时为1或0, 这取决于x属于还是不属于V, 此时关于x的信息是精确的, 也就是说, Vague集退化为普通集合。Vague集的几何解释, 见右图。

二Vague关系

由于客观世界的复杂性, 人们对许多事物的认识具有一定的局限性。因此, 数据库系统管理的模糊数据也应该体现人们认识上的差异, 带有Vague可信度。

定义2:一个Vague关系模式Rv是由 (属性名, Vague可信度) 组成的一个有限集合{ (A1, C1) , (A2, C2) , …, (An, Cn) }, 简记为RV[ (A1, C2) , (A2, C2) , …, (An, Cn) ], 其中Ai (i=1, 2, …, n) 表示属性名, Ci是对应于属性Ai的Vague可信度名, dom (Ci) =[tv (xi) , 1-fv (xi) ]。

定义3:Vague关系模式RV[ (A1, C1) , (A2, C2) …, (An, Cn) ]上的Vague关系RV是 (dom (A1) , dom (C1) ×, (dom (A2) , dom (C2) ×…× (dom (An) , dom (Cn) ) 的一个Vague子集。

定义4:Vague关系Rv的元素称为Vague元组, 简称为元组, 可记为:ti= ( (ai1, ci1) , (ai2, ci2) , …, (ain, cin) , cin+1) , 其中i=1, 2, …, m, m为R的基数, cin+1为元组ti的Vague隶属度。

表1是一个Vague关系的例子。

三基于Vague集的结构化查询语言 (VSQL)

SQL (Structured Query Language) 结构化查询语言, 是一种数据库查询和程序设计语言, 用于存取数据以及查询、更新和管理关系数据库系统。

SQL语言包含四个部分:一是数据定义语言 (DDL) , 例如:CREATE、DROP、ALTER等语句;二是数据操作语言 (DML) , 例如:INSERT (插入) 、UPDATE (修改) 、DELETE (删除) 语句;三是数据查询语言 (DQL) , 例如:SELECT语句;四是数据控制语言 (DCL) , 例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。

借助于Vague隶属度和Vague阈限, 基于Vague集, 把DDL和DML扩充为VDDL和VDML。

1 Vague集的数据定义语言 (VDDL)

VDDL是基于Vague集的模糊数据定义语言, 主要包括以下内容。

第一, 定义模糊表。

CREATE TABLE<模糊表名> (<列名1><类型名>[NOT NULL][, <列名2><类型名>[NOT NULL]]…) ;

其中<类型名>可以为传统的数据类型或模糊数据类型。

表1的employee关系可以定义如下:

第二, 修改模糊表结构。

ALTER TABLE<模糊表名>ADD<列名><类型名>;

第三, 删除表。

DROP TABLE<模糊表名>;

上述模糊关系表定义语言可以根据SQL标准进一步增加语句。

2.Vague集的数据操纵语言 (VDML)

VDML是指基于Vague集的模糊数据操纵语言, 主要包括模糊选择、模糊插入、模糊删除和模糊更新语句。

第一, 模糊选择语句。

SELECT[ALL|DISTINCT|DISMIN|DISAVG]*|<目录列表>

FROM<模糊表名列>

[WHERE<模糊条件>[WITH]]

[GROUP BY<分组列表>][HAVING<模糊分组条件>[WITH 1]]

[ORDER BY<模糊表达式>[ASC|DESC]…];

设有两个Vague值X=[tx, 1-fx]和Y=[tY, 1-fY]若tx≥tY, 则X≥Y。其中τ为Vague阈限, 由用户指定。SELECT语句选择满足模糊条件且元组Vague隶属度≥τ的那些元组, 然后将出现在<目录列表>中的属性输出。为了避免重复, VSQL语言扩充了四个关键字。

若带ALL短语, 则输出所有满足模糊条件的元组。缺省值为ALL。

若带DISTINCT短语, 则输出最高隶属度的元组。

若带DISMIN短语, 则输出最低隶属度的元组。

若带DISAVG短语, 则输出的隶属度为所有重复元组隶属度的平均值。

例如:查找所有高个子的年轻人的姓名。

SELECT NAME

FROM employee

WHERE AGE=Young and HEIGHT=Tall WITH[0.6, 1];

结果为:{[0.8, 1]/Bill, [0.8, 0.9]/Jack}。

第二, 模糊插入语句。

INSERT INTO<模糊表名>[ (<列表>) ]VALUES (<模糊表达式表>) |<子查询>;

其中<子查询>的目标列表的列数必须与INSERT语句的列表的列数相同。

例如:插入John的信息。

第三, 模糊删除语句。

DELETE FROM<模糊表名>[WHERE<模糊条件>WITH]

若忽略WHERE子句, 则删除模糊表中的所有元组。

第四, 模糊更新语句。

UPDATE<模糊表名>

SET<列名1>=<值表达式1>[, <列名2>=<值表达式2>]…

[WHERE<模糊条件>WITH]];

例如:将Smith的年龄修改为Middle, 能力修改为Fair。

UPDATE employee

SET AGE=Middle, CAPABILTY=Fair

WHERE NAME=‘Smith’;

经典关系数据库的查询操作是在结果关系中保留满足给定条件的元组, 而在基于Vague集的数据库选择操作定义中, 则是在结果关系中保留小于等于Vague阈限的所有元组。

四结束语

Vague集的最大特点是能同时给出支持和反对的证据, 因而能更为全面地表达模糊信息。基于Vague集的模糊结构化查询语言VSQL可以应用于人工智能的各个分支, 如机器学习、决策分析、知识获取以及模式匹配等方面。

为了查询Vague数据库中的信息, 本文提出了一种基于Vague集的模糊数据库查询语言VSQL, 为进一步的模糊数据操纵提供了很好的基础;现在SQL3的标准已经制定, 新的标准中使得数据库中数据类型的定义更加灵活, 如何在SQL3的基础上扩展基于Vague集的模糊关系数据库语言是进一步研究的重点。

参考文献

[1]L.A.Zadeh.Fuzzy sets[J].Information and control, 1965 (8)

[2]W.L.Gau, D.J.Buehrer.Vague set[sJ].IEEE Transactions on System Man and Cybernetics, 1993 (23)

[3]Faxin Zhao and Z.M.Ma.Vague Query Based on Vague Relational Model[J].Advances in Intelligent and Soft Computing, 2009 (116)

[4]Lu A, Ng W.Vague sets or intuitionist fuzzy sets for handling vague data:which one is better[A].Lecture Notes in Computer Science, 2005

[5]Faxin Zhao, Z.M.Ma*, Li Yan.A Vague Relational Model and Algebra[J].IFuzzy Systems and Knowledge Discovery, 2007 (1)

[6]Prade H, Testemale C.Generalizing database relational algebrafor the treatment of incomplete/uncertain information and vague queries[J].Information Science, 1984 (2)

[7]Bosc P, Pivert0.About projection—selection—join queries addressed to possibilistic relational databases[J].IEEETransactions on Fuzzy Systems, 2005 (1)

[8]杨宁、毛宇光.基于Vague集的广义模糊关系数据模型[J].计算机工程与应用, 2005.41 (11)

[9]赵法信、马宗民、吕艳辉.基于Vague数据库的代数查询语言[J].小型微型计算机系统, 2008.29 (10) :1893~1899

[10]赵法信.基于Vague关系数据模型的除操作研究[J].计算机工程, 2012 (14)

[11]赵法信、马宗民.基于Vague关系数据模型的聚集操作研究[J].东北大学学报 (自然科学版) , 2006 (12)

结构化查询语言 篇2

计算机技术和网络技术快速发展的今天, 大量的信息通过电子文件的形式被保存下来。对于科研工作者、工程设计人员而言, 以文献形式表现的大量信息是科研工作的基础, 保存大量文献信息则需要通过各类数据库的存储, 数据库的应用领域主要是信息管理[1]4。本文以Access文献数据库为基础, 针对用户对文献查询的需求, 介绍通过客户端应用界面对Access文献库进行灵活查询操作的软件, 结合本单位信息中心Access文献信息数据库的资料查询工作而进行的查询功能, 避免由于用户直接针对Access文献数据库的操作导致的失误。Access数据库本身带有查询功能, 可以根据用户要求生成查询结果, 但由于是用户直接针对数据库进行操作, 容易对数据库产生破坏作用;而通过客户端对数据库进行操作的话, 中间隔了层服务端, 使得用户在对数据库进行操作后发现问题能及时退出, 对数据库有一定的保护作用。主要介绍利用结构化语言对现有的Access文献库根据用户的各种需求实现灵活查询, 动态显示查询结果, 并确保数据库的安全性。

2 SQL语言介绍

开发数据库软件, 必定包含查询功能。主要介绍基于Visual Basic6.0平台, 通过DAO (ADO组件是专门为Client/Server应用程序开发而设计的[2]333) 数据存取对象提供的属性和方法, 建立数据访问对象访问本地Access数据库以及数据表。利用SQL语言根据字段类型形成不同的查询条件, 灵活组合各种查询条件语句, 对数据表进行不同层次的查询, 动态地显示查询结果数据表, 确保查询条件的优先级及先后顺序。使用户能更方便、更随意、更快捷地对所需资料进行快速抽提、浏览, 免去一些不必要的重复工作。

SQL语言其全称为Structure Query Language, 意思是结构化查询语言的意思, 是用来管理数据库及其数据的一种标准语言[2]65。SQL语言是70年代由IBM实验室开发出的一套数据库系统, 后经美国国家标准组织 (ANSI) 与国际标准组织 (ISO) 制订出标准SQL, 在关系数据库中广泛使用。但“查询 (Query) ”二字在这里显得有点令人混淆, 因为通过SQL所做的事情可以说比查询要来得多, 像建立数据库、建立表格, 或是数据的新建、删除、修改等, 都可以通过SQL语法定义的语句来实现。

因而, 通过SQL命令, 程序设计和开发者们可以做到:

(1) 建立数据库表格。 (包括设置表格所可以使用的空间)

(2) 改变数据库系统环境设置。

(3) 针对某个数据库或表格, 授予用户存取权限。

(4) 对数据库表格建立索引值。

(5) 修改数据库表格结构。 (新建、删除或是修改表格字段)

(6) 对数据库进行数据的新建。

(7) 对数据库进行数据的删除。

(8) 对数据库进行数据的修改。

(9) 对数据库进行数据的查询。

具体的SQL命令并不多, 但由于SQL命令是针对关系型数据库所建立出来的语法叙述, 因而只需要几个命令就可以在这类数据库中发挥非常强的功能, 主要介绍利用SQL命令对Access文献数据库表中的记录进行灵活查询的功能。

3 程序设计

程序需要引入面向对象DAO编程接口, 利用DAO (数据存取对象) 的Jet数据库引擎提供与数据库交互的机制[2], Visual Basic6.0提供了新的ADO的数据访问接口[3], 通过数据库引擎操纵的方式存储用户所用的数据, 用来建立应用程序与数据源之间的连接。显示数据表中的所有字段, 根据字段类型来判别查询条件, 字段类型为ID号, 则显示为数值型的查询条件;若字段类型为文本型, 则显示为文本型的查询条件。

两种查询条件中又各包含了多种查询条件模式, 数值型的查询条件模式中包括“单个数值”、“数值范围以内”和“数值范围以外”3种, 且在“单个数值”查询条件模式下又包含了下一层的查询条件模式, 为“包括”和“不包括”两种模式;文本型的查询条件模式包括“任何位置”、“全匹配”、“字符开头”和“不包括”4种条件查询模式, 不同的匹配模式形成不同的查询语句。

定义SQL语句变量, 选择逻辑运算符 (与、或、非) , 与“select*from try where” (try为数据表名) 连接为查询语句变量, 此变量如果再加上条件选择, 可以组成临时变量, 作为进一步查询的前一个条件, 与后面的查询要求组合成执行语句, 对查询记录进行进一步过滤。

根据查询要求, 设计出以下5个构成查询条件的方案:

(1) 用户直接浏览全表, 无任何查询条件。

(2) 用户只有一个查询条件, 实现一个简单查询。

(3) 用户要求多个查询组合在一起, 一次就能实现一个复杂的查询。

(4) 在已完成的查询结果上, 接着进行单个查询或多个组合查询, 进一步对数据表进行过滤。

(5) 用户重新开始查询。

设计基本完成后, 新建工程, 引入DAO编程接口, 添加MSFLEXGRID部件, 建立查询窗体, 在窗体中加入以下控件:LISTBOX控件、FRAME控件、TEXTBOX控件、LABEL控件、OPTIONBUTTON控件、MSFLEXGRID控件、COMMANDBUT-TON控件, 整个查询界面如图1所示。

操作步骤基本如下:选择LIST1中显示的数据库表中的某一字段, 根据字段类型显示条件输入模式, 在条件组合框内的TEXT1中输入相应的条件, 选择匹配模式, 如作为单一条件查询, 则可直接点击“执行”按钮进行查询, 如作为组合查询则在选择了逻辑运算符“ANDORNOT”后, 再次选择LIST1中所显示的另一字段, 重复前面的操作直到条件满足后点击“执行”按钮进行查询, 如作为反复查询, 在点击“执行”按钮后, 再次选择LIST1中所显示的某一字段, 可继续连接单个条件查询或组合查询, 实现对已有查询记录的再一次查询。

4 软件流程及程序实现

4.1 引入数据访问对象 (DAO)

从工程的引用菜单中引用“Microsoft DAO 3.6 Object Library”对象, 通过程序设定数据库对象变量和数据表对象变量, 建立客户应用程序与数据源之间的连接, 如图3所示。

4.2 建立查询条件

程序中采用SQL的DML (数据操作语言) 创建查询, 以便从数据库中排序、筛选和抽取数据。针对用户查询要求, 根据所选字段的类型, 组织成简单或复杂的查询条件, SQL执行语句的组织过程如图2所示。

软件主要着重于查询, 重点在SELECE语句方面, 通过对最常用的数据查询语句SELECT进行解释, 以了解SQL命令中的各类子句的功能和定义。SELECE语句用来从一个记录集中获取指定的字段, 从而生成一个较小的记录集。SELECR语句字句的完整表达式[3]186如表1所示。

程序运行后在查询界面上文献库记录集中的字段显示在列表框, 通过选择字段确定字段类型, 根据字段类型显示查询条件模式。

(1) 数值型字段:界面中包含“单个数值”、“数值范围以内”和“数值范围以外”3种选择模式, 在“单个数值”模式中又包含“包括”和“不包括”两种下一级选择模式, 用来设定数值型查询范围, 如图4所示。

(2) 文本型字段, 则包含“任何位置”、“全匹配”、“字符开头”和“不包括”4种匹配模式, 不同的匹配模式形成不同的查询语句。通过Command Button数组AND、OR、NOT来组合查询条件, 最终实现单一查询、组合查询和多层查询等功能, 如图5所示。

4.3 查询结果显示

从工程部件菜单中选择控件“Microsoft Flex Grid Control6.0”, 添加在窗体上, 如图6所示, 该控件用来显示查询结果, 得到的查询记录集显示其上, 双击单条记录显示该记录详细内容, 如图7所示。

5 示范程序查询实例

例1:以作者名来查询, 实现一个全匹配的单一查询。首先选择字段列表, 在关键字文本框中输入作者姓名, 选择全字符匹配模式, 单击“查找”按钮即可查询到结果记录集。通过图8中选择Case完成子句, 以LIKE连接查询条件, 图8中“mysql=”[作者]”like’李’”的SQL查询语句表示查询作者为姓“李”的第一作者的全部记录, 包含作者的所有查询结果显示为图9所示。

例2:从ID号的范围, 从文献名字段中匹配部分关键字为条件实现一个较为复杂的、部分匹配的查询。如图10所示, 同样通过Case来连接另一个查询条件, SQL查询语句“mysql=”[ID]between 5000 and 10000 and[文献名]like'*石油地质*’””表示ID号从5000-10000之间的, 并且文献名中包含“石油地质”关键字的查询条件, 通过查询得到的记录集如图11所示。

例3:以组合查询任何部位并以 (或) 为条件形成查询语句。图12表现了数值型和文本型的查询条件组合, 其SQL语句表示以文献名中包含“油气藏形成”或者文献名中包含“运移”关键字作为查询条件, 其查询结果显示共查到661条符合记录的相关记录集。图13则表现为多种文本型查询条件的组合, 图3中SQL查询语句表示以作者名包含“张”、文献名包含“油气”、主题词包含“运移”关键自己的组合查询条件, 在文献库中共查询到60条记录。

6 结语

查询是各种开发软件中比较常见的功能, 只简单地用了两个类型的字段, 旨在介绍一个方法, 大家可以根据需求定义各种字段类型, 扩展查询范围, 最主要的目的介绍SQL语言功能, 在对查询功能的开发过程中, 利用这个方法能够较简捷地、较灵活地执行用户对查询的任意要求, 避免编写复杂长的代码, 提高软件开发效率。

摘要:在VB平台上, 通过DAO (数据存取对象) 访问本地Access数据库, 根据数据表字段类型不同设定不同的查询方式, 利用SQL语言实现灵活查询, 并根据查询结果动态显示数据表。

关键词:DAO对象,SQL语句,灵活查询,动态显示

参考文献

[1]程志云, 张帆, 等.数据库原理与SQL Server 2005应用教程[M].机械工业出版社, 2010, 8:4.

[2]全刚, 杨领峰, 等, 译.Visual Basic 6数据库编程大全[M].北京:电子工业出版社, 1999, 4:30-333.

结构化查询语言 篇3

1 XQuery查询语言及其基本优化方法

XQuery是一种以文字为基础的功能性语言,其特点决定了只对于已建立索引的文档数据库,可以快速地访问文档信息。XQuery包含一些用来访问数据库中多个文档的机制,允许在同一个查询中访问多个文档,因此使用XML数据库或其他形式的索引模型可以达到最佳性能[1]。XQuery最擅长处理包含叙述信息和量化数据的“混合”文档。如在基于XML的电子病历中,包括对医生手术操作的具体描述、病人住院期间所使用的药物及其他医疗物品的相关记录信息。可以看出该文档不易存储在传统的关系数据库中,但XQuery却适合处理此类混合信息的文档,它能直接从XML文档中查询和抽取所需的相关信息。通常对XQuery的查询优化,主要从以下3方面考虑。

1)执行策略。

查询解析有3种较为常见的执行策略。一是自顶向下策略:先确定结构即根据路径条件深度优先遍历所有的XML节点,再检查其子节点的值是否满足谓词和表达式的要求条件;二是自底向上策略:此策略与自顶向下策略正好相反,从谓词条件开始,沿着路径表达式反向进行查询;三是混合策略:先用自顶向下的方法寻找出符合路径条件的对象,再用自底向上的方法寻找出符合谓词条件的原子对象,然后对两者进行结合,最后找出所查的结果。采用后两种策略的前提条件是存在相应的索引。上述3种策略各有特点,一般情况下采用后两种策略条件比较优,但这两种策略都会破坏XML数据间本来的顺序,这就需要在输出结果前重新进行排序。

2)逻辑优化。

由路径表达式转换的查询树是XML代数的核心,因此查询树的规模制约着查询效率,查询树的最小化就是XML逻辑优化的研究重点[2]。按照语法和语义将逻辑优化分为两类,一是只分析查询表达式中分支或结点间的逻辑包含关系以及删除冗余部分;二是指利用数据库所提供的模式信息及语义包含和结构包含等约束条件规范其表达式,用精确的代数语言来定义查询代数的操作[3]查找并删除表达式中的冗余分支或节点。

3)物理优化。

查询处理过程中有两个因素制约其查询的优化:一是CPU运算和内存访问是紧密相关的,但它们的速度差距较大,用高速缓存来缓冲CPU和内存间的差距,可提高整体速度;二是优化本身对查询的影响在查询处理时也需要考虑,统计出各种不同查询操作中的物理代价,最后从中选择代价最小的一个作为真正执行的查询计划。

2 XML查询系统

整个“XML查询系统”主要是由用户界面层、查询引擎、XML数据存储层组成,系统体系结构见图1。

本系统中查询引擎是由查询处理器和XML处理器构成,而查询处理器是系统的核心模块,主要负责处理来自用户的XQuery查询要求并将查询的结果信息返回给用户。其处理流程可简述如下:对于用户管理的XML文档数据集,首先由XML数据处理器对XML文档数据集进行解析,对其文档进行分词处理,提取文档信息,对经解析的XML文档进行高频路径、属性和值的索引,包括对其中各种信息(如路径信息、属性和值信息等)分别建立相应的索引,然后将其数据信息及建立的各种索引结构存储在XML存储器中[4]。接着把源XML数据存入XML数据库中,然后把解析后的扩展数据转换成规则存入XML数据存储器中。其中,为了优化查询,本系统使用了索引功能对用户查询进行预处理,在XML数据解析的过程中为每个树节点生成一个唯一标志,便于查询搜索时使用。当用户输入查询时本系统将执行的操作过程为:对用户提交的查询进行预处理操作,包括作语法及语义解析和谓词规范化等;生成查询计划;优化查询,包括查询策略选择和索引选择等;由查询处理器通过数据访问接口,执行查询;处理查询结果并返回查询的结果信息。

3 系统查询优化

对本系统的查询优化主要分为两类:

一是对物理层的优化,根据系统所提供的存取路径选择最佳存取策略,其中索引这种存取路径能够在最初的查询处理阶段去掉多余的查询空间,减少其匹配次数。因此,就考虑到可以分析用户的查询习惯,针对高频路径产生相应的XML索引。

定义:高频窗口W:设XQuery对XML类型数据进行查询的总次数为T,用户输入的查询为Q(可以是结构路径,属性,值的不同类型的查询),则高频窗口W=Q/T(0≤W≤1)。

算法:根据用户的查询习惯而相应的建立其索引以提高查询效率。

输入:查询内容。

输出:结构路径索引Xpath,属性索引Property,内容值索引Value。

CreatIndexType(query,table)

{If(query is Xpath)

{Q_Xpath++;//Xpath查询

If(Q_Xpath>W)//当结构路径查询类型的次数大于高频窗口,创建结构路径索引

CreatIndexXpath(table)}

Else if(query is Property)

{Q_Property++;//属性查询类型

creatIndexProperty(table)}

If(Q_Property>W)//当属性查询类型的次数大于高频窗口,创建属性索引

else

{Q_Value++;内容值查询类型

If(Q_Value>W)//当内容值查询类型的次数大于高频窗口,创建内容值索引

creatIndexValue(table)}}

可以看出,建立高频窗口的查询方式需要更多的存储空间,而这种查询的高效是使用空间来换取时间,因此在查询操作频繁的应用中,本系统使用的这种交换是可取的。

二是代数层的优化,主要是变换查询语句,改变操作顺序的方法来提高效率,重新排序谓词表达式,使其顺序更加合理[5]。其中,等式结果的唯一性就要强于不等式以及其他相似表达式,所以在谓词表达式的最左边放等式,最先执行等式的内容,则可以减少中间结果集的大小。如原查询为:docu-ment“student/student.xml”/students/student[contains(name,‘Marry’)and@Tel=‘13919311356’],优化后的查询为:document“student/student.xml”/students/student[@Tel=‘13919311356’and contains(name,‘Marry’)]。因此,原查询的中间结果集需要较大的空间来存储这些暂时的结果,而优化后的中间结果集仅仅需要存放一个结果,这样改变之后不单单节省了存储空间,而且也减少了查询匹配的时间,从而提高了执行的效率。

4 结束语

随着Internet的快速发展,XML数据规模与日俱增,能够准确、高效地查询XML数据成为目前研究的一个热点问题。笔者通过对W3C提出的XML查询语言XQuery的特点进行了简要的分析和介绍,并结合了一个简单的XML查询系统的实现,讨论了XQuery语言在XML查询中的具体应用和查询优化的具体方案。目前,尽管XQuery还不太成熟稳定,但是对于查询和恢复XML文档与文档集,XQuery仍然是一种很有前途的创新语法定义,并且在生成XML文档等方面,XQuery有着其他查询语言无可比拟的优势。在计算机领域的不断发展中,XQuery也将势必被越来越广泛的接受,在实际的应用中还需要进一步的研究。

参考文献

[1]张晶晶,李楠.XML查询语言XQuery的分析与研究[J].电脑知识与技术,2008(23):31-32.

[2]孟小峰,王宇,王小锋.XML查询优化研究[J].软件学报,2006(10):17.

[3]李效东.XML查询的代数表示及其查询优化[J].计算机科学,2002(6):59.

[4]张晓琳,谭跃生,丁红.面向对象的XML查询系统的设计与实现[J].计算机工程与设计,2007(16):176-179.

结构化查询语言 篇4

Java语言是目前最流行的面向对象的编程语言之一。 由于Java程序在Java虚拟机环境中运行, 不依赖于特定的系统,所以编程人员只需一次性开发一个 “通用” 的最终软件即可在多个平台环境中使用[1]。 Java语言的这种跨平台性使它倍受程序设计者推崇, 并广泛地应用于各种领域。

在当今这个已被大数据和云计算等技术引领的信息时代,离不开数据库, 也时常会从各种各样的数据库中检索信息,大多数情况下我们需要把查询结果二次调用, 这就要求在进行数据查询后能把结果以文件的形式导出数据库。 而Excel具有强大的数据组织、 计算、 分析、 统计和图表功能, 因此主要介绍了如何使用Java语言进行数据查询, 并把查询结果导出成Excel文件的方法。

2 开发环境

2.1 Eclipse

Eclipse是应用Java语言创建的开发工具, 需要Java运行环境支持[2]。 它主要由Eclipse项目、 Eclipse工具项目和Eclipse技术项目3 个项目组成, 具体包括4 个部分组成———Eclipse Platform、 JDT、 CDT和PDE[3]。 Eclipse拥有强大的编码辅助功能, 可以在输入部分关键字或不输入任何内容的情况下, 通过代码辅助功能直接提示将要输入的编码语法[4]。

2.2 SQL Server 2005

Microsoft SQL Server 2005 是一种可以应用于大中型事务处理的关系数据库平台, 它可以提供稳定、 高效的数据存储和数据处理。

它通过Microsoft SQL Server Management Studio来管理数据库中的对象, 包括表、 视图、 关系图等。 Management Studio集成了老版本中的企业管理器和查询分析器。 所以在Manage-ment Studio中不但可以建立和维护数据库、 表、 关系图, 还可以使用查询分析器执行Transact-SQL等语言, 来实现对数据分析和处理。

3 需求分析

以数据库中的学生表、 课程表和选课表为例, 实现教师可以根据课程名或班级名, 在数据库中查询学生名单, 包括学生的学号、 姓名等信息, 并能把查询结果导出成为Excel文件, 方便教师对学生的管理。

4 数据库设计

依据系统需求, 先建立db1 数据库, 在db1 数据库中建立主要的数据表, 包括班级表(class)、 学生表(student)、 课程表(course) 和选课表(xk)。

学生表存储学生信息, 表中的字段有学号stuno、 学生姓名stuname、 班级编号classno, 其中学号stuno是主键, 班级编号classno是外键。

课程表存储课程信息, 表中的字段有课程编号courseno、课程名称coursename、 任课教师teacher、 开课部系编号de-partno, 其中课程编号courseno是主键, 开课部系编号depart-no是外键。

班级表存储班级信息, 表中的字段有班级编号classno、班级名称classname、 所属部系编号departno, 其中classno是主键, 所属部系编号departno是外键。

选课表存储学生选课信息, 表中的字段有学号stuno、课程编号courseno, 其中学号stuno和课程编号courseno都是外键。

5 程序设计

(1) 构建学生名单查询的图形化界面, 主要使用JLabel组件显示标签, 使用JCombo Box组件显示从课程表中取出的课程名, 使用JTable组件显示查询结果。

(2) 使用JDBC与数据库db1 建立连接。

(3) 取出数据库中课程表course中的所有信息放入结果集rs中。

(4) 循环取出结果集中 “课程名称” 列的数据, 并用ad-d Item( ) 方法添加到下拉列表kecheng中, 如图1 所示。

(5) 点击下拉列表kecheng中任意一门课时, 将触发行为事件, 执行第(6) 步。

(6) 用JCombo Box类中的get Selected Item() 方法得到用户选择的课程名称, 并记录在字符串coursename中。

(7) 在数据库中查询出与该课程名称对应的课程编号,并记录在字符串s中。

(8) 将选课表和学生表进行连接查询, 当满足选课表中的课程号等于s时, 得到选课表中的学号和学生表中的姓名。

(9) 清空JTable组件中的内容。

(10) 在JTable组件中的第一列显示学生学号, 第二列显示学生姓名, 第三列显示字符串变量coursename中存储的课程名, 如图2 所示。

(11) 设置 “导出学生名单” 按钮可见。 若用户点击了该按钮, 则执行第(12) 步。

(12) 建立输出文件。 使用自定义的public To Excel (File file, Default Table Modeltable Model,JTablej Table) 构造方法把结果以Excel文件的格式输出到指定目录下。 输出的Excel文件如图3 所示。

其中, 实现查询界面Ⅰ中下拉列表监听事件的主要程序代码如下:

6 结语

介绍了使用Java语言在Eclipse环境下构建图形化查询界面的方法, 除实现了数据库中的数据查询外, 还实现了把查询结果导出成Excel文件的形式。 该系统主要是为了找到一种快速导出数据库中查询结果的方法, 为用户快速调用、 分析查询结果提供方便。

摘要:介绍了使用Java语言实现数据查询和结果导出的方法,包括查询界面的构建、数据库查询和用Excel形式导出查询结果。查询界面便捷、易于操作,为用户调用查询结果提供了便利。

结构化查询语言 篇5

XML是一种半结构化数据描述语言, 它克服了传统Web描述语言HTML只能够表达数据的内容, 无法表达Web数据的结构特征, 不便于半结构化数据查询这一不足, 正在逐步替代HTML, 成为新一代Web数据描述与数据交换标准。如何有效存储、处理XML文档和从大量XML文档中检索有用信息, 已成为数据库研究领域的一个重要研究课题。本文以SQL2005来处理对XML半结构化数据的查询及优化。

(二) 系统描述

系统的基本结构如图1所示

XML文档管理器提供应用程序以结点和全文档方式存取文档的机制, 它负责检查文档的有效性;查询管理器提供基于离散模式匹配查询的实现, 具体做法是将匹配查询转换成CSP问题;模式管理器维护系统的模式集, 由于式本身也可表达为树状模型, 因此, 它本身的存储也与XML文档的存储采用一样的方式。

(三) 半结构化XML数据查询

对Web上大量半结构化数据的访问成为近年来数据库界研究的一个热点。半结构化的数据通常没有严格的类型定义, 描述数据结构的信息包含在数据当中。为此, 在很多研究中采用了基于有向图的半结构化数据模型, 按照这样的模型, 半结构化数据可以用标注的有向图表示, 图中节点表示对象, 边表示对象之间的联系。借鉴传统数据库系统中模式的概念可以定义并建立半结构数据的模式, 在此基础上实现查询的表达和查询处理。

采用半结构化的数据模型处理Web数据时, 首先要从文本格式的数据中抽取结构信息。由于目前在web上普遍使用的HTML是面向显示的, 主要用于描述数据的格式、显示样式以及数据的位置等, 无法直接定义数据的结构, 因此从基于HTML的Web数据中抽取结构信息的难度很大, 通常只能根据数据的格式 (段落、字体、缩进距离等) 并结合启发性规则来进行推测, 在可抽取的数据类型、正确性以及通用性等方面都不够理想。

(四) SQL 2005查询XML数据优化

SQLserver2005为XML数据处理提供了广泛的支持, 一是XML数据可以自然地存储在XML数据类型列中, 管理XML本原数据格式提供以下功能:

l.创建XML索引, 提高数据的访问效率;

2. 支持XQuery语法, 让传统的SQL语言增加了访问XML数据的功能。二是利用CLOB或者varchar类型来保存XML数据。

实验创建了对应的两个表 (图2) PublisherXML表的的book字段采用xml类型, Publisher表的book字段采用varchar类型, 定义如下:

(五) 查询优化

在XML类型的列上进行查询效率低下的主要原因有:

1. XML类型的数据往往非常的大, 结构比较复杂, 直接利用XQuery尽完成查询需要复杂的结构连接计算, 这要反复的进行磁盘I/O而耗费大t的时间;

2.建立的索引不恰当, SQL server 2005支持在XML类型上建立XPath、ProPerty和value三种索引, 应该根据不同的查询需求建立相应的索引。

针对这两个问题, 采取以下两个措施进行改进:

l.对包含XML列的表建立附加列或者附加表, 并建立索引。

如果针对少量元素和属性值进行查询, 可以将这些数据提升到关系列中, 即建立附加列。当检索整个XML实例, 只对一部分XML数据进行查询, 并且将被提升的列编入索引。附加列是同一表中的计算列。如:

(1) 为PublisherXML表book列的title元素创建用户自定义函数:

Create function udf_get_book_title (@xDataxml)

(2) 向PublisherXML表添加由上述自定义函数创建的计算列:

Alter table PublisherXMLadd title as dbo.udf_get_book_title (book)

(3) 在publisherXML表的计算列title上建立索引

Crete index idxTitle on PublisherXML (title)

2.对查询习惯进行分析, 根据不同的查询习惯产生对应的XML索引类型。

定义查询窗口, 利用XQuery对XML类型数据进行查询的总次数为t, 某种类型的查询为q (xpath、property或者value) , 则查询窗口w=q/t (<=w<=l) 。

算法:根据查询类型的不同分别建立XPath、property或者value索引以提高查询效率, 输入:XML数据的查询和一个包含XML列的表;输出:Xpath、property、value索引。

(六) 结束语

在XML数据源中对大量的信息进行有效地查询, 对用户而一言, 就显得非常重要, 它能帮助用户更方便更有效更快捷地获取信息。在SQLserver2005中存放本原xML数据, 对这类数据的优化是一个新的课题。该文分析了传统优化方法在对基于SQLServer2005的xML数据查询优化过程中存在的误区, 给出了利用建立附加表或者附加列和查询窗口的方法和策略进行优化, 有效提高了查询XML数据的效率。

摘要:SQLScrver2005关系数据库管理系统提供了强大的管理XML数据的功能, 但它用传统的通过建立索引等方式进行查询效果并不理想。文章分析了SQLserver2005在查询XML数据过程中低效的原因, 提出了通过建立附加表或者附加列以及相应索引、利用查询窗口等措施来优化查询。实验结果表明, 该方法能有效提高查询XML数据的效率。

关键词:半结构化,XML数据,附加表

参考文献

[1]孟小峰, 王宇, 王小峰.XML查询优化研究[J].2006.软件学报.

[2]覃遵跃, 蔡国民, 黄云.SQL Server2005查询XML数据优化研究[J].东莞理工学院学报.

结构化查询语言 篇6

1 工作基础

1.1 基本概念

1.1.1 数据流

数据流被看成是一系列实时、连续、有序、无限的数据点组成的序列 (X0, X1, …, Xi, …, Xn, …) 。数据项可能以平缓的流速进入, 也可能爆发地出现, 而且只出现一次。

定义1 (数据流) :数据流S是一个由按照时间递增顺序排列的元组组成的无穷数据序列, S={, , …, , …, , …}, 其中i≤j并且ti≤tj, si是时刻ti出现的数据元素。S随时间不断增加。

由定义说明, 数据流中的每个数据元素都与一个时间戳对应, 而且时间戳是随时间递增的。

1.1.2 滑动窗口

由于数据流的流速以及流量非常大, 不可能完全存储再处理, 因此, 引入了窗口模型的概念。数据流模型根据不同的时序范围可以划分成多种子模型, 包括界标模型 (Landmark Model) 、滑动窗口模型 (Sliding Window Model) 和快照模型 (Snap Shot Model) [4]。界标模型和滑动窗口模型由于要不断地处理新来的数据, 更接近于真实的应用, 因而得到更加广泛深入地研究。滑动窗口分为基于时间的滑动窗口 (例如最近10 min内到达的元组组成的窗口) 和基于元组个数的滑动窗口 (例如最近的1 000个元组组成的窗口) 两种[5], 本文中将使用基于时间的滑动窗口。其定义如下:

定义2 (滑动窗口) :设T是一个时间跨度, t是当前时刻, 数据流S在[t-T, t]范围内的数据称为S的一个滑动窗口, 记作W[t-T, t], 简写为W[T]。T称为窗口的大小或者是窗口的宽度。

1.1.3 查询类型

在典型的数据流应用中, 最重要的一类查询是连续查询 (Continuous Queries, CQ) 。这些查询一次注册, 长期运行[6]。随着新数据的不断到达, 系统处理这些查询, 及时地产生新的查询结果, 因此是数据触发查询执行。基本的连续查询操作包括:选择 (Select) 、投影 (Project) 、Top-k查询、聚集 (Aggregation) 和多数据流连接 (Join) 等。

除了常见的连续查询外, 数据流上另外一类查询是即席 (Ad-hoc) 查询。这类查询可能涉及到已经被处理的数据, 甚至被丢弃的数据。为了处理Ad-hoc查询, 系统常使用一些概要数据结构保存所有到达数据的摘要。通常, 这些概要数据结构被称为Synopses或者Sketches, 它们占用少量的内存。

1.2 混合实时查询模型

混合查询负载是非常普遍的, 即系统不仅需要支持连续查询的处理, 也要支持周期性查询和一次性查询。所有涉及到两类或两类以上查询的模型, 都可以称为混合查询模型 (Mixed Query Model) 。文献[2]提出了一种数据流上的混合实时查询模型 (Mixed Real-time Query Model) , 该模型包括周期性查询和非周期性查询。周期查询按照一定的时间间隔反复执行, 例如查询每小时内某支股票的平均价格。非周期查询通常由外部事件动态驱动, 例如传感器监测到异常事件后发送回环境数据, 从而触发连续性查询的执行。

基于所提出混合实时查询模型, 将所有查询分为三类:

(1) 周期性查询:由系统周期性触发, 多次执行。周期性查询对窗口内的所有数据进行处理, 生成查询结果。即使窗口内没有新数据到达, 查询也要定期执行。

(2) 连续性查询:非定期数据到达触发, 多次执行。这种查询采用数据订阅方式, 每当有新数据到达时, 系统生成一个查询实例, 执行查询处理。

(3) 一次性查询:用户提交, 执行一次。

连续查询和一次查询构成了非周期性查询。

2 混合实时查询语言CQL-MixedRT

CQL (Continuous Query Language) 语言[7]是由美国Stanford大学STREAM项目组提出的一种数据流连续查询语言。该语言功能强大, 能够实现滑动窗口上的各种操作。为了方便应用程序使用数据流查询服务, 对CQL语言进行了扩展, 加入了查询周期、查询截止期和最低采样率等属性描述子句, 形成了一种新的对CQL扩展的连续查询语言, 称之为支持混合实时查询的数据流操纵语言CQL-MixedRT (A Continuous Query Language for Mixed Realtime Query) 。CQL-MixedRT可以实现数据流的注册、删除, 以及各种类型实时查询的注册、修改和删除。按照处理对象的不同, 该语言分为数据流定义语言和查询操纵语言两部分。

2.1 数据流定义语言

2.1.1 注册数据流

用于数据流注册的语句语法格式如下:

上述语法格式包含数据流的名称和各个属性的名称、类型、约束等内容, 其中REGISTER STREAM:注册数据流命令关键字;

Stream-name:自命名的数据流名称字符串;

column-def:列信息定义, 包括列名、数据类型以及约束, 多个列同逗号隔开。如可根据文献[8]中的示例使用此语言向系统注册数据流:

[例1]注册车辆位置数据流 (Veh Loc Stream) 中包含8个属性:时间戳、车辆ID、车速、所在高速公路号、车道号、方向、路段号和路段中所处的位置。使用CQL-MixedRT描述为:

2.1.2 删除数据流

用于数据流删除的语句语法格式如下:

其中stream-name为数据流的名称。当数据流被删除后, 该数据流上所有的查询将不再有效。

[例2]将注册的车辆位置数据流 (Veh LocStream) 从系统中删除。使用CQL-MixedRT描述为

2.2 查询操纵语言

数据操纵语言主要有各种类型实时查询注册、修改以及删除。

2.2.1 注册查询

用于查询的注册的语句语法格式如下:

其中query-name为查询的名称。与CQL语言相比, CQL-MixedRT增加了对查询类型和实时属性的支持。PERIOD子句给出了周期性查询的周期。如果不指定PERIOD子句, 那么该查询为一个非周期性查询。DEADLINE子句表明了查询的相对截止期, 如果该子句没有指定, 那么该查询为一个非实时查询。而DECAY_RATIO子句表示软实时查询的价值衰减率。DURATION字段指明了查询的开始时间和结束时间, 即查询的生命期。如果该值等于开始时间等于结束时间, 那么该查询是一个一次性查询。如果该子句没有指定, 那么该查询从注册一刻开始, 永不过期。SAMPLE_RATIO子句指明了查询允许的最低数据采样率。如果该子句没有指定, 那么该查询使用系统默认的最低数据采样率。

2.2.2 修改查询

用于修改查询的语句语法格式如下:

其中query-name是查询名称, PERIOD、DEAD-LINE、DECAY_RATIO、DURATION、SAMPLE_RATI-O等子句的含义2.2.1中已介绍, 在此不再赘述。

2.2.3 删除查询

用于删除查询的语句语法格式如下:

其中query-name是查询名称。

以上定义的CQL-MixedRT中五个查询语句的语法, 基本涵盖了数据流和实时查询的处理, 并且提供了对于实时查询的周期、截止期等属性的定义功能, 能够满足混合实时查询的数据流系统查询需求。

3 示例

下面以交通监控系统为例介绍数据流应用的典型场景。交通监控系统包括:摄像头、测速仪等监测设备, 后台数据处理系统和监控客户端。监测仪器将采集的数据源源不断地传到数据处理系统。数据处理系统对数据进行识别、匹配、分析, 将处理结果发送给各个监控客户端, 甚至可以向普通用户提供查询服务。假设图像数据经过处理后, 得到由记录组成的数据流。主要的数据流是车辆位置数据流, 系统中已经存储的数据表包括车辆位置信息和嫌疑车辆信息如表1和表2所示。

这个应用中, 典型查询的查询需求包括车辆超速报告、交通事故监测、嫌疑车辆跟踪、路况信息周期报告等。

(1) 车辆超速报告:记录超速车辆的ID、车速、位置等信息。

(2) 交通事故监测:两辆或多辆车停在同一路段超过2 min。

(3) 嫌疑车辆跟踪:查询指定车辆ID的车速、位置, 报告嫌疑车辆数据表中车辆位置 (与数据表连接处理) 。

(4) 路况信息周期报告:报告主要交通路段最近一小时内的平均车速和车流量。

假设车辆位置数据流 (Veh Loc Stream) 与违章车辆数据流 (Veh Violat Stream) 已经通过REGISTER STREAM语句在处理系统中注册过。下面通过三个实际示例说明使用CQL-MixedRT语言可很好地描述各种实时查询请求。

[例3]每隔1 min, 计算一次行驶在1号公路上的每一辆汽车的平均车速, 该查询的截止期为10 s。此查询请求属于一个周期性实时查询, 使用CQL-MixedRT语言描述为

[例4]连续跟踪车辆ID为123的汽车车速和行驶位置。该查询的截止期为1 s。此请求为一个非周期性实时查询的连续查询, 是数据流系统中最常见的查询请求, 只注册一次, 连续执行, 使用CQL-MixedRT语言描述为

[例5]查询当前时刻车速超过50 km/h的所有车辆的ID、车速和位置。该查询的截止期为1 s。此请求为一个非周期性实时查询的一次查询, 可用DURATION字段声明, 表明此查询仅仅被执行一次, 使用CQL-MixedRT语言描述为

4 结束语

为了满足混合实时查询数据流系统的需求, 本文对连续查询语言CQL进行扩展, 提出了一种声明性、类SQL的实时连续查询语言MixedRT-CQL, 描述了其主要查询语句的语法格式描述以及典型实际示例。目前, 此语言已经在混合实时查询数据流系统原型中实现, 但仍需进一步完善。

摘要:由于数据流应用中混合查询需求的普遍性, 使得对混合实时查询模型, 以及描述其操作语言研究变得尤为重要。在已有工作基础上提出了一种声明性、类SQL、能够支持混合实时查询数据流系统的操作语言MixedRT-CQL。该语言包括数据流定义和数据流操纵语言两部分, 可支持周期及非周期性查询请求。典型实例研究表明该语言能够全面地描述数据流系统中的混合实时查询需求, 具有重要的研究与实用价值。

关键词:数据流,数据流管理系统,操作语言,混合实时查询

参考文献

[1] Babu S, Widom J.Continuous queries over data streams.SIGMOD Record, 2001;30 (3) :109—120

[2] Li Xin, Wang Hongan.Adaptive real-time query scheduling over data streams.Proceedings of the VLDB PhD Workshop (VLDBPhD) , 2007

[3] 周杰, 毛宇光.数据流查询语言的研究与实现.计算机技术与发展, 2008;18 (1) :14—16

[4] 金澈清, 钱卫宁, 周傲英.流数据分析与管理综述.软件学报, 2004;15 (8) :1172—1181

[5] Babcock B, Babu S, Datar M, et al.Models and issues in data streams.Proceedings of the 21st ACM SIGACT-SIGMOD-SIGART Symposium on Principles of Database Systems, 2002:1—16

[6] Terry D, Goldberg D, Nichols D, et al.Continuous queries over append-only databases.San Diego, California:Proceedings of the 1992ACM SIGMOD International Conference on Management of Data, 1992:321—330

[7] Arasu A, Babcock B, Widom J.The CQL continuous query language:semantic foundations and query execution.Stanford University Technical Report, October 2003

结构化查询语言 篇7

为了避免XML多分支树查询过程中多条单路径的连接操作而带来的查询效率低的问题,本文提出一种基于递归思想的多分支树查询算法算法TBQ,很好的解决了这类的查询。该算法是将多分支树的每个结点进行查询,然后根据查询结果进行匹配。实验表明,与现有的XML多分支树查询算法pathsjoin相比,算法TBQ的查询效率更高。

1 XML文档的编码

为了快速的识别一篇XML文档结点之间的祖先后代关系,本文对XML文档采用流编码。思路如下:将XML文档看作是流文件,XML文档树中的每一个结点在解析文档时根据每个标签在文档中出现的先后次序赋予两个序号begin和end。其中begin代表文档标签的开始位置,end代表文档标签的结束位置。祖先结点u的编码区间[begin(u),end(u)]包含后裔结点v的编码区间[begin(v),end(v)]。XML文档树及其编码如图1所示。

2 XML文档树的索引创建方法

一般多分支树的查询算法都是对XML文档树进行遍历,由于遍历XML文档树要在内存中完成,这样的算法效率比较低。本文提出一种为XML文档树建立索引,主要的思想是将XML文档的各个结点按结点的名称聚类存放,同时记录下每个结点的流编码。图1所对应的XML文档树及其编码,其部分结点索引如表1所示。

3 多分支树查询算法TBQ

下面以查询语句PLAY[/ACT[//SCENE[/SPEECH][/STAGEDIR]][//SPEECH[/SPEAKER][/LINE]]][//PGROUP[/PERSONA][/GRPDE-SCR]]为例,介绍多分支查询树算法TBQ的基本思想:

Step1:把文档树每个结点按流编码编码;

Step2:创建XML文档树的索引,遍历编码后的文档树,对每个文档树的结点按其名称存放;

Step3:对多分支树结构的查询条件采用递归算法。

例如,在图1所示的XML文档树中要查询如图3所示的多分支树结构。首先,定位到查询树的第一个叶子结点SPEECH。在索引结构中,找出SPEECH的结点信息:(24,37),(45,52),(85,92),(73,80),(53,66);同理可得出STAGEDIR的结点信息:(21,23),(38,40),(41,43),(81,83);在得出的这些结点中,要判断哪两个结点信息是符合多分支树中结点的关系首先是要判断这两个结点是否有共同的祖先或父结点SCENE;通过索引结构可以得知SCENE的结点信息为SCENE(17,44),(72,84)。

判断过程如下:首先在多分支树查询条件中,SPEECH为左结点,STAGEDIR为右结点,那么必须满足SPEECH.begin

算法TBQ描述如下:

4 实验及结果分析

为了验证算法TBQ的效率,我们利用VC++实现了算法TBQ。实验环境为:CORE2,2.93G CPU,2G内存,Windows XP。实验数据为莎士比亚XML数据集[8]。

在实验中,我们测试了莎士比亚XML数据集的5个分支查询语句,查询语句如表2所示。对于多分支树查询,分别使用算法TBQ和算法pathjoins进行查询。它们的查询效率如图4所示,结果表明算法TBQ的性能明显优于算法pathjoins。

由图4可以看出,算法TBQ的执行效率要优于算法pathjoins。

5 结束语

对XML文档实现多分支树查询,一般方法是将多分支树拆分成若干个单路径,对单路径分别进行查询,然后再对单路径查询结果进行连接操作,这样的算法效率低。而本文提出的算法TBQ为实现XML多分支树快速查询,提出了先查询每个查询树的树结点然后将查询结果进行匹配的有效方法,从而大大提高了查询效率。

摘要:目前XML单路径查询和简单的分支路径查询已经得到了较好地解决,但如何高效地实现XML多分支树查询还没有很好的方法。该文提出了算法TBQ,该算法将多分支树的每个结点进行查询,然后根据查询结果进行匹配。实验表明,与现有的XML多分支树查询算法pathsjoin相比,算法TBQ的查询效率更高。

关键词:XML查询,XML多分支路径查询,XML编码,XML索引

参考文献

[1]Kaushik R,Shenoy P,Bohannon P.Exploiting Local Similarity for Efficient Indexing of Paths in Graph Structured Data[C].10th Interna-tional Conference on Database Theory,San Jose,California,USA,2002:129-140.

[2]Chen Q,Lim A,Ong K W.D(k)-index:An adaptive structural summary for graph-structured data[C].Proc.of the 2003 ACM SIGMOD Intl.Conf.on Management of Data,San Diego,California,USA,2003:134-144.

[3]Chung C,Min J,Shim K.APEX:An adaptive path index for XML data[C].Proc.of the 2002 ACM SIGMOD Intl.Conf.on Management ofData,Madison,Wisconsin,2002:121-132.

[4]Milo T,Suciu D.Index structures for path expressions[C].7th International Conference on Database Theory,Jerusalem,Israel,1999:277-255.

[5]Quanzhong Li,Bongki Moon.Indexing and Querying XML Data for Regular Path Expressions[C].Proceedings of the 27th VLDB Confer-ence,Roma,Italy,2001:361-370.

[6]Roy Goldman,Jennifer Widom.DataGuide:enabling query formulation and optimization in semistructured databases[C].23th InternationalConference on Very Large Data Bases,pages,Athens,Greece,1997:436-445.

[7]Bruno N,Koudas N,Srivastava D.Holistic Twig Joins:Optimal XML Pattern Matching[C].Franklin M J.Proceedings of the 21th ACMSIGMOD International Conference on Management of Data.Madison,Wisconsin,USA,2002:310-321.

上一篇:煤矿党建思想政治教育下一篇:案件性质