Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il linguaggio di query offre una potente sintassi simile a SQL per l'uso dei dati JSON. Questo linguaggio è progettato per acquisire familiarità con gli utenti con esperienza SQL, supportando al tempo stesso la flessibilità e la natura gerarchica dei documenti JSON. Questo articolo presenta i concetti di base, la sintassi e le funzionalità del linguaggio di query.
Concetti di base del linguaggio di query
Il linguaggio di query è progettato per fornire accesso espressivo ed efficiente ai dati archiviati come documenti JSON. Alla sua base, il linguaggio è progettato per funzionare in modo nativo con dati gerarchici e flessibili, supportando query semplici e complesse su documenti che potrebbero avere strutture variabili.
Le query sono composte usando una sintassi simile a SQL familiare, ma sono adattate per il modello di documento. Questo adattamento significa che, a differenza dei database relazionali tradizionali, non esiste uno schema fisso. Le proprietà possono essere mancanti o avere tipi diversi tra i documenti. Il linguaggio fa distinzione tra maiuscole e minuscole e supporta il riferimento a proprietà, matrici e oggetti annidati direttamente all'interno delle query. Sono disponibili operatori logici, di confronto e aritmetici e il linguaggio è progettato per essere intuitivo per gli sviluppatori con esperienza SQL, sfruttando al tempo stesso la flessibilità dei dati NoSQL.
Il motore di query è ottimizzato per prestazioni elevate e scalabilità, usando automaticamente gli indici per filtrare, ordinare e aggregare in modo efficiente i dati. Supporta un'ampia gamma di modelli di query, da ricerche semplici a aggregazioni e sottoquery complesse. Questo supporto rende il motore di query adatto sia per carichi di lavoro transazionali che analitici. Il linguaggio fornisce anche costrutti per l'uso di matrici, la gestione di valori Null e non definiti e la proiezione di forme JSON flessibili. Questi costrutti consentono agli sviluppatori di recuperare esattamente i dati necessari nel formato richiesto dalle applicazioni.
Struttura di query di base
Una query tipica è costituita dalle clausole seguenti:
-
SELECT: specifica i campi o i valori da restituire. -
FROM: identifica il contenitore di origine e può assegnare un alias. -
WHERE: filtra i documenti in base alle condizioni. -
ORDER BY: ordina i risultati. -
GROUP BY: raggruppa i risultati in base a una o più proprietà.
Esempio: Query semplice
SELECT p.id, p.name
FROM products p
WHERE p.price > 20
ORDER BY p.price ASC
Questa query restituisce i id prodotti e name con un prezzo maggiore di 20, ordinati in base al prezzo in ordine crescente.
Uso delle proprietà JSON
È possibile accedere alle proprietà annidate usando la notazione punto o la notazione tra parentesi quadre:
SELECT p.manufacturer.name, p["metadata"].sku
FROM products p
Le matrici possono essere attraversate usando JOIN o sottoquery:
SELECT p.name, c AS color
FROM products p
JOIN c IN p.metadata.colors
Filtro dei dati
La WHERE clausola supporta un'ampia gamma di operatori, tra cui operazioni aritmetiche, logiche, di confronto e di stringa:
SELECT *
FROM products p
WHERE p.category IN ("Accessories", "Clothing") AND p.price BETWEEN 10 AND 50
Aggregazione e raggruppamento
È possibile usare funzioni di aggregazione e risultati di gruppo:
SELECT p.category, COUNT(1) AS productCount
FROM products p
GROUP BY p.category
Distinct, Top e Like
-
DISTINCTrimuove i valori duplicati. -
TOP Nlimita il numero di risultati. -
LIKEsupporta la corrispondenza dei criteri con caratteri jolly.
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
Le sottoquery consentono filtri e proiezioni più avanzati, inclusa la verifica dell'esistenza di valori nelle matrici:
SELECT VALUE p.name
FROM products p
WHERE EXISTS (
SELECT VALUE c FROM c IN p.metadata.colors WHERE c LIKE "%blue%"
)