查詢語言提供強大的類似 SQL 的語法來處理 JSON 資料。 這種語言旨在讓具有 SQL 經驗的使用者熟悉,同時也支援 JSON 文件的靈活性和分層性質。 本文介紹了查詢語言的核心概念、語法和特點。
查詢語言的核心概念
查詢語言旨在提供對儲存為 JSON 文件的資料的富有表現力且有效率的存取。 從根本上講,該語言旨在本地處理分層和靈活的數據,支援對可能具有不同結構的文件進行簡單和複雜的查詢。
查詢是使用熟悉的類似 SQL 的語法組成,但已針對文件模型進行調整。 這種適應意味著,與傳統的關聯式資料庫不同,沒有固定的結構描述——屬性可能會遺失或跨文件具有不同的類型。 該語言區分大小寫,並支援直接在查詢中引用巢狀屬性、陣列和物件。 提供邏輯運算子、比較運算子和算術運算子,該語言旨在讓具有 SQL 經驗的開發人員直觀,同時擁抱 NoSQL 資料的靈活性。
查詢引擎針對高效能和可擴展性進行了最佳化,自動使用索引來有效地過濾、排序和聚合資料。 它支援廣泛的查詢模式,從簡單的查找到複雜的聚合和子查詢。 此支援可讓查詢引擎適用於交易式和分析工作量。 該語言還提供了用於使用陣列、處理空值和未定義值以及以靈活的 JSON 形狀投影結果的結構。 這些建構可讓開發人員以應用程式所需的格式準確擷取所需的資料。
基本查詢結構
一般查詢包含下列子句:
-
SELECT:指定要傳回的欄位或值。 -
FROM:識別來源容器,並可指派別名。 -
WHERE:根據條件篩選文件。 -
ORDER BY:對結果進行排序。 -
GROUP BY:依一或多個屬性將結果分組。
範例:簡單查詢
SELECT p.id, p.name
FROM products p
WHERE p.price > 20
ORDER BY p.price ASC
此查詢會傳回 id 價格大於 20 的產品的 和 , 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 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%"
子查詢
子查詢允許更高級的過濾和投影,包括檢查陣列中是否存在值:
SELECT VALUE p.name
FROM products p
WHERE EXISTS (
SELECT VALUE c FROM c IN p.metadata.colors WHERE c LIKE "%blue%"
)