WEB开发网
开发学院数据库DB2 使用 XQuery 查询 DB2 XML 数据 阅读

使用 XQuery 查询 DB2 XML 数据

 2009-11-11 00:00:00 来源:WEB开发网   
核心提示: 通过在路径表达式中添加一个谓词也可以得到相同的结果,如 清单 11 所示:清单 11. 带附加过滤谓词的路径表达式xquerydb2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

通过在路径表达式中添加一个谓词也可以得到相同的结果,如 清单 11 所示:


清单 11. 带附加过滤谓词的路径表达式
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"] 

当然,您可以根据邮政编码的值进行过滤,返回与街道地址无关的元素。而且,还可以在单个查询中根据多个 XML 元素值进行过滤。下面的查询返回居住在纽约市具有特定邮政编码(10011)的地区或圣何塞(San Jose)任何地方的客户的电子邮件信息。


清单 12. 在 FLWOR 表达式中根据多个 XML 元素值过滤
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client 
where $y/Address/zip="10011" or $y/Address/city="San Jose" 
return $y/email 

注意,我们更改了 for 子句,从而将变量 $y 绑定到 Client 元素,而不是绑定到 Address 元素。这样一来便可以根据 Client 元素的一部分子树(Address)过滤该元素,而返回另一部分子树(email)。where 子句和 return 子句中的路径表达式必须相对被绑定到变量(这里是 $y)的元素来编写。

通过路径表达式可以更简单地表达相同的查询:


清单 13. 使用路径表达式根据多个 XML 元素值进行过滤
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="10011"  
or Address/city="San Jose"]/email; 

仔细观察该查询的两种不同形式,其中比较隐蔽的一点是,与 SQL 程序员的预期相比,返回的结果在两个方面存在不同之处:

返回的结果中不包含那些符合条件但是没有提供电子邮件地址的客户的 XML 数据。换句话说,如果有 1000 个客户居住在圣河塞或邮政编码为 10011 的地区,其中有 700 个客户提供了电子邮件地址,那么返回的将是这 700 个电子邮件地址。这是由于前面提到的 XQuery 与 SQL 之间存在的基本差异 —— XQuery 不使用 null。

上一页  3 4 5 6 7 8 9 10  下一页

Tags:使用 XQuery 查询

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接