IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management  >

DB2 Express-C 9 DBA 和开发人员实验教程,快速实验 13,14

SQL/XML 和 Xquery

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


developerWorks 中国网站编辑团队, 编辑, IBM

2008 年 7 月 15 日

在本次实验中,将测试您的 SQL/XML 和 Xquery 相关知识并体验 DB2 Command Editor 和 IBM Data Studio 以及 SQL Assist Wizard。

概要

在本次实验中,将测试您的 SQL/XML 和 Xquery 相关知识并体验 DB2 Command Editor 和 IBM Data Studio 以及 SQL Assist Wizard。





回页首


前提条件





回页首


SQL/XML 和 Xquery

目标

IBM 为社区提供了 DB2 免费版本 DB2 Express-C,它提供了与 DB2 Express Edition 相同的核心数据特性,为构建和部署应用程序奠定了坚实的基础。

DB2 Express-C

您已经看到了 SQL/XML 和 Xquery 语法的几个示例,并了解了 DB2 Command Editor 和 IBM Data Studio (原 Developer Workbench)。在本次实验中,将测试您的 SQL/XML 和 Xquery 知识并体验这些工具。我们将使用 DB2 Command Editor 和 SQL Assist Wizard。

步骤

1.确保创建“mydb”数据库并装载它。

2.使用 “命令编辑器” 或 Data Studio:

a)以两种方式获取 ITEMS 表中的所有注释 XML 文档,但是只使用 Xquery。


清单 1. 测试命令1
                
Xquery db2-fn:xmlcolumn('ITEMS.COMMENTS')
Xquery db2-fn:sqlquery("select comments from items")


b)为什么在执行以下 SQL 语句时不会返回完全相同的输出:

SELECT comments FROM items


因为当一个值不存在时,SQL 会返回 NULL,而 Xquery 不返回任何东西。

c)获取 ResponseRequested 为“No”的 XML 文档的记录的 ID 和 BRANDNAME。


清单 2. 测试命令2
                
select id, brandname from items where
XMLEXISTS('$c/Comments/Comment[ResponseRequested="No"]'
passing ITEMS.COMMENTS as "c")






回页首


SQL

目标

您已经看到了 SQL 语法的几个示例,并了解了 DB2 “命令行编辑器” 和 SQL Assist Wizard(SQL 助手)。在本次实验中,将测试您的 SQL 知识并体验这些工具。

步骤

3.使用 SQL Assist Wizard 构建一个满足以下要求的查询:

列出 1970 1 1 日以后雇佣的职员的职员编号、名字和姓氏。结果按照职员编号排序。

a)打开 “命令行编辑器” 并确保连接到 SAMPLE 数据库(在下拉列表中选择 SAMPLE)。如果列表中没有出现这个数据库,那么单击下拉列表旁边的 “添加” 按钮,添加一个到 SAMPLE 的连接。


图 1. 启动命令行编辑器
启动命令行编辑器

b)在 “命令行编辑器” 中,启动 “SQL 助手”。


图 2. 启动 “SQL 助手”
启动 'SQL 助手'

c)在向导的 Outline 区域(左上角)中选择 FROM 部分,然后展开与登录用户同名的模式,查看与这个模式相关联的各个表。选择 employee 表并使用 > 按钮将它移动到“选择的源表”区域中。


图 3. 选择 employee 表
选择 employee 表

d)在 Outline 区域中选择 SELECT 部分(在 FROM 部分下面),展开 employee 表查看它的列。选择 empnofirstnmelastname 列并使用 > 按钮将它们移动到“结果列”区域中。


图 4. 选择列
选择列

e)在 Outline 区域的 WHERE 部分中,在“列”下拉列表中选择 hiredate 列。在 “运算符” 下拉列表中,选择 > 操作符。在 “值”下拉列表中,选择 “示列值”,然后在出现的列表中选择任何值并单击“确定”按钮。插入这个“伪”值是为了查明 DB2 所需的日期格式。将插入的值改为‘1977-05-05’并使用 > 按钮将它移动到 “搜索条件” 区域中。DB2 使用强类型转换。应该将值显式转换为目标类型,而不是让 DB2 在运行时进行隐式转换,这是一个好习惯。DB2 只能隐式转换某些数据值,因此显式转换是一个好的做法。为了显式转换上面的值,将它包围在 DATE() 函数中,比如 DATE(‘1977-05-05)


图 5. 选择 WHERE 条件
选择 WHERE 条件

f)在 Outline 区域的 ORDER BY 部分中,展开 employee 表查看它的列,然后选择 empno 列并使用 > 按钮将它移动到 Sort Columns 区域中。还可以选择按照职员编号的升序还是降序排序。


图 6. 选择排序方式
选择排序方式

g)现在,完整的 SQL 查询文本应该会显示在向导的底部区域中。单击“运行”按钮执行这个查询。这时应该会出现一个小的查询结果窗口。单击结果窗口上的“确定”按钮将其关闭。

h)单击向导底部的“确定”按钮,返回到“命令行编辑器”。现在,使用向导构建的查询应该会出现在“命令行编辑器”的输入区域中。

i)单击“命令行编辑器”中的“执行”按钮运行这个查询。这时应该会出现一个结果窗口,可以在其中对返回的结果集进行添加/删除/修改。


图 7. 查询结果
查询结果

您创建的 SQL 查询是:


清单 3. 最终创建的语句
                
SELECT EMPLOYEE.EMPNO, EMPLOYEE.FIRSTNME, EMPLOYEE.LASTNAME
   FROM ADIS00317.EMPLOYEE AS EMPLOYEE
   WHERE EMPLOYEE.HIREDATE > '1977-05-05'
   ORDER BY EMPLOYEE.EMPNO ASC


4.使用 SQL Assist Wizard 或您自己的 SQL 知识编写一个满足以下要求的查询:

列出不是经理的所有职员的名字和姓氏。

首先按照职员姓氏排序,

SELECT empno, firstnme, lastname FROM <schema>.employee 
WHERE hiredate > DATE('1970-01-01') ORDER BY empno;


然后按照名字排序。
SELECT firstnme,lastname FROM <schema>.employee 
WHERE job NOT LIKE 'MANAGER' ORDER BY lastname, firstnme;


5.使用 SQL Assist Wizard 或您自己的 SQL 知识编写一个 SQL 语句,给 D11 部门的所有职员加薪 15%。

UPDATE <schema>.employee SET salary = (salary * 1.15) WHERE workdept = 'D11';


6.使用 SQL Assist Wizard 或您自己的 SQL 知识编写一个 SQL 语句,将项目 AD3112 的所有权转移给 Daniel S. Smith。

(注意:SQL Assist Wizard 无法在数据修改语句中嵌套子选择语句。首先使用向导构造子 SELECT,然后使用向导构造所需的 UPDATE 语句。最后,将这两个语句合并在一起,从而获得所需的结果。)

UPDATE <schema>.project SET respemp =
(SELECT empno FROM <schema>.employee 
WHERE firstnme = 'DANIEL' AND midinit = ’S’ AND lastname = 'SMITH')
WHERE projno = 'AD3112';






回页首


参考资源



关于作者

developerWorks 中国网站编辑团。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款