正在看的db2教程是:使用XQuery查询DB2XML数据。关于XQueryXQuery在很多关键方面都与SQL有所不同,这很大程度上是因为这两种语言是针对两种具有不同特征的数据模型
正在看的db2教程是:使用XQuery查询DB2 XML数据。

关于 XQuery
XQuery 在很多关键方面都与 SQL 有所不同,这很大程度上是因为这两种语言是针对两种具有不同特征的数据模型而设计的。XML 文档包含层次结构,并且有其固有的顺序。而基于 SQL 的数据库管理系统所支持的表格数据结构是平面的(flat),并且是基于集合的;因此,行之间不存在顺序。

这两种数据模型的不同导致它们各自的查询语言有很多基本的不同。例如,XQuery 支持路径表达式,以允许程序员在 XML 的层次结构中导航,而纯 SQL(没有 XML 扩展)则不支持。XQuery 支持有类型的和无类型的数据,而 SQL 数据总是以指定类型定义的。XQuery 没有 null 值,因为 XML 文档会忽略缺失的或未知的数据。当然,SQL 使用 null 来表示缺失的或未知的数据值。XQuery 返回一系列的 XML 数据,而 SQL 则返回各种 SQL 数据类型的结果集。

这只是 XQuery 和 SQL 之间的基本不同点中的一部分。提供一份详尽的列表超出了本文的范围,不过即将发表的 IBM Systems Journal 将更详细地讨论这些语言的不同。现在我们就探索一下 XQuery 语言的一些基本方面,并看看如何使用它来查询 DB2 Viper 中的 XML 数据。

样本数据库

本文中的查询访问在 “DB2 Viper 快速入门”(developerWorks,2006 年 4 月)中创建的样本表。清单 1 给出了样本数据库中 “items” 和 “clients” 表的定义:

清单 1. 表定义



create table items (

id int primary key not null,

brandname varchar(30),

itemname varchar(30),

sku int,

srp decimal(7,2),

comments xml

)

create table clients(

id int primary key not null,

name varchar(50),

status varchar(10),

contactinfo xml

)

图 1 中显示了 “items.comments” 列中包含的样本 XML 数据,而 图 2 中则显示了 “clients.contactinfo” 列中包含的样本 XML 数据。随后的例子查询将引用这两个 XML 文档中的一个或两个中的特定元素。

图 1. 存储在 “items” 表的 “comments” 列中的样本 XML 文档

使用XQuery查询DB2 XML数据(图一)

图 2. 存储在 “clients” 表的 “contactinfo” 列中的样本 XML 文档

使用XQuery查询DB2 XML数据(图二)

查询环境

本文中的所有查询都是通过交互方式发出的。这可以通过 DB2 命令行处理器或 DB2 Control Center 的 DB2 Command Editor 来完成。本文中的屏幕图像和说明主要使用后一种方式。(DB2 Viper 还附带了一个基于 Eclipse 的 Developer Workbench,它可以帮助程序员以图形化的方式构造查询。本文不讨论应用程序开发问题和 Developer Workbench。)

要使用 DB2 Command Editor,启动 Control Center,并选择 Tools -> Command Editor。这时将出现如 图 3 所示的窗口。在上面的面板中输入查询,单击左上角的绿色箭头运行该查询,然后可以在下面的面板中或者在 “Query Results” 选项卡中查看输出。

图 3. DB2 Command Editor,可以从 DB2 Control Center 中启动

使用XQuery查询DB2 XML数据(图三)

XQuery 例子

与在 “用 SQL 查询 DB2 XML 数据” 中一样,本文将逐步讲解一些常见的业务,并展示如何使用 XQuery 来对 XML 数据的请求。本文还探索了需要将 SQL 嵌入在 XQuery 中的更复杂的情景。

XQuery 提供了一些不同类型的表达式,这些表达式可以随意组合。每个表达式返回一系列的值,这些值又可以作为其他表达式的输入。最外面的表达式的结果就是查询的结果。

本文主要讨论两种重要的 XQuery 表达式:“FLWOR” 表达式和路径表达式。FLWOR 表达式非常像 SQL 中的 SELECT-FROM-WHERE 表达式 —— 它用于对由多项组成的一个列表进行迭代,并且可以选择返回通过在每一项上进行计算得到的值。而路径表达式则可以在分层的 XML 元素之间进行导航,并返回在路径末端找到的元素。

