Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A linguagem de consulta fornece uma sintaxe poderosa semelhante ao SQL para trabalhar com dados JSON. Essa linguagem foi projetada para ser familiar aos usuários com experiência em SQL, ao mesmo tempo em que suporta a flexibilidade e a natureza hierárquica dos documentos JSON. Este artigo apresenta os principais conceitos, sintaxe e recursos da linguagem de consulta.
Conceitos-chave
A linguagem de consulta é construída para fornecer acesso expressivo e eficiente aos dados armazenados como documentos JSON. Em sua base, a linguagem é projetada para trabalhar nativamente com dados hierárquicos e flexíveis, suportando consultas simples e complexas sobre documentos que podem ter estruturas variadas.
As consultas são compostas usando uma sintaxe familiar semelhante ao 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á um esquema fixo — as propriedades podem estar ausentes ou ter tipos diferentes entre documentos. A linguagem diferencia maiúsculas de minúsculas e oferece suporte à referência a propriedades, matrizes e objetos aninhados diretamente em consultas. Operadores lógicos, de comparação e aritméticos estão disponíveis, e a linguagem foi projetada para ser intuitiva para os desenvolvedores com experiência em 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 de forma eficiente. Ele suporta 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. A linguagem também fornece construções para trabalhar com matrizes, manipular valores nulos e indefinidos e projetar resultados em formas JSON flexíveis. Essas construções permitem que os desenvolvedores recuperem exatamente os dados de que precisam no formato exigido por seus aplicativos.
Estrutura
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 de consulta
Aqui está um exemplo de uma consulta básica:
SELECT p.id, p.name
FROM products p
WHERE p.price > 20
ORDER BY p.price ASC
Esta consulta devolve o id e name de produtos com um preço superior a 20, ordenados por preço por ordem crescente.
A trabalhar com propriedades
Você pode acessar propriedades aninhadas usando notação de ponto ou notação entre colchetes:
SELECT p.manufacturer.name, p["metadata"].sku
FROM products p
As matrizes podem ser percorridas usando JOIN ou subconsultas:
SELECT p.name, c AS color
FROM products p
JOIN c IN p.metadata.colors
Filtragem de dados
A WHERE cláusula suporta 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 agregadas e resultados de grupo:
SELECT p.category, COUNT(1) AS productCount
FROM products p
GROUP BY p.category
Utilização de palavras-chave
Aqui estão algumas palavras-chave de exemplo que pode usar numa consulta:
-
DISTINCTRemove valores duplicados. -
TOP Nlimita o número de resultados. -
LIKEsuporta correspondência de padrões com 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%"
)