程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2數據庫綜合 >> 使用SQL查詢DB2 9中的XML數據

使用SQL查詢DB2 9中的XML數據

編輯:DB2數據庫綜合
正在看的db2教程是:使用SQL查詢DB2 9中的XML數據。

雖然 DB2 的混合體系結構與之前的版本有很大的不同,但是要利用它的新 XML 功能並不難。如果您已經熟悉 SQL,那麼很快就可以將這方面的技能轉化到對存儲在 DB2 中的本地 XML 數據的處理上。通過本文就可以知道如何實現這一點。

DB2 Viper(就是DB2 9)中的 XML 特性包括新的存儲管理、新的索引技術以及對查詢語言的支持。在本文中,學習如何使用 SQL 或帶 XML 擴展的 SQL(SQL/XML)查詢 DB2 XML 列中的數據。接下來的文章將討論 DB2 中新引入的對新興的業界標准 XQuery 的支持,並探索 XQuery 在什麼時候最有用。

您也許會感到驚訝,DB2 還支持雙語查詢 —— 即組合了來自 SQL 和 XQuery 的表達式的查詢。至於應該使用哪種語言(或兩種語言結合使用)取決於應用程序的需要,同時也取決於您本身所掌握的技能。其實,將兩種查詢語言中的元素組合到一個查詢中並沒有您想像的那麼難。這樣做還可以為搜索和集成傳統 SQL 和 XML 數據提供強大的能力。

Sample 數據庫

本文中的查詢將訪問在 “DB2 Viper 快速入門”(developerWorks,2006 年 4 月)中創建的 sample 數據庫。這裡我們簡短地回顧一下,sample 數據庫中 "items" 和 "clients" 表的定義:

清單 1. 表的定義


create table items (

id int primary key not null,

brandname varchar(30),

itemname varchar(30),

sku int,

srp decimal(7,2),

comments xml

)

create table clients(

id int primary key not null,

name varchar(50),

status varchar(10),

contactinfo xml

)



圖 1 顯示了 "items.comments" 列中的示例 XML 數據,圖 2 顯示了 "clients.contactinfo" 列中的示例 XML 數據。隨後的查詢例子將引用其中某個 XML 文檔或這兩個文檔中某些特定的元素。

圖 1. 存儲在 "items" 表 "comments" 列的示例 XML 文檔

使用SQL查詢DB2 9中的XML數據(圖一)

圖 2. 存儲在 "clients" 表 "contactinfo" 列中的示例 XML 文檔

使用SQL查詢DB2 9中的XML數據(圖二)

查詢環境

本文中的所有查詢都是交互式地發出的,您可以通過 DB2 命令行處理器或 DB2 Control Center 中的 DB2 Command Editor 發出查詢。本文中的屏幕圖像和說明主要基於後一種方式。(DB2 Viper 還附帶了一個基於 Eclipse 的 Developer Workbench,它可以幫助程序員圖形化地構造查詢。但是,本文不討論應用開發問題或 Developer Workbench。)

要使用 DB2 Command Editor,需啟動 Control Center 並選擇 Tools > Command Editor。這時將彈出如 圖 3 所示的窗口。在上面的面板中輸入查詢,單擊左上角的綠色箭頭運行查詢,然後在下面的面板或 "Query results" 標簽頁中查看輸出。

圖 3. DB2 Command Editor,可以從 DB2 Control Center 啟動

使用SQL查詢DB2 9中的XML數據(圖三)

純 SQL 查詢

即使您對 SQL 所知有限,也仍然可以很輕松地查詢 XML 數據。例如,下面的查詢選擇 "clients" 表中的全部內容,包括存儲在 "contactinfo" 列的 XML 信息:

清單 2. 簡單的 SELECT 語句



select * from clients



當然也可以編寫更具選擇性的 SQL 查詢,使之包含關系投影和限制操作。下面的查詢檢索所有具有 "Gold" 狀態的客戶的 ID、姓名和聯系方式。請注意,"contactinfo" 列包含 XML 數據,而其他兩列不包含 XML 數據:

清單 3. 帶投影和限制的簡單 SELECT 語句



select id, name, contactinfo

from clients

where status = 'Gold'



正如您所預料,您可以基於這樣的查詢創建視圖,下面的 "goldview" 可以說明這一點:

清單 4. 創建包含 XML 列的視圖



create view goldview as

select id, name, contactinfo

from clients

where status = 'Gold'



不幸的是,很多事情光用 SQL 是無法解決的。通過純 SQL 語句可以檢索整個 XML 文檔(剛才已證明這一點),但是卻不能指定基於 XML 的查詢謂詞,也不能檢索 XML 文檔的某一部分或者 XML 文檔中特定的元素值。換句話說,使用純 SQL 不能對 XML 文檔中的片段進行投影、限制、連接、聚集或排序操作。例如,您不能單獨檢索 Gold 客戶的 email 地址或居住在郵政編碼為 "95116" 的地區的客戶的姓名。為了表達這些類型的查詢,需要使用帶 XML 擴展的 SQL(SQL/XML)、XQuery 或結合使用這兩種查詢語言。

下一節將探討 SQL/XML 的幾個基本特性。在接下來的文章中,我們將學習如何編寫 XQuery 以及如何將 XQuery 與 SQL 結合使用。

SQL/XML 查詢

顧名思義,SQL/XML 被設計用來為 SQL 和 XML 兩者之間搭一座橋。它首先是 SQL 標准的一部分,經過演化現在包括將 XQuery 或 XPath 表達式嵌入 SQL 語句的規范。XPath 是用於導航 XML 文檔以便發現元素或屬性的一種語言。XQuery 包括對 XPath 的支持。

請務必注意,XQuery(和 XPath)表達式是大小寫敏感的。例如,引用 XML 元素 "zip" 的 XQuery 並不適用於名為 "ZIP" 或 "Zip" 的 XML 元素。SQL 程序員有時候很難記住大小寫敏感這一點,因為 SQL 查詢語法允許使用 "zip"、"ZIP" 和 "Zip" 來引用同一個列名。

DB2 Viper 提供了超過 15 個 SQL/XML 函數,通過這些函數可以搜索 XML 文檔中的特定數據,將傳統數據轉換成 XML,將 XML 數據轉換成關系數據,以及執行其他有用的任務。本文不討論 SQL/XML 的所有方面,而只是談到幾種常見的查詢挑戰

[1] [2] [3] [4] [5] [6] 下一篇

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