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 相同的核心数据特性,为构建和部署应用程序奠定了坚实的基础。
|
|
您已经看到了 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 助手”
c)在向导的 Outline 区域(左上角)中选择 FROM 部分,然后展开与登录用户同名的模式,查看与这个模式相关联的各个表。选择 employee 表并使用 > 按钮将它移动到“选择的源表”区域中。
图 3. 选择 employee 表
d)在 Outline 区域中选择 SELECT 部分(在 FROM 部分下面),展开 employee 表查看它的列。选择 empno、firstnme 和 lastname 列并使用 > 按钮将它们移动到“结果列”区域中。
图 4. 选择列
e)在 Outline 区域的 WHERE 部分中,在“列”下拉列表中选择 hiredate 列。在 “运算符” 下拉列表中,选择 > 操作符。在 “值”下拉列表中,选择 “示列值”,然后在出现的列表中选择任何值并单击“确定”按钮。插入这个“伪”值是为了查明 DB2 所需的日期格式。将插入的值改为‘1977-05-05’并使用 > 按钮将它移动到 “搜索条件” 区域中。DB2 使用强类型转换。应该将值显式转换为目标类型,而不是让 DB2 在运行时进行隐式转换,这是一个好习惯。DB2 只能隐式转换某些数据值,因此显式转换是一个好的做法。为了显式转换上面的值,将它包围在 DATE() 函数中,比如 DATE(‘1977-05-05’)。
图 5. 选择 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 中国网站编辑团。 |
对本文的评价
|