首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

掌握 DB2 XQuery:原生查詢 XML 數據的核心技巧

     編輯:DB2 教學

XQuery:為層次數據而生的查詢語言

DB2 Viper 原生支持 XQuery,查詢引擎本地解析、優化、執行 XQuery,無需轉譯為 SQL。XQuery 與 SQL 根本差異在於:XML 擁有層次與順序,關係表是無序集合;XQuery 支持路徑表達式導航樹結構,無 NULL 值(缺失即不存在),返回有序 XML 序列而非結果集。

樣本環境

CREATE TABLE items (id INT PRIMARY KEY, brandname VARCHAR(30), itemname VARCHAR(30), sku INT, srp DECIMAL(7,2), comments XML);
CREATE TABLE clients (id INT PRIMARY KEY, name VARCHAR(50), status VARCHAR(10), contactinfo XML);

items.comments 樣本 XML

clients.contactinfo 樣本 XML

使用 DB2 Control Center → Command Editor 交互執行查詢。

DB2 Command Editor

核心表達式:FLWOR 與路徑表達式

FLWOR 類比 SQL SELECT-FROM-WHERE:

  • for:迭代輸入序列,綁定變量
  • let:聲明變量賦值
  • where:過濾條件
  • order by:排序
  • return:構造結果

路徑表達式:斜槓分隔的步驟,可帶謂詞過濾,如 $clients/Client/Address[state="CA"]/zip。

以 XQuery 作為頂層語言

須以 xquery 關鍵字開頭。輸入源通過 db2-fn:xmlcolumn('TABLE.COLUMN') 獲取 XML 文檔序列(表名、列名需大寫匹配系統目錄)。

xquery db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')

常見查詢模式

1. 檢索特定元素

獲取所有傳真號:

xquery for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/fax return $y
/* 或等價路徑表達式 */
xquery db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/fax

輸出:<fax>4081112222</fax> ...。僅需文本值可加 text()。

2. 處理複雜類型元素

Address 包含街道、城市、州、郵編等子元素:

xquery for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address return $y

返回完整 <Address>... 片段序列。

3. 過濾:WHERE 子句 vs 謂詞

查找郵編 95116 的地址:

xquery for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
where $y/zip = "95116" return $y
/* 謂詞寫法 */
xquery db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address[zip="95116"]

多條件過濾(紐約 10011 或聖何塞任意郵編的郵箱):

xquery for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client
where $y/Address/zip="10011" or $y/Address/city="San Jose"
return $y/email
/* 路徑表達式 */
xquery db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client[Address/zip="10011" or Address/city="San Jose"]/email

注意:XQuery 無 NULL,缺失 email 的客戶不出現在結果中;多個 email 會攤平成扁平序列,失去文檔邊界。若需每客戶僅取首個 email:return $y/email[1]。

4. 輸出轉換:XML → HTML

花括號 {...} 指示計算表達式而非字面量:

xquery <ul> {
  for $y in db2-fn:xmlcolumn('CLIENTS.CONTACTINFO')/Client/Address
  order by $y/zip
  return <li>{$y}</li>
} </ul>

輸出可直接在瀏覽器渲染的 HTML 列表。

進階:嵌入 SQL 的 XQuery(雙語查詢)

DB2 允許在 XQuery 中調用 db2-fn:sqlquery 執行 SQL,並將結果作為 XML 節點返回,實現關係與 XML 的深度融合。詳細示例參考後續文章。

結語

XQuery 以原生方式釋放 XML 數據價值:路徑導航、FLWOR 迭代、條件過濾、排序、輸出構造一氣呵成。掌握其核心表達式,配合 DB2 原生優化引擎,即可高效實現複雜 XML 業務查詢。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved