式
式は、結果を生成するために実行される一連の操作を表します。Oracle NoSQL Databaseでサポートされる様々な種類の式については、この章の後半で説明します。
式は、演算子、関数コールまたは他の構文的な構成を介して他の式と副次式を結合することによって構築されます。最も単純な種類の式は、定数と、変数または識別子への参照です。
例に従って使用する場合は、例で使用する表の説明に従って航空会社アプリケーション表を作成し、データを挿入します。
例6-1 航空会社アプリケーションで2019年1月1日より後に輸送されたすべての顧客荷物の氏名、チケット番号および荷物タグ番号の取得
SELECT fullName,
ticketNo,
bag.bagInfo.tagNum
FROM BaggageInfo bag
WHERE EXISTS bag.bagInfo[$element.bagArrivalDate >="2019-01-01T00:00:00"]
説明: この問合せでは、いくつかの式の使用方法を示します。BaggageInfo
表では、すべての乗客の荷物到着日をbagInfo
配列のbagArrivalDate
フィールドに格納します。bagInfo
はJSONフィールドであるため、bagArrivalDate
属性には、ISO-8601形式の日付が文字列値として含まれます。SELECT式のSELECT句、FROM句およびWHERE句を使用して、表から列を選択します。
指定した日付より後に輸送された顧客荷物のリストをフェッチするには、値比較演算子">="を使用して、各荷物のbagArrivalDate
が指定日(つまり、2019年1月1日)以降かどうかを確認します。ここでは、入力日付もISO-8601形式の文字列です。ISO-8601書式の文字列書式の日付を使用すると、文字列の自然なソート順のために論理比較演算子で機能します。日付の年代順は文字列の自然なソート順に従うため、この特定の事例では、目的の動作が得られます。日付演算など、より複雑な日付演算では、ISO-8601日付文字列をタイムスタンプ・データ型にキャストする必要があります。CAST演算子の使用方法の詳細は、キャスト式を参照してください。
EXISTS演算子(比較式)は、値比較操作の結果に基づいてtrueまたはfalseの値を返します。前述の問合せで、荷物到着日が指定した日付以降の場合、EXISTS演算子はtrue値を返し、対応する行がフェッチされます。それ以外の場合は、行がフィルタで除外されます。
この例では、bag
はBaggageInfo
表の別名です。$element
は暗黙的に宣言された変数で、コンテキスト行(顧客のすべての荷物)にバインドされます。変数参照はプライマリ式の一部です。
{"fullName":"Fallon Clements","ticketNo":1762350390409,"tagNum":"17657806255507"}
{"fullName":"Lucinda Beckman","ticketNo":1762320569757,"tagNum":"17657806240001"}
{"fullName":"Elane Lemons","ticketNo":1762324912391,"tagNum":"1765780623244"}
{"fullName":"Gerard Greene","ticketNo":1762341772625,"tagNum":"1765780626568"}
{"fullName":"Kendal Biddle","ticketNo":1762377974281,"tagNum":"17657806296887"}
{"fullName":"Zulema Martindale","ticketNo":1762340579411,"tagNum":"17657806288937"}
{"fullName":"Mary Watson","ticketNo":1762340683564,"tagNum":"17657806299833"}
{"fullName":"Teena Colley","ticketNo":1762357254392,"tagNum":"17657806255823"}
{"fullName":"Lorenzo Phil","ticketNo":1762320369957,"tagNum":["17657806240001","17657806340001"]}
{"fullName":"Adam Phillips","ticketNo":1762344493810,"tagNum":"17657806255240"}
{"fullName":"Adelaide Willard","ticketNo":1762392135540,"tagNum":"17657806224224"}
{"fullName":"Rosalia Triplett","ticketNo":1762311547917,"tagNum":"17657806215913"}
{"fullName":"Michelle Payne","ticketNo":1762330498104,"tagNum":"17657806247861"}
{"fullName":"Zina Christenson","ticketNo":1762390789239,"tagNum":"17657806228676"}
{"fullName":"Raymond Griffin","ticketNo":1762399766476,"tagNum":"17657806243578"}
{"fullName":"Henry Jenkins","ticketNo":176234463813,"tagNum":"17657806216554"}
{"fullName":"Lisbeth Wampler","ticketNo":1762355854464,"tagNum":"17657806292229"}
{"fullName":"Dierdre Amador","ticketNo":1762376407826,"tagNum":"17657806240229"}
{"fullName":"Joanne Diaz","ticketNo":1762383911861,"tagNum":"17657806292518"}
{"fullName":"Omar Harvey","ticketNo":1762348904343,"tagNum":"17657806234185"}
{"fullName":"Doris Martin","ticketNo":1762355527825,"tagNum":"17657806232501"}
JSONコレクション表:
SQL式を使用すると、JSONコレクション表のデータを問い合せることができます。この問合せは、固定スキーマ表と同様に機能します。JSONパス式を指定することで、JSONコレクション表のドキュメントの名/値のペアにアクセスできます。ドキュメントの最上位属性には、そのフィールド名をパス式として使用してアクセスできますが、ネストされた属性には、属性へのパス式を使用してアクセスする必要があります。JSONコレクション表の問合せを示すために、次の項にいくつかの例が追加されています。
例に従って、ショッピング・アプリケーションのJSONコレクション表を作成し、「JSONコレクション表の例」の項の説明に従ってサンプル・データ・レコードを挿入します。