Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104876543
  • 博文数量: 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博客
  • 博客访问: 104876534
  • 博文数量: 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博客
  • 博客访问: 104876545
  • 博文数量: 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博客
  • 博客访问: 104876546
  • 博文数量: 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博客
  • 博客访问: 104876547
  • 博文数量: 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博客
  • 博客访问: 104876548
  • 博文数量: 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博客
  • 博客访问: 104876549
  • 博文数量: 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博客
  • 博客访问: 104876550
  • 博文数量: 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博客
  • 博客访问: 104876551
  • 博文数量: 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博客
  • 博客访问: 104876552
  • 博文数量: 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博客
  • 博客访问: 104876553
  • 博文数量: 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博客
  • 博客访问: 104876554
  • 博文数量: 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博客
  • 博客访问: 104876555
  • 博文数量: 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博客
  • 博客访问: 104876556
  • 博文数量: 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博客
  • 博客访问: 104876557
  • 博文数量: 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博客
  • 博客访问: 104876558
  • 博文数量: 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博客
  • 博客访问: 104876549
  • 博文数量: 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博客
  • 博客访问: 104876560
  • 博文数量: 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博客
  • 博客访问: 104876562
  • 博文数量: 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博客
  • 博客访问: 104876563
  • 博文数量: 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博客
  • 博客访问: 104876564
  • 博文数量: 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博客
  • 博客访问: 104876565
  • 博文数量: 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博客
  • 博客访问: 104876566
  • 博文数量: 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博客
  • 博客访问: 104876567
  • 博文数量: 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博客
  • 博客访问: 104876568
  • 博文数量: 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博客
  • 博客访问: 104876569
  • 博文数量: 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博客
  • 博客访问: 104876570
  • 博文数量: 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博客
  • 博客访问: 104876571
  • 博文数量: 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博客
  • 博客访问: 104876572
  • 博文数量: 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博客
  • 博客访问: 104876573
  • 博文数量: 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博客
  • 博客访问: 104876564
  • 博文数量: 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博客
  • 博客访问: 104876575
  • 博文数量: 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博客
  • 博客访问: 104876576
  • 博文数量: 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博客
  • 博客访问: 104876577
  • 博文数量: 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博客
  • 博客访问: 104876578
  • 博文数量: 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博客
  • 博客访问: 104876579
  • 博文数量: 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博客
  • 博客访问: 104876580
  • 博文数量: 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博客
  • 博客访问: 104876581
  • 博文数量: 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博客
  • 博客访问: 104876582
  • 博文数量: 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博客
  • 博客访问: 104876583
  • 博文数量: 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博客
  • 博客访问: 104876584
  • 博文数量: 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博客
  • 博客访问: 104876585
  • 博文数量: 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博客
  • 博客访问: 104876586
  • 博文数量: 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博客
  • 博客访问: 104876587
  • 博文数量: 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博客
  • 博客访问: 104876588
  • 博文数量: 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博客
  • 博客访问: 104876579
  • 博文数量: 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博客
  • 博客访问: 104876590
  • 博文数量: 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博客
  • 博客访问: 104876591
  • 博文数量: 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博客
  • 博客访问: 104876592
  • 博文数量: 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博客
  • 博客访问: 104876593
  • 博文数量: 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博客
  • 博客访问: 104876594
  • 博文数量: 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博客
  • 博客访问: 104876595
  • 博文数量: 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

阅读(91883) | 评论(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

阅读(91882) | 评论(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

阅读(91881) | 评论(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

阅读(91880) | 评论(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

阅读(91879) | 评论(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

阅读(91878) | 评论(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

阅读(91877) | 评论(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

阅读(91876) | 评论(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

阅读(91875) | 评论(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

阅读(91874) | 评论(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

阅读(91873) | 评论(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

阅读(91872) | 评论(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

阅读(91871) | 评论(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

阅读(91870) | 评论(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

阅读(91869) | 评论(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

阅读(91868) | 评论(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

阅读(91867) | 评论(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

阅读(91866) | 评论(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

阅读(91865) | 评论(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

阅读(91864) | 评论(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

阅读(91863) | 评论(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

阅读(91862) | 评论(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

阅读(91861) | 评论(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

阅读(91860) | 评论(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

阅读(91859) | 评论(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

阅读(91858) | 评论(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

阅读(91857) | 评论(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

阅读(91856) | 评论(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

阅读(91855) | 评论(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

阅读(91854) | 评论(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

阅读(91853) | 评论(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

阅读(91852) | 评论(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

阅读(91851) | 评论(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

阅读(91850) | 评论(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

阅读(91849) | 评论(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

阅读(91848) | 评论(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

阅读(91847) | 评论(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

阅读(91846) | 评论(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

阅读(91845) | 评论(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

阅读(91844) | 评论(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

阅读(91843) | 评论(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

阅读(91842) | 评论(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

阅读(91841) | 评论(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

阅读(91840) | 评论(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

阅读(91839) | 评论(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

阅读(91838) | 评论(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

阅读(91837) | 评论(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

阅读(91836) | 评论(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

阅读(91835) | 评论(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

阅读(91834) | 评论(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

阅读(91833) | 评论(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

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