第IV部 JSONデータの問合せ
JSONデータの問合せには、単純なドット表記法を使用できます。また、より多くの機能が必要な場合には、SQL/JSONファンクションおよび条件を使用できます。一連のJSON文書の構造および型の情報をまとめたデータ・ガイドを作成して問い合せることができます。
JSONデータをデータベース格納する際には、標準のデータ型(VARCHAR2
、BLOB
およびCLOB
)が使用されるため、JSONデータに対するSQL問合せは、他のデータベース・データと同じように実行されます。
特定のJSONフィールドに問合せを実行するために、または、特定のJSONフィールドをSQL列にマッピングするために、SQL/JSONパス言語を使用できます。最もシンプルな形式のパス式は、ピリオド(.
)で区切られた1つ以上のフィールド名から構成されます。より複雑なパス式には、フィルタと配列索引を含められます。
Oracleでは、JSONコンテンツの問合せに2つの方法を提供しています。
-
ドット表記法構文。これは、基本的には表の別名で、その後にJSON列名と1つ以上のフィールド名が、すべてピリオド(
.
)で区切られて表されます。各フィールド名の後に配列ステップが続く場合があります。この構文は、簡単に使用できるように、また、可能な場合にはJSON値を戻すように設計されています。 -
SQL/JSONファンクションおよび条件。パス言語を完全にサポートし、ドット表記法構文で可能な範囲よりも強力で柔軟性があります。Oracle Databaseに格納されているJSONデータを作成、問合せおよび操作するために、使用できます。
-
条件
json_exists
は、JSONデータ内に特定の値が存在するかどうかをテストします。 -
条件
is json
およびis not json
は、データが整形式のJSONデータであるかどうかをテストします。前者は、特にチェック制約として使用します。 -
ファンクション
json_value
は、JSONデータからSQL値としてスカラー値を選択します。 -
ファンクション
json_query
は、JSON値を表すSQL文字列として1つ以上の値をJSONデータから選択します。特に、JSON文書のフラグメント(通常はJSONオブジェクトまたは配列)を取得するために使用されます。 -
ファンクション
json_table
は、JSONデータを仮想表として投影します(これは、インライン・ビューとみなすこともできます)。
-
パス言語は問合せ言語の一部であるため、データに固定スキーマが課されることはありません。この設計は、スキーマレスな開発をサポートします。実際には、「スキーマ」は、特定のパスを指定することで問合せ時にその場で定義されます。これは、SQLでスキーマ(表の行と列のセット)がデータの格納時に定義されるという、より一般的なアプローチとは対照的です。
Oracle SQL条件json_equal
はパス式の引数を受け入れません。2つのJSON値を比較し、同じであればtrueを戻し、それ以外の場合はfalseを戻します。この比較では、無意味な空白および無意味なオブジェクト・メンバーの順序は無視されます。たとえば、JSONオブジェクトに同じメンバーがある場合、その順序に関係なく、これらのオブジェクトは等しくなります。ただし、2つの比較されたオブジェクトのいずれかに1つ以上のフィールドの重複がある場合、json_equal
によって戻される値は特定されません。
JSONデータ・ガイドを生成して問合せを行い、JSONコンテンツのナビゲーションに役立てることができます。データ・ガイドを利用することで、JSON文書の構造および型の情報を深く理解できます。データ・ガイドの情報は、追加した新しい文書をトラッキングするために、自動更新されるようにできます。
関連項目:
SQL/JSONファンクションおよび条件の構文およびセマンティクスの詳細は、『Oracle Database SQL言語リファレンス』を参照してください
- JSONデータに対する単純なドット表記法アクセス
ドット表記法は、簡単で一般的な、共通するユースケース向けに設計されています。ドット表記法構文を使用したJSONデータの問合せでは、可能な場合は必ずJSON値が戻されます。 - SQL/JSONパス式
Oracle Databaseでは、SQL/JSONパス式を使用したJSONデータへのSQLアクセスが提供されます。 - SQL問合せファンクションおよび条件で使用される句
句RETURNING
、ラッパー、エラーおよび空白フィールドについて説明します。これらは、SQLファンクションおよび条件のjson_value
、json_query
、json_table
、json_serialize
、json_mergepatch
、is json
、is not json
、json_exists
およびjson_equal
の1つ以上で使用されます。 - SQL/JSON条件JSON_EXISTS
SQL/JSON条件json_exists
では、SQL/JSONパス式を行フィルタとして使用して、JSON文書の内容に基づいて行を選択できます。条件json_exists
は、SELECT
文のCASE
式またはWHERE
句で使用できます。 - SQL/JSONファンクションJSON_VALUE
SQL/JSONファンクションjson_value
は、JSONデータを選択し、SQLスカラーやユーザー定義のSQLオブジェクト型またはSQLコレクション型(VARRAY、ネストした表)のインスタンスを返します。 - SQL/JSONファンクションJSON_QUERY
SQL/JSONファンクションjson_query
は、1つ以上の値をJSONデータから選択し、JSON値を表す文字列(VARCHAR2
、CLOB
またはBLOB
インスタンス)を戻します。したがって、json_query
を使用してJSON文書のフラグメントを取得できます。 - SQL/JSONファンクションJSON_TABLE
SQL/JSONファンクションjson_table
は様々なSQLデータ型の列に特定のJSONデータを投影します。これを使用してJSON文書の一部を新規仮想表の行および列にマップしますが、これは、インラインのビューとみなすこともできます。 - Oracle SQLファンクションJSON_SERIALIZE
Oracle SQLファンクションjson_serialize
は、入力としてJSONデータ(任意のSQLデータ型、VARCHAR2
、CLOB
またはBLOB
)を受け取り、そのテキスト表現(VARCHAR2
、CLOB
またはBLOB
データ)を返します。VARCHAR2(4000)
はデフォルトの戻り型です。 - JSONデータ・ガイド
JSONデータ・ガイドを使用すると、Oracle Databaseに格納されたJSON文書の構造と内容に関する情報を検出できます。