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