XMLマスターポイントレッスン ~ プロフェッショナル(データベース)編 ~
第6回 FLWOR式によるデータのJOIN
タプルストリームとは
for句(とlet句)は、タプルストリーム(Tuple Stream)を生成します。タプルとは、「複数のさまざまなデータを1つにまとめたモノ」を指します。CやC++の構造体を抽象化した概念と思って間違いないでしょう。
FLWOR式では、1回の反復処理で処理対象となる項目の集まりがタプルになります。処理対象の項目は反復処理を行なうごとに変わりますから、ちょうどJavaやC++のStreamのように一連のタプルの流れがあるように考えられます。これをタプルストリーム(Tuple Stream)と呼びます。
for式が1つしかない場合は、タプルストリームはfor式に指定されたシーケンスと同じになります。ですから、
for $i in (1, 2, 3)
return $i
の実行結果は、
1 2 3
というシーケンスになります。
では、for式が2つあるとタプルストリームはどうなるでしょう。
for $i in (1, 2, 3),
$j in ("a", "b", "c")
return ($i, $j)
結果は、次のようなシーケンスになります。
1 a
1 b
1 c
2 a
2 b
2 c
3 a
3 b
3 c
最初のfor式のシーケンスの全項目と、2つ目のfor式のシーケンスの全項目をすべて組み合わせたシーケンスになっていますね。このような組み合わせを作ることを「直積をとる」と言い、できあがった組み合わせを「直積」と呼びます。つまり、for式が複数ある場合、for句はすべてのfor式のシーケンスの直積をタプルストリームとして生成します。
<掲載> P.198-203 DB Magazine 2007 October