順序タイプ

順序タイプは、順序に表示される項目のタイプ、および順序のカーディナリティを示すものを指定します。

構文

sequence_type ::= type_definition [quantifier]

quantifier := "*" | "+" | "?"

セマンティクス

数量詞
数量詞は次のいずれかです。
  • *は、一連の0 (ゼロ)個以上の項目を示します。
  • *は、一連の1個以上の項目を示します。
  • ?は、一連の0 (ゼロ)個または1個の項目を示します。
  • 数量詞がない場合は、項目が1つのみの順序を示します。

サブタイプ関係

順序タイプ間には、サブタイプ関係も存在します。次のように定義されます。
  • 空の順序は、数量詞が*または?であるすべての順序タイプのサブタイプです
  • 順序タイプSUBは、SUBの項目タイプがSUPの項目タイプのサブタイプであり、SUBの数量詞がSUPの数量詞のサブ数量詞である場合は、別の順序タイプSUP (スーパータイプ)のサブタイプになります(サブ数量詞関係が次のマトリックスによって定義される場合)。
次のマトリックスは、数量詞間のサブ数量詞関係を示しています。列見出しは、数量詞のスーパータイプ(SUP)を示します。行見出しは、数量詞のサブタイプ(SUB)を示します。
Sup Q1 | Sub Q2 1 ? + *
1 true false false false
? true true false false
+ true false true false
* true true true true
たとえば、上記の表に従うと、?1および?のスーパー数量詞ですが、+および*のスーパー数量詞ではありません。同様に、*は他のすべての数量詞のスーパー数量詞になります。

ノート:

次の各項では、式に(順序)タイプTが必要であると示されている場合は、式が評価されるときに、結果の順序がタイプTまたはTのサブタイプである必要があることを意味しています。同様に、通常のサブタイプ置換ルールが入力順序に適用されます。つまり、式に入力としてタイプTの順序が必要な場合は、Tの任意のサブタイプを実際に入力として使用できます。

例に従って使用する場合は、例で使用する表の説明に従って航空会社アプリケーション表を作成し、データを挿入します。

例6-3 航空会社アプリケーションでのSFOから/SFOを経由して他の場所に移動する乗客の詳細のフェッチ

SELECT bag.fullname, 
bag.bagInfo[].tagNum, 
bag.bagInfo[].flightLegs[].fltRouteSrc 
FROM BaggageInfo bag
WHERE bag.bagInfo[].flightLegs[].fltRouteSrc=any "SFO"

説明: 航空会社アプリケーションでは、特定のステーションから移動したすべての乗客の詳細を取得できます。bagInfoフィールドのflightLegs配列には、各移動区間の出発地ステーションと到着地ステーションが含まれます。bagInfo.flightLegs[].fltRouteSrcは、乗客がフライトに搭乗する出発地ステーションを保持する文字列順序です。

この問合せでは、出発地ステーションを入力文字列SFOと比較し、SFOステーションから移動する乗客のリストをフェッチします。比較演算子は複数のアイテムの順序を処理できないため、順序比較演算子=anyを使用して、bagInfo.flightLegs[].fltRouteSrc順序を必要なステーションと比較します。順序比較の詳細は、順序比較演算子を参照してください。

ここでは、出発地ステーションはSFOからのフライト、またはSFOステーションを経由した他の目的地へのフライトのいずれかです。bagBaggageinfo表の別名で、基本的に変数として機能します。変数はコンテキスト行全体にバインドされ、階層構造化データ内で参照できます。

出力:
{"fullname":"Henry Jenkins","tagNum":"17657806216554","fltRouteSrc":["SFO","ORD"]}
{"fullname":"Michelle Payne","tagNum":"17657806247861","fltRouteSrc":["SFO","IST","ATH"]}
{"fullname":"Gerard Greene","tagNum":"1765780626568","fltRouteSrc":["SFO","IST","ATH"]}
{"fullname":"Lorenzo Phil","tagNum":["17657806240001","17657806340001"],"fltRouteSrc":["SFO","IST","ATH","SFO","IST","ATH"]}
{"fullname":"Lucinda Beckman","tagNum":"17657806240001","fltRouteSrc":["SFO","IST","ATH"]}