
DB基礎講座:XQueryとSQLはどう違う?
一気に分かる“XQuery”ハンズオン演習
日本アイ・ビー・エム米持幸寿
2006/7/6
XQueryの基本構文は、以下のようになります。
for $変数名 in 式
let $変数名 := 式
order by 式
where 式
return 式
すべてを書くわけではなく、省略しつつ組み合わせて記述していきます。
変数への代入と戻り値
対象となるXMLをFLOWR構文で扱うためには、変数に代入することと、戻り値を構成します。変数は「$」に文字列を足したもので表します。XQueryでは、関数が返してよこすXMLが複数にわたる場合、それを順番にイテレート(順次処理)します。forで変数に代入した関数の結果は、それぞれ変数に代入されてイテレートされるので、4つのXMLインスタンスが処理されるなら、変数の処理が4回、ループのように行われます。
for $input in db2-fn:xmlcolumn("DIR.INFO") |
| リスト2 forによるイテレート処理 |
これはリスト1の関数のみを実行したときと同じ結果が返ります。
XPathによる出力の調整
次にXPathによって出力を調整してみましょう。4回出力されるXMLですが、それぞれのXML出力のうち、最初のディレクトリの最初のファイルのエレメントのみを出力させるようにreturn句にXPathを使って指定してみます。
for $input in db2-fn:xmlcolumn("DIR.INFO") |
| リスト3 return句にXPathを使用する |
すると、リスト4のように3つの出力しか戻らなくなります(以下、出力結果の改行は調整してあります)。これは、4つのうち1つには「最初のdir要素の下の最初のfile要素」という条件が当てはまらなかったためです。
<file name="config.ini"> |
| リスト4 リスト3の出力結果 |
では次により深いファイルをすべて探して、ファイルの大きさが10Mbytes以上のものをすべて表示してみましょう。
for $d in db2-fn:xmlcolumn("DIR.INFO") |
| リスト5 出力の条件に「ファイルサイズ10Mbytes以上」を加えた |
このクエリを実行すると、リスト6の結果が出力され、Eclipseのディレクトリ内には10Mbytes以上のファイルが2個あることが確認できます。結果は一瞬で返ってきますので、ディレクトリ内の10Mbytes以上のファイルを探すよりはるかに早いことが実感できます。
<file name="doc.zip"> |
| リスト6 リスト5の出力結果 |
このような抽出はXQueryというよりXPath式の処理によってなされています。ところで、この結果にはちょっと困ったことがあります。それはルート要素がないことです。これではこの結果をそのまま使うためにはルート要素を別途付けなければなりません。ルート要素を付けるためには、「{ }」で囲んだXQueryを発行してルート要素を付ける構文が使えます。
<result> |
| リスト7 ルート要素を付け加える構文 |
これできれいなXMLが戻されました。
<result> |
| リスト8 リスト7の出力結果 |
リスト8を見て「SOAPのEnvelopeとBodyを外側に付けるとWebサービスになるなぁ」と思ってしまいました。
where句とorder by句
次に条件を使った処理をして、ソートしてみましょう。forで変数に取り込む対象を、関数が返してよこすXMLの下にある「すべてのfile要素」と変更します。そして、lastModifiedが「2006/06/20 00:00:00」より大きなときにreturnが実行されるようにwhere句を追加します。このとき、ファイル名でソートしましょう。
<result> |
| リスト9 where句とorder by句の使用 |
これによって、2006年6月20日以降に修正された6つのファイルのfile要素が戻されました。属性に付けられているnameでソートされています。
<result> |
| リスト10 リスト9の出力結果 |
◇
さて、いかがでしょうか。XQueryの応用構文はほかにもたくさんありますが、今回はこれくらいにしておきます。XQueryを使って検索することで、XMLで保存されたツリー構造のデータが非常に柔軟に扱えることが分かっていただけたでしょうか?
| 3/3 |
| Index | |
| DB基礎講座:XQueryとSQLはどう違う? 一気に分かる“XQuery”ハンズオン演習 |
|
| Page
1 ・はじめに ・XMLはどのように保存されるべきか ・SQLとXQueryは何が違うのか |
|
| Page 2 ・XQueryの代表的な機能 |
|
| Page 3 ・FLOWR構文を使ったXQuery演習 |
|
| DB基礎講座:XQueryとSQLはどう違う? |
TechTargetジャパン
- IBMが歴史を変える!? 新カテゴリの製品を発表 (2012/5/25)
IBMは新たな製品カテゴリとなる「PureSystems」を発表。DB2 10とビッグデータの関係、PureSytemsの斬新さはどこかに迫ります - クラウド時代のデータ処理を支える分散KVSの可能性 (2012/5/23)
現在、高速データ処理の主流はインメモリ型データ処理だが、別の方法として分散KVSが注目を集めている。今回は分散KVSについて話を聞いた - 複数の表からデータを取り出して表示させる(2) (2012/4/23)
前回はSQLの基本的な結合構文について説明しました。今回は、より複雑な自己結合や外部結合について説明します - SQL Server、OOWにIQ、盛りだくさんの4月 (2012/4/20)
オラクルオープンワールドが3年ぶりに東京で開催されたほか、SQL Server 2012が提供開始されるなど、今月は話題が盛りだくさんです
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
