關(guān)于 XQuery
XQuery 在很多關(guān)鍵方面都與 SQL 有所不同,這很大程度上是因為這兩種語言是針對兩種具有不同特征的數(shù)據(jù)模型而設(shè)計的。XML 文檔包含層次結(jié)構(gòu),并且有其固有的順序。而基于 SQL 的數(shù)據(jù)庫管理系統(tǒng)所支持的表格數(shù)據(jù)結(jié)構(gòu)是平面的(flat),并且是基于集合的;因此,行之間不存在順序。
這兩種數(shù)據(jù)模型的不同導(dǎo)致它們各自的查詢語言有很多基本的不同。例如,XQuery 支持路徑表達(dá)式,以允許程序員在 XML 的層次結(jié)構(gòu)中導(dǎo)航,而純 SQL(沒有 XML 擴展)則不支持。XQuery 支持有類型的和無類型的數(shù)據(jù),而 SQL 數(shù)據(jù)總是以指定類型定義的。XQuery 沒有 null 值,因為 XML 文檔會忽略缺失的或未知的數(shù)據(jù)。當(dāng)然,SQL 使用 null 來表示缺失的或未知的數(shù)據(jù)值。XQuery 返回一系列的 XML 數(shù)據(jù),而 SQL 則返回各種 SQL 數(shù)據(jù)類型的結(jié)果集。
這只是 XQuery 和 SQL 之間的基本不同點中的一部分。提供一份詳盡的列表超出了本文的范圍,不過即將發(fā)表的 IBM Systems Journal 將更詳細(xì)地討論這些語言的不同。現(xiàn)在我們就探索一下 XQuery 語言的一些基本方面,并看看如何使用它來查詢 DB2 Viper 中的 XML 數(shù)據(jù)。
樣本數(shù)據(jù)庫
本文中的查詢訪問在 “DB2 Viper 快速入門”(developerWorks,2006 年 4 月)中創(chuàng)建的樣本表。清單 1 給出了樣本數(shù)據(jù)庫中 “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ù)。隨后的例子查詢將引用這兩個 XML 文檔中的一個或兩個中的特定元素。
圖 1. 存儲在 “items” 表的 “comments” 列中的樣本 XML 文檔
圖 2. 存儲在 “clients” 表的 “contactinfo” 列中的樣本 XML 文檔
查詢環(huán)境
本文中的所有查詢都是通過交互方式發(fā)出的。這可以通過 DB2 命令行處理器或 DB2 Control Center 的 DB2 Command Editor 來完成。本文中的屏幕圖像和說明主要使用后一種方式。(DB2 Viper 還附帶了一個基于 Eclipse 的 Developer Workbench,它可以幫助程序員以圖形化的方式構(gòu)造查詢。本文不討論應(yīng)用程序開發(fā)問題和 Developer Workbench。)
要使用 DB2 Command Editor,啟動 Control Center,并選擇 Tools -> Command Editor。這時將出現(xiàn)如 圖 3 所示的窗口。在上面的面板中輸入查詢,單擊左上角的綠色箭頭運行該查詢,然后可以在下面的面板中或者在 “Query Results” 選項卡中查看輸出。
圖 3. DB2 Command Editor,可以從 DB2 Control Center 中啟動
XQuery 例子
與在 “用 SQL 查詢 DB2 XML 數(shù)據(jù)” 中一樣,本文將逐步講解一些常見的業(yè)務(wù)場景,并展示如何使用 XQuery 來滿足對 XML 數(shù)據(jù)的請求。本文還探索了需要將 SQL 嵌入在 XQuery 中的更復(fù)雜的情景。
XQuery 提供了一些不同類型的表達(dá)式,這些表達(dá)式可以隨意組合。每個表達(dá)式返回一系列的值,這些值又可以作為其他表達(dá)式的輸入。最外面的表達(dá)式的結(jié)果就是查詢的結(jié)果。
本文主要討論兩種重要的 XQuery 表達(dá)式:“FLWOR” 表達(dá)式和路徑表達(dá)式。FLWOR 表達(dá)式非常像 SQL 中的 SELECT-FROM-WHERE 表達(dá)式 —— 它用于對由多項組成的一個列表進(jìn)行迭代,并且可以選擇返回通過在每一項上進(jìn)行計算得到的值。而路徑表達(dá)式則可以在分層的 XML 元素之間進(jìn)行導(dǎo)航,并返回在路徑末端找到的元素。
與 SQL 中的 SELECT-FROM-WHERE 表達(dá)式類似,XQuery FLWOR 表達(dá)式可以包含數(shù)個以某個關(guān)鍵詞開頭的子句。在 FLWOR 表達(dá)式中,有以下用于作為子句開頭的關(guān)鍵字:
[1] [2] [3] [4] [5] 下一篇
標(biāo)簽:唐山 貴港 茂名 惠州 潛江 平頂山 長白山 仙桃
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用XQuery查詢DB2 XML數(shù)據(jù)》,本文關(guān)鍵詞 使用,XQuery,查詢,DB2,XML,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。