程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2 Express-C 9 DBA 和開發人員實驗教程,快速實驗 13,14:SQL/XML 和 Xquery

DB2 Express-C 9 DBA 和開發人員實驗教程,快速實驗 13,14:SQL/XML 和 Xquery

編輯:DB2教程

概要

在本次實驗中,將測試您的 SQL/XML 和 Xquery 相關知識並體驗 DB2 Command Editor 和 IBM Data Studio 以及 SQL Assist Wizard。

前提條件

首先,確保您的機器上已經安裝了 DB2 Express-C V9.5 免費數據庫服務器;

您已經閱讀了 “DB2Express-C 快速入門”(中文版) 中的相關內容。

您已經學習了本系列實驗的前幾篇文章的相關內容。

SQL/XML 和 Xquery

目標

您已經看到了 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. 啟動命令行編輯器

DB2 Express-C 9 DBA 和開發人員實驗教程,快速實驗 13,14:SQL/XML 和 Xquery

b)在 “命令行編輯器” 中,啟動 “SQL 助手”。

圖 2. 啟動 “SQL 助手”

DB2 Express-C 9 DBA 和開發人員實驗教程,快速實驗 13,14:SQL/XML 和 Xquery

c)在向導的 Outline 區域(左上角)中選擇 FROM 部分,然後展開與登錄用戶同名的模式,查看與這個模式相關聯的各個表。選擇 employee 表並使用 > 按鈕將它移動到“選擇的源表”區域中。

圖 3. 選擇 employee 表

DB2 Express-C 9 DBA 和開發人員實驗教程,快速實驗 13,14:SQL/XML 和 Xquery

d)在 Outline 區域中選擇 SELECT 部分(在 FROM 部分下面),展開 employee 表查看它的列。選擇 empno、firstnme 和 lastname 列並使用 > 按鈕將它們移動到“結果列”區域中。

圖 4. 選擇列

DB2 Express-C 9 DBA 和開發人員實驗教程,快速實驗 13,14:SQL/XML 和 Xquery

e)在 Outline 區域的 WHERE 部分中,在“列”下拉列表中選擇 hiredate 列。在 “運算符” 下拉列表中,選擇 > 操作符。在 “值”下拉列表中,選擇 “示列值”,然後在出現的列表中選擇任何值並單擊“確定”按鈕。插入這個“偽”值是為了查明 DB2 所需的日期格式。將插入的值改為‘1977-05-05’並使用 > 按鈕將它移動到 “搜索條件” 區域中。DB2 使用強類型轉換。應該將值顯式轉換為目標類型,而不是讓 DB2 在運行時進行隱式轉換,這是一個好習慣。DB2 只能隱式轉換某些數據值,因此顯式轉換是一個好的做法。為了顯式轉換上面的值,將它包圍在 DATE() 函數中,比如 DATE(‘1977-05-05’)。

圖 5. 選擇 WHERE 條件

DB2 Express-C 9 DBA 和開發人員實驗教程,快速實驗 13,14:SQL/XML 和 Xquery

f)在 Outline 區域的 ORDER BY 部分中,展開 employee 表查看它的列,然後選擇 empno 列並使用 > 按鈕將它移動到 Sort Columns 區域中。還可以選擇按照職員編號的升序還是降序排序。

圖 6. 選擇排序方式

DB2 Express-C 9 DBA 和開發人員實驗教程,快速實驗 13,14:SQL/XML 和 Xquery

g)現在,完整的 SQL 查詢文本應該會顯示在向導的底部區域中。單擊“運行”按鈕執行這個查詢。這時應該會出現一個小的查詢結果窗口。單擊結果窗口上的“確定”按鈕將其關閉。

h)單擊向導底部的“確定”按鈕,返回到“命令行編輯器”。現在,使用向導構建的查詢應該會出現在“命令行編輯器”的輸入區域中。

i)單擊“命令行編輯器”中的“執行”按鈕運行這個查詢。這時應該會出現一個結果窗口,可以在其中對返回的結果集進行添加/刪除/修改。

圖 7. 查詢結果

DB2 Express-C 9 DBA 和開發人員實驗教程,快速實驗 13,14:SQL/XML 和 Xquery

  圖片看不清楚?請點擊這裡查看原圖(大圖)。

您創建的 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'; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved