Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91303327
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303328
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303319
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303330
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303331
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303332
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303333
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303334
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303335
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303336
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303337
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303338
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303339
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303340
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303341
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303342
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303343
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303334
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303345
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303346
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303347
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303348
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303349
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303350
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303351
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303352
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303353
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303354
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303355
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303356
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303357
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303358
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303349
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303360
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303361
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303362
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303363
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303364
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303365
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303366
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303367
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303368
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303369
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303370
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303371
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303372
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303373
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303364
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303375
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303376
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303377
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介(5)-sdccf-ChinaUnix博客
  • 博客访问: 91303378
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 22:11:10

developerWorks



根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89863) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89862) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89861) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89860) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89859) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89858) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89857) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89856) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89855) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89853) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89852) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89851) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89850) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89849) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89848) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89847) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89846) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89845) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89844) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89843) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89842) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89841) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89840) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89839) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89838) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89837) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89836) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89835) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89834) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89833) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89832) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89831) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89830) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89829) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89828) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89827) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89826) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89825) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89824) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89823) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89822) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89821) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89820) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89819) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89818) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89817) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89816) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89815) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89814) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89813) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


根据 XML 元素值进行过滤的查询

用户常常希望在 XQuery 中指定基于 XML 的过滤条件。这也很容易。在本节中,您将看到如何让前面的 XQuery 示例更有选择性。

我们先研究一下如何返回邮政编码为 95116 的所有客户的邮政地址。可以将 where 子句结合进 XQuery,从而根据 DB2 中存储的示例 XML 文档中的 zip 元素值对结果进行过滤。将一个 where 子句添加到 清单 19 中的 FLWOR 表达式中,从而只获得感兴趣的地址,如下所示:



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip="95116"
return $y

添加的 where 子句相当简单。for 子句依次将变量 $y 绑定到每个地址。这个 where 子句包含一个简短的路径表达式,它从每个地址导航到其中嵌套的 zip 元素。仅当这个 zip 元素的值等于 95116 时,这个 where 子句才为真(因此获得这个地址)。

因为只有一个客户的邮政编码为 95116,返回的结果是:



                    
5401 Julio Ave. San Jose CA 95116

可以通过在路径表达式中添加谓词来获得同样的结果,如下所示:



                    
xquery
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

当然,通过根据邮政编码值进行过滤,也可以返回与街道地址无关的元素。还可以在一个查询中根据多个 XML 元素值进行过滤。下面的查询返回那些住在 San Jose 市或者邮政编码为 95032(这是加利福尼亚 Los Gatos 的邮政编码)的客户的电子邮件信息。



                    
xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email

这个示例修改了 for 子句,从而将变量 $y 绑定到 Client 元素而不是 Address 元素。这样就可以根据子树的一部分(Address)对 Client 元素进行过滤,但是返回子树的另一部分(email)。where 子句和 return 子句中的路径表达式必须相对于绑定到变量(在这个示例中是 $y)的元素。

同样的查询可以更精确地表示为路径表达式:



                    
xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email;

对于 clients 表中的示例数据,前面两个查询的输出是:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com


	lennonfan36@hotmail.com


如果观察 清单 26 中的查询输出,您可能会发现返回的结果在两个方面与 SQL 程序员的预期有显著差异:

  • 对于没有提供电子邮件地址的客户,没有返回 XML 数据。

    在我们的 示例数据 中,有四个客户满足查询的选择条件(住在 San Jose 或者邮政编码为 95032),但是这一事实没有反映在查询结果中。为什么呢?因为其中两个客户的记录中没有 email 元素。因为 XQuery 不使用空值,这些 “缺失的” 信息不会反映在结果中。

  • 输出没有表明哪些电子邮件地址来自同一个 XML 文档。

    仔细看 示例数据,就会发现 清单 26 所示的最后两个电子邮件地址包含在同一个 XML 文档中(也就是说,它们属于同一个客户)。这一点在输出中看不出来。

在某些情况下,这两种表现可能正是我们需要的,但在其他情况下可能不理想。例如,如果希望向记录的每个帐号发送一封电子邮件,那么会遍历 XML 格式的客户电子邮件地址列表,这在应用程序中很容易办到。但是,如果希望向每个客户只发送一次通知,包括那些只提供了街道地址的客户,那么前面的 XQuery 就不够了。

可以以多种方式改写前面的查询,让返回的结果以某种方式表达出缺失的信息,并表明多个电子邮件地址来自同一个客户记录(即,同一个 XML 文档)。在本教程后面,您将学到如何编写这样的查询。但是,如果只是希望返回的列表中对于每个客户只包含一个电子邮件地址,那么只需稍稍修改前面的查询:



                    

xquery 
for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="95032" or $y/Address/city="San Jose"
return $y/email[1]

(或)

xquery 
db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="95032"  
or Address/city="San Jose"]/email[1];


这两个查询都指示 DB2 返回在符合条件的 XML 文档(客户联系记录)中找到的第一个 email 元素。如果对于某个符合条件的客户没有找到电子邮件地址,那么它不返回这个客户的任何信息。因此,这两个查询产生下面的输出:



                    

	love2shop@yahoo.com


	beatlesfan36@hotmail.com

阅读(89812) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~