与 SQL 中的 SELECT-FROM-WHERE 表达式类似,XQuery FLWOR 表达式可以包含数个以某个关键词开头的子句。在 FLWOR 表达式中,有以下用于作为子句开头的关键字:

  • for:对输入序列进行迭代,依次将一个变量绑定到每个输入项
  • let:声明一个变量并为之赋值,可能是一个包含多项的列表
  • where:指定过滤查询结果的标准
  • order by:指定结果的排序顺序
  • return:定义所返回的结果
XQuery 中的路径表达式由一系列的 “步(step)” 组成,之间以斜杠隔开。在最简单的形式中,每一步在 XML 层次中向下导航,以发现由前一步返回的元素的孩子。路径表达式中的每一步还可以包含一个谓词,用于过滤该步返回的元素,只保留某种条件的元素。例如,假设变量 $clients 被绑定到包含 <Client> 元素的 XML 文档的一个列表,则 4 步路径表达式 $clients/Client/Address[state = "CA"]/zip 将返回居住在加利福尼亚的客户的邮政编码。

在很况下,可以任意使用 FLWOR 表达式或路径表达式编写查询。

使用 DB2 XQuery 作为顶层查询语言

要在 DB2 Viper 中直接执行 XQuery(而不是将它嵌入在 SQL 语句中),必须以关键字 xquery 作为查询的开头。这个关键字将指示 DB2 调用它的 XQuery 解析器来处理请求。注意,只有在使用 XQuery 作为最外层(顶层)语言的时候才需要这么做。如果是将 XQuery 表达式嵌入在 SQL 中,则不需要在语句之前加上 xquery 关键字。但是,本文使用 XQuery 作为基本语言,因此所有查询之前都加上 xquery。

当 XQuery 被作为顶层语言时,它需要一个输入数据的源。XQuery 获得输入数据的一种方式是调用一个名为 db2-fn:xmlcolumn 的函数,调用时带一个参数,表明 DB2 表中 XML 列所在的表名和该列的列名。db2-fn:xmlcolumn 函数返回存储在给定列中的一系列的 XML 文档。例如,下面的查询返回一系列包含客户联系方式信息的 XML 文档:

清单 2. 返回客户联系方式数据的简单 XQuery



x

[1] [2] [3] [4] [5] 下一篇

最新资讯
2021年“全球十大突破性技术”公布:mRNA疫苗、多技能AI等上榜

2021年“全球十大突破

日前,《麻省理工科技评论》2021“全球十大突破性技术”
引入深圳国资战略股东,苏宁易购还在张近东手里

引入深圳国资战略股东

2月28日晚,苏宁易购发布公告表示,公司引入深国际、鲲鹏
疯狂的赌徒,货拉拉创始人的神秘发家史

疯狂的赌徒,货拉拉创始

对公司经营行为负有最大责任的CEO周胜馥,到底是怎么发
复盘2020年,谁是最赚钱的带货主播?

复盘2020年,谁是最赚钱

事实上,带货佣金最高的主播是李佳琦。
揭秘饭圈灰色产业链,“站姐”们和那些说不清的集资

揭秘饭圈灰色产业链,“

数据和流量成为了衡量演艺人员人气和商业价值的重要依
特斯拉员工录取率小于0.5% 连门卫马斯克都亲自面试

特斯拉员工录取率小于

Space X的工程师大部分是顶尖学府的尖子生,前1000名员
最新文章
Db2数据库中常见的堵塞问题分析与处理方法

Db2数据库中常见的堵

IBM的DB2是关系数据库的鼻祖,最近更加的深入了学习了,所
解决db2事务日志已满及日志磁盘空间已满问题办法详解

解决db2事务日志已满

本文主要讲解了解决db2事务日志已满及日志磁盘空间已
分析DB2活动日志满的原因及解决DB2日志满方法与避免方案

分析DB2活动日志满的

本文简单地介绍了DB2中日志的使用、活动日志以及首个
使用SQL Server连接服务器访问DB2 Server

使用SQL Server连接服

这篇文章主要介绍了使用SQL Server连接服务器访问DB2
db2v8的pdf文档资料

db2v8的pdf文档资料

正在看的db2教程是:db2v8的pdf文档资料。db2v8的pdf文
DB2 9(Viper)快速入门

DB2 9(Viper)快速入门

正在看的db2教程是:DB29(Viper)快速入门。为了帮助您快