正在看的db2教程是:使用SQL查詢DB2 9中的XML數(shù)據(jù)。雖然 DB2 的混合體系結(jié)構(gòu)與之前的版本有很大的不同,但是要利用它的新 XML 功能并不難。如果您已經(jīng)熟悉 SQL,那么很快就可以將這方面的技能轉(zhuǎn)化到對(duì)存儲(chǔ)在 DB2 中的本地 XML 數(shù)據(jù)的處理上。通過(guò)本文就可以知道如何實(shí)現(xiàn)這一點(diǎn)。
DB2 Viper(就是DB2 9)中的 XML 特性包括新的存儲(chǔ)管理、新的索引技術(shù)以及對(duì)查詢語(yǔ)言的支持。在本文中,學(xué)習(xí)如何使用 SQL 或帶 XML 擴(kuò)展的 SQL(SQL/XML)查詢 DB2 XML 列中的數(shù)據(jù)。接下來(lái)的文章將討論 DB2 中新引入的對(duì)新興的業(yè)界標(biāo)準(zhǔn) XQuery 的支持,并探索 XQuery 在什么時(shí)候最有用。
您也許會(huì)感到驚訝,DB2 還支持雙語(yǔ)查詢 —— 即組合了來(lái)自 SQL 和 XQuery 的表達(dá)式的查詢。至于應(yīng)該使用哪種語(yǔ)言(或兩種語(yǔ)言結(jié)合使用)取決于應(yīng)用程序的需要,同時(shí)也取決于您本身所掌握的技能。其實(shí),將兩種查詢語(yǔ)言中的元素組合到一個(gè)查詢中并沒(méi)有您想像的那么難。這樣做還可以為搜索和集成傳統(tǒng) SQL 和 XML 數(shù)據(jù)提供強(qiáng)大的能力。
Sample 數(shù)據(jù)庫(kù)
本文中的查詢將訪問(wèn)在 “DB2 Viper 快速入門”(developerWorks,2006 年 4 月)中創(chuàng)建的 sample 數(shù)據(jù)庫(kù)。這里我們簡(jiǎn)短地回顧一下,sample 數(shù)據(jù)庫(kù)中 "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 數(shù)據(jù),圖 2 顯示了 "clients.contactinfo" 列中的示例 XML 數(shù)據(jù)。隨后的查詢例子將引用其中某個(gè) XML 文檔或這兩個(gè)文檔中某些特定的元素。
圖 1. 存儲(chǔ)在 "items" 表 "comments" 列的示例 XML 文檔
圖 2. 存儲(chǔ)在 "clients" 表 "contactinfo" 列中的示例 XML 文檔
查詢環(huán)境
本文中的所有查詢都是交互式地發(fā)出的,您可以通過(guò) DB2 命令行處理器或 DB2 Control Center 中的 DB2 Command Editor 發(fā)出查詢。本文中的屏幕圖像和說(shuō)明主要基于后一種方式。(DB2 Viper 還附帶了一個(gè)基于 Eclipse 的 Developer Workbench,它可以幫助程序員圖形化地構(gòu)造查詢。但是,本文不討論應(yīng)用開(kāi)發(fā)問(wèn)題或 Developer Workbench。)
要使用 DB2 Command Editor,需啟動(dòng) Control Center 并選擇 Tools > Command Editor。這時(shí)將彈出如 圖 3 所示的窗口。在上面的面板中輸入查詢,單擊左上角的綠色箭頭運(yùn)行查詢,然后在下面的面板或 "Query results" 標(biāo)簽頁(yè)中查看輸出。
圖 3. DB2 Command Editor,可以從 DB2 Control Center 啟動(dòng)
純 SQL 查詢
即使您對(duì) SQL 所知有限,也仍然可以很輕松地查詢 XML 數(shù)據(jù)。例如,下面的查詢選擇 "clients" 表中的全部?jī)?nèi)容,包括存儲(chǔ)在 "contactinfo" 列的 XML 信息:
清單 2. 簡(jiǎn)單的 SELECT 語(yǔ)句
select * from clients
當(dāng)然也可以編寫更具選擇性的 SQL 查詢,使之包含關(guān)系投影和限制操作。下面的查詢檢索所有具有 "Gold" 狀態(tài)的客戶的 ID、姓名和聯(lián)系方式。請(qǐng)注意,"contactinfo" 列包含 XML 數(shù)據(jù),而其他兩列不包含 XML 數(shù)據(jù):
清單 3. 帶投影和限制的簡(jiǎn)單 SELECT 語(yǔ)句
select id, name, contactinfo
from clients
where status = 'Gold'
正如您所預(yù)料,您可以基于這樣的查詢創(chuàng)建視圖,下面的 "goldview" 可以說(shuō)明這一點(diǎn):
清單 4. 創(chuàng)建包含 XML 列的視圖
create view goldview as
select id, name, contactinfo
from clients
where status = 'Gold'
不幸的是,很多事情光用 SQL 是無(wú)法解決的。通過(guò)純 SQL 語(yǔ)句可以檢索整個(gè) XML 文檔(剛才已證明這一點(diǎn)),但是卻不能指定基于 XML 的查詢謂詞,也不能檢索 XML 文檔的某一部分或者 XML 文檔中特定的元素值。換句話說(shuō),使用純 SQL 不能對(duì) XML 文檔中的片段進(jìn)行投影、限制、連接、聚集或排序操作。例如,您不能單獨(dú)檢索 Gold 客戶的 email 地址或居住在郵政編碼為 "95116" 的地區(qū)的客戶的姓名。為了表達(dá)這些類型的查詢,需要使用帶 XML 擴(kuò)展的 SQL(SQL/XML)、XQuery 或結(jié)合使用這兩種查詢語(yǔ)言。
下一節(jié)將探討 SQL/XML 的幾個(gè)基本特性。在接下來(lái)的文章中,我們將學(xué)習(xí)如何編寫 XQuery 以及如何將 XQuery 與 SQL 結(jié)合使用。
SQL/XML 查詢
顧名思義,SQL/XML 被設(shè)計(jì)用來(lái)為 SQL 和 XML 兩者之間搭一座橋。它首先是 SQL 標(biāo)準(zhǔn)的一部分,經(jīng)過(guò)演化現(xiàn)在包括將 XQuery 或 XPath 表達(dá)式嵌入 SQL 語(yǔ)句的規(guī)范。XPath 是用于導(dǎo)航 XML 文檔以便發(fā)現(xiàn)元素或?qū)傩缘囊环N語(yǔ)言。XQuery 包括對(duì) XPath 的支持。
請(qǐng)務(wù)必注意,XQuery(和 XPath)表達(dá)式是大小寫敏感的。例如,引用 XML 元素 "zip" 的 XQuery 并不適用于名為 "ZIP" 或 "Zip" 的 XML 元素。SQL 程序員有時(shí)候很難記住大小寫敏感這一點(diǎn),因?yàn)?SQL 查詢語(yǔ)法允許使用 "zip"、"ZIP" 和 "Zip" 來(lái)引用同一個(gè)列名。
DB2 Viper 提供了超過(guò) 15 個(gè) SQL/XML 函數(shù),通過(guò)這些函數(shù)可以搜索 XML 文檔中的特定數(shù)據(jù),將傳統(tǒng)數(shù)據(jù)轉(zhuǎn)換成 XML,將 XML 數(shù)據(jù)轉(zhuǎn)換成關(guān)系數(shù)據(jù),以及執(zhí)行其他有用的任務(wù)。本文不討論 SQL/XML 的所有方面,而只是談到幾種常見(jiàn)的查詢挑戰(zhàn)
[1] [2] [3] [4] [5] [6] 下一篇