1. ホーム
  2. データベース
  3. デービーツー

DB2 9 で SQL を使用して XML データをクエリする

2022-01-19 16:12:06
私が見ているdb2チュートリアルは DB2 9 で SQL を使って XML データをクエリする。

DB2のハイブリッド・アーキテクチャは以前のバージョンとは大きく異なりますが、新しいXMLの機能を活用することは難しくありません。SQL に既に慣れていれば、そのスキルを DB2 に保存されているネイティブ XML データの操作にすぐに反映させることができます。この記事でその方法を紹介しています。

DB2 Viper(DB2 9のこと)のXML機能には、新しいストレージ管理、新しいインデックス作成技術、クエリ言語のサポートが含まれます。この記事では、SQL または SQL with XML extensions (SQL/XML) を使用して DB2 XML カラムのデータを照会する方法について説明します。次回は、DB2で新たに導入された業界標準XQueryのサポートについて説明し、XQueryがどのような場合に最も有用であるかを探ります。

DB2がバイリンガルクエリ、つまりSQLとXQueryの両方の式を組み合わせたクエリをサポートしていることに驚かれたかもしれません。どちらの言語(または2つの組み合わせ)を使用すべきかは、アプリケーションのニーズだけでなく、あなたが持っているスキルにも依存します。実際、両方のクエリ言語の要素を組み合わせて一つのクエリを作成することは、思ったほど難しいことではありません。そうすることで、従来の SQL と XML のデータを検索し、統合するための強力な機能も提供されます。

サンプルデータベース

この記事のクエリーは、「"DB2 Viper Quick Start" (developerWorks, April 2006)」で作成したサンプルデータベースにアクセスするものです。ここでは、サンプルデータベースの「quot;items"」テーブルと「quot;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 ドキュメントの例

図2. テーブルのquot;contactinfo;カラムに格納されているXMLドキュメントの例

クエリ環境

この文書に記載されているすべてのクエリは、DB2 コマンドラインプロセッサ、または DB2 Control Center の DB2 コマンドエディタを使用して対話的に発行されます。この記事の画面イメージと説明は、主に後者の方法に基づいています。(DB2 Viper には Eclipse ベースの Developer Workbench も付属しており、グラフィカルにクエリを作成することができます。(ただし、この記事ではアプリケーション開発の問題点やDeveloper Workbenchについては触れません)。

DB2 コマンドエディタを使用するには、Control Center を起動し、Tools > Command Editor を選択すると、図 3 のようなウィンドウが表示されま す。上のパネルにクエリを入力し、左上の緑色の矢印をクリックしてクエリを実行し、下のパネルまたは「クエリ結果」タブで出力を確認します。

図3. DB2 Control Center から起動できる DB2 コマンドエディタ

純粋なSQLクエリ

SQLの知識が少なくても、XMLデータを簡単に照会することができます。例えば、次のクエリは、"contactinfo"カラムに格納されたXML情報を含む、"clients"テーブルの内容全体を選択するものです。

リスト2. シンプルな SELECT ステートメント

select * from clients

もちろん、リレーショナルプロジェクションや制限された操作を含む、より選択的なSQLクエリを記述することも可能です。次のクエリは、ステータスが "Gold"のすべての顧客の ID、名前、および連絡先情報を取得します。contactinfo"列にはXMLデータが含まれ、他の2つの列には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 の顧客の電子メールアドレスを個別に取得したり、郵便番号 "95116" に住んでいる顧客の名前を取得したりすることはできません。このような種類の問い合わせを表現するには、SQL with XML extensions (SQL/XML)、XQuery、またはこの 2 つの問い合わせ言語の組み合わせを使用する必要があります。

次のセクションでは、SQL/XMLのいくつかの基本的な機能を探ります。次回は、XQuery の書き方と、XQuery を SQL と組み合わせて使用する方法について説明します。

SQL/XMLクエリ

SQL/XMLは、その名の通り、SQLとXMLの橋渡しをするために設計されたものです。最初は標準SQLの一部でしたが、現在ではXQueryやXPathの式をSQL文に埋め込む仕様に発展しています。XPath は、XML 文書を走査して要素や属性を発見するための言語です。

XQuery(およびXPath)式は、大文字と小文字が区別されることに注意してください。例えば、XML 要素 "zip" を参照する XQuery は "ZIP" または "Zip" という名前の XML 要素には適用されません。SQL クエリの構文では、"zip", "quot;ZIP" および "Zip" を使用して同じ列名を参照できるため、SQL プログラマはこの大文字小文字の区別を覚えておくことに苦労することがあるようです。

DB2 Viper は 15 以上の SQL/XML 関数を提供しており、XML ドキュメント内の特定のデータの検索、従来のデータの XML への変換、XML データのリレーショナルデータへの変換、その他の便利なタスクを実行することが可能です。この記事では、SQL/XML のすべての側面について説明するのではなく、一般的なクエリーの課題をいくつか取り上げます。

[1]  [2] [3] [4] [5] [6] 次のページ