クエリ言語は、JSON データを操作するための強力な SQL に似た構文を提供します。 この言語は、JSON ドキュメントの柔軟性と階層性をサポートしながら、SQL エクスペリエンスを持つユーザーにとってなじみのあるものに設計されています。 この記事では、クエリ言語の主要な概念、構文、および機能について説明します。
クエリ言語の主要な概念
クエリ言語は、JSON ドキュメントとして格納されたデータへの表現力豊かな効率的なアクセスを提供するように構築されています。 この言語は、構造が異なる可能性があるドキュメントに対する単純なクエリと複雑なクエリの両方をサポートする、階層的で柔軟なデータをネイティブに使用するように設計されています。
クエリは、使い慣れた SQL に似た構文を使用して構成されますが、ドキュメント モデルに合わせて調整されます。 この適応は、従来のリレーショナル データベースとは異なり、固定スキーマがないため、プロパティが見つからないか、ドキュメント間で異なる型を持つ可能性があることを意味します。 言語では大文字と小文字が区別され、入れ子になったプロパティ、配列、およびオブジェクトをクエリ内で直接参照できます。 論理演算子、比較演算子、算術演算子を使用できます。この言語は、NoSQL データの柔軟性を受け入れながら、SQL エクスペリエンスを持つ開発者にとって直感的に使用できるように設計されています。
クエリ エンジンは、高パフォーマンスとスケーラビリティのために最適化されており、インデックスを使用してデータを効率的にフィルター処理、並べ替え、集計するために自動的に使用されます。 単純な検索から複雑な集計やサブクエリまで、幅広いクエリ パターンがサポートされています。 このサポートにより、クエリ エンジンはトランザクション ワークロードと分析ワークロードの両方に適しています。 また、この言語では、配列の操作、null 値と未定義の値の処理、結果の投影を柔軟な JSON 図形にするためのコンストラクトも提供されます。 これらのコンストラクトを使用すると、開発者はアプリケーションで必要な形式で必要なデータを正確に取得できます。
基本的なクエリ構造
一般的なクエリは、次の句で構成されます。
-
SELECT: 返すフィールドまたは値を指定します。 -
FROM: ソース コンテナーを識別し、エイリアスを割り当てることができます。 -
WHERE: 条件に基づいてドキュメントをフィルター処理します。 -
ORDER BY: 結果を並べ替えます。 -
GROUP BY: 結果を 1 つ以上のプロパティでグループ化します。
例: 単純クエリ
SELECT p.id, p.name
FROM products p
WHERE p.price > 20
ORDER BY p.price ASC
このクエリは、価格が 20 より大きい製品の id と name を昇順で並べ替え、返します。
JSON プロパティの操作
入れ子になったプロパティには、ドット表記または角かっこ表記を使用してアクセスできます。
SELECT p.manufacturer.name, p["metadata"].sku
FROM products p
配列は、 JOIN またはサブクエリを使用して走査できます。
SELECT p.name, c AS color
FROM products p
JOIN c IN p.metadata.colors
データのフィルター処理
WHERE句は、算術演算、論理演算、比較演算、文字列演算など、さまざまな演算子をサポートしています。
SELECT *
FROM products p
WHERE p.category IN ("Accessories", "Clothing") AND p.price BETWEEN 10 AND 50
集計とグループ化
集計関数とグループ化の結果を使用できます。
SELECT p.category, COUNT(1) AS productCount
FROM products p
GROUP BY p.category
Distinct、Top、Like
-
DISTINCTは重複する値を削除します。 -
TOP Nでは、結果の数が制限されます。 -
LIKEでは、ワイルドカードを使用したパターン マッチングがサポートされています。
SELECT DISTINCT VALUE p.category
FROM products p
SELECT TOP 5 *
FROM products p
ORDER BY p.price DESC
SELECT *
FROM products p
WHERE p.name LIKE "%bike%"
Subqueries
サブクエリを使用すると、配列内の値の存在をチェックするなど、より高度なフィルター処理とプロジェクションが可能になります。
SELECT VALUE p.name
FROM products p
WHERE EXISTS (
SELECT VALUE c FROM c IN p.metadata.colors WHERE c LIKE "%blue%"
)