Atlas SQL 언어 참조
이 페이지의 내용
이 페이지에서는 Atlas SQL 의 SQL 유연한 작업을 위한 최고 수준의 지원을 제공하기 위해 설계된 언어인 MongoDB 의 구문과 의미 체계를 간략하게 document model 설명합니다. 이 페이지에서는 지원되는 절, 연산자, 표현식 및 함수를 나열하고 설명합니다.
호환성 및 제한 사항
Atlas SQL은 SQL-92 표준을 기반으로 합니다. 그러나 Atlas SQL은 다음과 같은 제한 사항으로 인해 SQL-92와 완전히 호환되지 않습니다.
UNION
함수는 지원되지 않습니다. 그러나UNION ALL
은 지원됩니다.date
데이터 유형 은 지원되지 않습니다. 대신timestamp
을(를) 사용하세요.SELECT DISTINCT
은(는) 지원되지 않습니다.간격 및 날짜 간격 연산은 지원되지 않습니다.
Atlas SQL 은 Atlas Vector Search 및 Atlas Search 를 지원 하지 않습니다.
유형 시스템
데이터 유형
Atlas SQL 데이터 유형은 BSON types 의 집합입니다. . 이러한 모든 유형은 Atlas SQL에서 쿼리할 수 있습니다. 그것들은 다음과 같습니다:
string (
STRING
)문서(
DOCUMENT
)배열(
ARRAY
)BinData(
BINDATA
)ObjectId (
OBJECTID
)부울 (
BOOL
)날짜(
TIMESTAMP
)Null (
NULL
)정규식 (
REGEX
)32비트 정수 (
INT
)더블 (
DOUBLE
)긴 (
LONG
)타임스탬프(
BSON_TIMESTAMP
)10진수(
DECIMAL
)MinKey(
MINKEY
)MaxKey (
MAXKEY
)DBPointer(
DBPOINTER
)기호(
SYMBOL
)범위가 있는 JavaScript(
JAVASCRIPTWITHSCOPE
)JavaScript(
JAVASCRIPT
)
Atlas SQL 의 각 유형에는 이름(위의 괄호 안)이 있으며, 이는 필요한 경우(예: CAST
과 같은 표현식 에서) 유형을 참조하는 데 사용할 수 있는 키워드입니다.
유형 변환
명시적 유형 변환은 CAST
함수 또는 ::
연산자를 통해 표현됩니다. 숫자 유형은 모두 상호 비교할 수 있습니다. Atlas SQL을 사용하면 피연산자를 동일한 숫자 유형으로 캐스팅하지 않고도 다양한 숫자 유형 간의 연산을 수행할 수 있습니다.
Schemas
Atlas SQL 은 스키마 를 사용하여 MongoDB의 유연한 문서 값을 유형으로 변환합니다. Atlas SQL 스키마 는 컴파일 타임에 참인 것으로 알려진 표현식 또는 컬렉션 에 대한 팩트의 컬렉션 입니다.
예를 들어, Atlas SQL 스키마는 표현식이 부울 또는 하위 필드가 있는 문서이거나 표현식이 길이가 1인 배열 또는 양의 정수라고 명시할 수 있습니다.
정적 유형 제약 조건이 충족되지 않으면 쿼리가 컴파일되지 않습니다.
절
Atlas SQL 쿼리는 기본 SQL 절 세트를 지원합니다. 사용 가능한 절은 다음과 같습니다.
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
OFFSET
LIMIT
SELECT
SELECT
모든 Atlas SQL 쿼리를 시작합니다. Atlas SQL에서는 SELECT VALUE
과 SELECT VALUES
을 서로 바꿔가며 사용할 수 있습니다.
Atlas SQL 에는 중첩된 SELECT
문에 별칭이 있어야 합니다.
SELECT foo FROM (SELECT bar FROM baz) as subSelect
CAST()
Atlas SQL 은 쿼리 의 값을 지정된 데이터 유형 으로 동적으로 변환할 수 있는 CAST()
함수를 지원합니다.
SELECT * FROM table WHERE period_start_utc >= CAST('2023-01-01T00:00:00.000Z' AS TIMESTAMP)
FROM
FROM
모든 Atlas SQL 쿼리 에서 평가되는 첫 번째 절입니다.
FROM
컬렉션 (SELECT * FROM foo)
, 배열 (SELECT * FROM [{'a': 1}])
, 조인 (SELECT * FROM a JOIN b)
, 파생 테이블 (SELECT * FROM (SELECT a FROM foo) d)
, FLATTEN 및 UNwind를 포함한 다양한 소스에서 데이터를 가져올 수 있습니다.
위치
WHERE
절은 수신 데이터에 대한 필터입니다. 표현식은 정적으로 BOOL
또는 NULL
유형이어야 하며 MISSING
로 평가될 수 있습니다.
그룹 기준
GROUP BY
데이터를 그룹화하고 집계하는 수단을 제공합니다.
FLATTEN 또는 UNwind 를 사용하여 평면화된 필드 에 GROUP BY
을(를) 사용하는 경우 별칭이 필요합니다.
SELECT customerAge, COUNT(*) FROM Sales GROUP BY customer.age AS customerAge
애그리게이션 함수
Atlas SQL은 다음과 같은 애그리게이션 함수를 지원합니다.
이름 | 설명 | 참고 사항 |
---|---|---|
| 인수를 배열의 끝으로 푸시합니다. 이 함수의 총 출력은 배열입니다. |
|
| 중복을 제거하는 배열의 끝으로 인수를 푸시합니다. 이 함수의 총 출력은 모든 중복 항목이 제거된 배열이 됩니다. 중복은 |
|
| 모든 인수의 평균을 반환합니다. | 인수는 숫자 유형으로 정적으로 입력해야 합니다. |
| 요소 수를 계산합니다. |
|
| 그룹의 첫 번째 요소를 반환합니다. | 입력에 결정적 순서가 있는 경우에만 결정적이며, 그렇지 않으면 정의되지 않습니다. |
| 그룹의 첫 번째 요소를 반환합니다. 입력에 결정적 순서가 있는 경우에만 결정적이며, 그렇지 않으면 정의되지 않습니다. |
|
| Atlas SQL |
|
| 이전 요소를 왼쪽으로 사용하여 문서를 연속적으로 병합하여 구성된 문서 를 반환합니다. 중복 키의 경우 새 요소의 키 값이 유지됩니다. | 인수는 |
| Atlas SQL |
|
| 전체 그룹 모집단에 대한 모든 요소의 표준 편차를 반환합니다. | 인수는 숫자 유형으로 정적으로 입력해야 합니다. stdDevPop을 참조하세요. |
| 그룹에 있는 모든 요소의 표본 표준 편차를 반환합니다. stdDevPop을 참조하세요. | 인수는 숫자 유형으로 정적으로 입력해야 합니다. |
| 모든 인수의 합계를 반환합니다. | 인수는 숫자 유형으로 정적으로 입력해야 합니다. |
보유
HAVING
절은 WHERE
절과 동일한 방식으로 작동하지만 GROUP BY
절 이후에 작동합니다. WHERE
절과 마찬가지로 HAVING
절은 정적으로 BOOL
또는 NULL
유형이어야 하며 MISSING
로 평가될 수 있는 표현식을 사용합니다. GROUP BY
에 정의된 별칭을 참조할 수 있으며 애그리게이션 함수가 있는 표현식을 포함할 수 있습니다. GROUP BY
에 정의된 별칭만 HAVING
절에 사용할 수 있습니다.
주문 기준
ORDER BY
절은 하나 이상의 정렬 키로 결과 설정하다 을 정렬하는 방법을 제공합니다. 각 정렬 키는 열 참조이거나 선택 표현식 목록에서 위치별로 SELECT
표현식 을 참조하는 정수 리터럴일 수 있습니다. 열 참조인 정렬 키는 복합 식별자일 수 있습니다. 이러한 복합 식별자는 데이터 소스 이름으로 한정하거나 문서 하위 필드를 참조할 수 있습니다.
Atlas SQL은 MISSING
NULL
NULL
를 보다 먼저 정렬하고, 를 다른 모든 값보다 먼저 정렬합니다. ORDER BY
절에서는 정렬 키 표현식에서 사용 가능한 모든 값이 >
(보다 큼) 및 <
(보다 작음) 연산자를 통해 비교 가능하도록 정적으로 검증될 수 있도록 요구합니다.
LIMIT 및 OFFSET
LIMIT
및 OFFSET
절을 사용하면 사용자가 쿼리에서 반환된 행 중 일부만 검색할 수 있습니다. LIMIT
숫자가 제공되면 해당 수 이상의 행이 반환되지 않습니다. OFFSET
숫자가 제공되면 행을 반환하기 전에 해당 수의 행을 건너뜁니다.
LIMIT
및 OFFSET
숫자는 모두 양의 정수여야 합니다. 없이 LIMIT
또는 를 사용하면 OFFSET
ORDER BY
동일한 결과가 보장되지 않습니다.
LIMIT
및 OFFSET
이 모두 설정되면 OFFSET
행을 건너뛰고 나머지 결과를 반환하며, 이 결과에는 LIMIT
숫자 행이 포함되어야 합니다.
LIMIT i, j
LIMIT i OFFSET j
의 짧은 형식입니다.
LIMIT
및 OFFSET
을(를) 하위 쿼리에 사용할 수 있습니다.
설정 작업
UNION ALL
설정하다 연산자 는 두 개의 SELECT
쿼리에 대해 단일 결과 설정하다 을 반환합니다. UNION ALL
연산자 는 결과 설정하다 에서 중복된 행을 제거 하지 않습니다. UNION ALL
연산자 가 반환한 결과 설정하다 에 정의된 순서가 없습니다.
Atlas SQL은 고유한 UNION
, INTERSECT
또는 EXCEPT
집합 연산을 지원하지 않습니다.
표현식
식별자
Atlas SQL의 식별자는 데이터베이스, 테이블 및 열을 참조합니다. Atlas SQL 식별자는 null 문자 \x00
을(를) 제외한 모든 UTF-8 문자를 지원합니다.
Atlas SQL에서는 다른 시맨틱 의미를 가진 문자와의 충돌을 피하기 위해 일부 식별자가 제한됩니다. 식별자에 이러한 문자가 포함되려면 로 구분 되어야 합니다. 예를 들어, 식별자가 숫자로 시작하거나 예약된 키워드와 충돌하는 경우 식별자를 구분해야 합니다(예: "10cent"
). 식별자는 구분 여부에 관계없이 대소문자를 구분합니다.
Aliases
식별자는 Atlas SQL의 모든 별칭에 사용됩니다. 대부분의 경우 Atlas SQL은 동일한 절에서 별칭이 두 번 이상 사용되면 오류를 반환합니다. 단, 별칭은 UNION ALL
의 양쪽에서 반복될 수 있습니다. 이는 자동으로 생성된 별칭에도 적용됩니다.
키워드
Atlas SQL 키워드(예: SELECT
, FROM
, JOIN
등)는 구분되지 않은 식별자로 사용할 수 없습니다.
리터럴
Atlas SQL은 부울, null, 숫자 및 문자열에 대한 리터럴을 지원합니다. 문자열은 작은따옴표로 묶습니다. string 리터럴에 작은따옴표 문자를 포함하려면 두 배로 늘리세요('o''clock'
).
리터럴 정수는 32비트 부호 있는 정수 범위 내에 있는 경우 INT
로 입력되고, 그렇지 않은 경우 LONG
로 입력됩니다. 리터럴 부동 점 숫자 또는 과학 표기법 숫자의 유형은 DOUBLE
입니다.
Atlas SQL은 모든 유형에 대해 리터럴을 지원하지 않습니다. 예를 들어 OBJECTID
, BSON_DATE
및 DECIMAL
에는 리터럴 구문이 없습니다. 이러한 유형의 경우 CAST
연산자를 사용하여 해당 유형의 string 또는 숫자 표현에서 해당 유형으로 가져와서 의사 리터럴 값을 얻을 수 있습니다. 일부 유형에는 관련 CAST
호출의 별칭을 지정하는 "생성자" 함수가 있을 수도 있습니다.
괄호로 묶인 표현식
괄호 안의 표현식은 괄호로 그룹화된 표현식입니다. 중위 연산자가 있는 경우, 연산 순서를 구분하기 위해 괄호(또는 유사한 메커니즘)가 필요할 수 있습니다. Atlas SQL에는 +
및 ::
과 같은 여러 중위 연산자가 있습니다. 예를 들어 1 + 2 * 3
의 값은 7 이고 (1 + 2) * 3
의 값은 9 입니다.
연산자
Atlas SQL은 다음과 같은 기본 연산자를 지원합니다.
+
-
*
/
||
<
<=
!=
==
>
>=
BETWEEN
AND
OR
NOT
하위 쿼리 표현식
하위 쿼리는 쿼리 내의 SQL 쿼리입니다. 표현식을 사용할 수 있는 모든 곳에서 하위 쿼리를 사용할 수 있습니다.
Atlas SQL은 스칼라 하위 쿼리와 테이블 하위 쿼리를 지원합니다. 스칼라 하위 쿼리는 0개 또는 1개의 행과 1개의 열이 있는 결과 집합을 반환합니다. 리터럴 또는 단일 열 값이 유효한 대부분의 위치에서 사용할 수 있습니다. 테이블 하위 쿼리는 0개 이상의 행과 하나 이상의 열을 반환합니다.
문서 및 필드 액세스 표현식
문서는 JSON 객체와 유사한 구문으로 표현할 수 있습니다. 키는 문자열이어야 하며 값은 지원되는 모든 유형 을 가질 수 있습니다. 문서 필드에 액세스 하기 위해 Atlas SQL 은 '점' 표기법과 '대괄호' 표기법의 두 가지 옵션을 지원합니다.
점 표기법은 MongoDB 애그리게이션의 필드 액세스와 유사합니다. 예를 들어 doc
문서에 f
필드가 포함된 경우 doc.f
표현식을 사용하여 해당 필드의 값에 액세스합니다. 대괄호 표기법은 필드 이름 주위에 대괄호([
및 ]
)를 사용하여 해당 이름의 필드에 액세스합니다. 예를 들어 이전에 설명한 것과 동일한 문서를 가정해 보겠습니다. doc["f"]
을(를) 사용하여 해당 필드의 값에 액세스합니다.
Null 및 누락
BSON은 NULL
과 MISSING
을(를) 구분합니다. NULL
의 경우 리터럴 값이 NULL
인 필드가 있는 반면 MISSING
의 경우 필드가 없어졌습니다.
댓글
주석은 쿼리 실행에 영향을 주지 않는 쿼리 내의 문자 시퀀스입니다. Atlas SQL은 표준 SQL 주석과 C 스타일 차단 주석을 모두 지원합니다.
표준 SQL 주석은 이중 대시로 시작하고 새 줄로 끝납니다.
\-- This is a standard SQL comment
차단 주석은 \*
로 시작하여 일치하는 */
항목에서 끝납니다.
\* This is a multiline comment */