쿼리 언어는 JSON 데이터 작업을 위한 강력한 SQL과 유사한 구문을 제공합니다. 이 언어는 JSON 문서의 유연성과 계층적 특성을 지원하면서 SQL 환경을 사용하는 사용자에게 친숙하도록 설계되었습니다. 이 문서에서는 쿼리 언어의 핵심 개념, 구문 및 기능을 소개합니다.
쿼리 언어의 핵심 개념
쿼리 언어는 JSON 문서로 저장된 데이터에 대한 표현적이고 효율적인 액세스를 제공하도록 빌드되었습니다. 이 언어는 기본적으로 계층적이고 유연한 데이터로 작동하도록 설계되었으며, 다양한 구조를 가질 수 있는 문서에 대한 간단하고 복잡한 쿼리를 모두 지원합니다.
쿼리는 친숙한 SQL과 유사한 구문을 사용하여 구성되지만 문서 모델에 맞게 조정됩니다. 이 적응은 기존의 관계형 데이터베이스와 달리 고정된 스키마가 없음을 의미합니다. 속성이 누락되거나 문서 간에 형식이 다를 수 있습니다. 언어는 대/소문자를 구분하며 쿼리 내에서 직접 중첩된 속성, 배열 및 개체 참조를 지원합니다. 논리, 비교 및 산술 연산자를 사용할 수 있으며, 이 언어는 NoSQL 데이터의 유연성을 수용하면서 SQL 경험이 있는 개발자에게 직관적으로 디자인되었습니다.
쿼리 엔진은 인덱스를 사용하여 데이터를 효율적으로 필터링, 정렬 및 집계하는 고성능 및 확장성을 위해 최적화됩니다. 간단한 조회에서 복잡한 집계 및 하위 쿼리에 이르기까지 광범위한 쿼리 패턴을 지원합니다. 이 지원을 통해 쿼리 엔진은 트랜잭션 및 분석 워크로드 모두에 적합합니다. 또한 이 언어는 배열 작업, null 및 정의되지 않은 값 처리, 유연한 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 및 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%"
)