Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A linguagem de consulta fornece uma sintaxe avançada, semelhante a SQL, para trabalhar com dados JSON. Essa linguagem foi projetada para ser familiar aos usuários com experiência sql, ao mesmo tempo em que dá suporte à flexibilidade e à natureza hierárquica dos documentos JSON. Este artigo apresenta os principais conceitos, sintaxe e recursos da linguagem de consulta.
Principais conceitos da linguagem de consulta
A linguagem de consulta é criada para fornecer acesso expressivo e eficiente aos dados armazenados como documentos JSON. Em sua base, a linguagem foi projetada para funcionar nativamente com dados hierárquicos e flexíveis, dando suporte a consultas simples e complexas em documentos que poderiam ter estruturas variadas.
As consultas são compostas usando uma sintaxe familiar semelhante a SQL, mas são adaptadas para o modelo de documento. Essa adaptação significa que, ao contrário dos bancos de dados relacionais tradicionais, não há esquema fixo— as propriedades podem estar ausentes ou ter tipos diferentes entre documentos. O idioma diferencia maiúsculas de minúsculas e dá suporte à referência a propriedades aninhadas, matrizes e objetos diretamente em consultas. Operadores lógicos, de comparação e aritméticos estão disponíveis e o idioma foi projetado para ser intuitivo para os desenvolvedores com experiência sql, ao mesmo tempo em que adota a flexibilidade dos dados NoSQL.
O mecanismo de consulta é otimizado para alto desempenho e escalabilidade, usando automaticamente índices para filtrar, classificar e agregar dados com eficiência. Ele dá suporte a uma ampla gama de padrões de consulta, desde pesquisas simples até agregações e subconsultas complexas. Esse suporte torna o mecanismo de consulta adequado para cargas de trabalho transacionais e analíticas. O idioma também fornece constructos para trabalhar com matrizes, lidar com valores nulos e indefinidos e projetar resultados em formas JSON flexíveis. Esses constructos permitem que os desenvolvedores recuperem exatamente os dados necessários no formato exigido por seus aplicativos.
Estrutura básica de consulta
Uma consulta típica consiste nas seguintes cláusulas:
-
SELECT: especifica quais campos ou valores devem ser retornados. -
FROM: identifica o contêiner de origem e pode atribuir um alias. -
WHERE: filtra documentos com base em condições. -
ORDER BY: classifica os resultados. -
GROUP BY: agrupa os resultados por uma ou mais propriedades.
Exemplo: Consulta Simples
SELECT p.id, p.name
FROM products p
WHERE p.price > 20
ORDER BY p.price ASC
Essa consulta retorna o id e name de produtos com um preço maior que 20, classificado por preço em ordem crescente.
Trabalhando com propriedades JSON
Você pode acessar propriedades aninhadas usando notação de ponto ou notação de colchete:
SELECT p.manufacturer.name, p["metadata"].sku
FROM products p
As matrizes podem ser percorrida usando JOIN ou subconsultas:
SELECT p.name, c AS color
FROM products p
JOIN c IN p.metadata.colors
Filtrando dados
A WHERE cláusula dá suporte a uma ampla gama de operadores, incluindo operações aritméticas, lógicas, de comparação e de cadeia de caracteres:
SELECT *
FROM products p
WHERE p.category IN ("Accessories", "Clothing") AND p.price BETWEEN 10 AND 50
Agregação e agrupamento
Você pode usar funções de agregação e resultados de grupo:
SELECT p.category, COUNT(1) AS productCount
FROM products p
GROUP BY p.category
Distinct, Top e Like
-
DISTINCTremove valores duplicados. -
TOP Nlimita o número de resultados. -
LIKEdá suporte à correspondência de padrões com caracteres curingas.
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
As subconsultas permitem filtragem e projeção mais avançadas, incluindo a verificação da existência de valores em matrizes:
SELECT VALUE p.name
FROM products p
WHERE EXISTS (
SELECT VALUE c FROM c IN p.metadata.colors WHERE c LIKE "%blue%"
)