順序タイプ
順序タイプは、順序に表示される項目のタイプ、および順序のカーディナリティを示すものを指定します。
構文
sequence_type ::= type_definition
[quantifier]
quantifier := "*" | "+" | "?"
セマンティクス
サブタイプ関係
順序タイプ間には、サブタイプ関係も存在します。次のように定義されます。
- 空の順序は、数量詞が*または?であるすべての順序タイプのサブタイプです
- 順序タイプSUBは、SUBの項目タイプがSUPの項目タイプのサブタイプであり、SUBの数量詞がSUPの数量詞のサブ数量詞である場合は、別の順序タイプSUP (スーパータイプ)のサブタイプになります(サブ数量詞関係が次のマトリックスによって定義される場合)。
次のマトリックスは、数量詞間のサブ数量詞関係を示しています。列見出しは、数量詞のスーパータイプ(SUP)を示します。行見出しは、数量詞のサブタイプ(SUB)を示します。
たとえば、上記の表に従うと、?は1および?のスーパー数量詞ですが、+および*のスーパー数量詞ではありません。同様に、*は他のすべての数量詞のスーパー数量詞になります。
Sup Q1 | Sub Q2 | 1 | ? | + | * |
1 | true | false | false | false |
? | true | true | false | false |
+ | true | false | true | false |
* | true | true | true | true |
ノート:
次の各項では、式に(順序)タイプ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ステーションを経由した他の目的地へのフライトのいずれかです。bag
はBaggageinfo
表の別名で、基本的に変数として機能します。変数はコンテキスト行全体にバインドされ、階層構造化データ内で参照できます。
出力:
{"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"]}