FROM 절(NoSQL 쿼리)
적용 대상: NoSQL
쿼리의 뒷부분에서 소스를 필터링/프로젝션하지 않을 경우 FROM(FROM <from_specification>
) 절은 선택 사항입니다. SELECT * FROM products
와 같은 쿼리는 이름에 관계없이 전체 컨테이너를 열거합니다. 컨테이너 이름을 사용하는 대신 컨테이너에 대한 특수 식별자 ROOT
를 사용할 수도 있습니다.
FROM
절은 쿼리별로 다음 규칙을 적용합니다.
- 컨테이너를 별칭으로
SELECT p.id FROM products AS p
또는 간단히SELECT p.id FROM products p
로 지정할 수 있습니다. 여기서p
는 컨테이너의 별칭입니다. 컨테이너 이름을 반드시products
또는p
로 지정할 필요는 없습니다.AS
는 식별자를 별칭하는 선택적 키워드입니다. - 별칭으로 지정한 후에는 원래 원본 이름을 바인딩할 수 없습니다. 예를 들어
SELECT products.id FROM products p
는products
식별자는 별칭으로 지정되었고 더 이상 확인할 수 없으므로 잘못된 구문입니다. - 엄격한 스키마 준수가 없는 경우 모호한 바인딩을 방지하려면 참조된 모든 속성이 정규화되어야 합니다. 예를 들어,
SELECT id FROM products p
는 속성id
가 바인딩되지 않았으므로 잘못된 구문입니다. 쿼리는 대신p.id
(또는<alias>.<property-name>
)를 사용하여id
속성을 참조해야 합니다.
구문
FROM <from_specification>
<from_specification> ::=
<from_source> {[ JOIN <from_source>][,...n]}
<from_source> ::=
<container_expression> [[AS] input_alias]
| input_alias IN <container_expression>
<container_expression> ::=
ROOT
| container_name
| input_alias
| <container_expression> '.' property_name
| <container_expression> '[' "property_name" | array_index ']'
인수
설명 | |
---|---|
<from_source> |
별칭이 있거나 없는 데이터 원본을 지정합니다. 별칭을 지정하지 않으면 다음 규칙을 사용하여 <container_expression> 에서 유추됩니다. 식이 container_name 이면 container_name 이 별칭으로 사용됩니다. 식이 <container_expression> 이면 property_name 이 별칭으로 사용됩니다. 식이 container_name 이면 container_name 이 별칭으로 사용됩니다. |
AS input_alias |
input_alias 가 기본 컨테이너 식에서 반환되는 값 집합임을 지정합니다. |
input_alias IN |
input_alias 가 기본 컨테이너 식에서 반환되는 각 배열의 모든 배열 요소를 반복하여 얻는 값 집합을 나타내도록 지정합니다. 배열이 아닌 기본 컨테이너 식에서 반환되는 값은 무시됩니다. |
<container_expression> |
항목을 검색하는 데 사용할 컨테이너 식을 지정합니다. |
ROOT |
현재 연결된 기본 컨테이너에서 항목을 검색하도록 지정합니다. |
container_name |
제공된 컨테이너에서 항목을 검색하도록 지정합니다. 컨테이너의 이름은 현재 연결된 컨테이너의 이름과 일치해야 합니다. |
input_alias |
제공된 별칭으로 정의된 다른 원본에서 항목을 검색하도록 지정합니다. |
<container_expression> '.' property_name |
property_name 속성에 액세스하여 항목을 검색하도록 지정합니다. |
<container_expression> '[' "property_name" \| array_index ']' |
지정된 컨테이너 식으로 검색된 모든 항목에 대해 property_name 속성 또는 array_index 배열 요소에 액세스하여 항목을 검색하도록 지정합니다. |
설명
<from_source>
에서 제공되거나 유추되는 모든 별칭은 고유해야 합니다. 구문 <container_expression> '.' property_name
은 <container_expression> '[' "property_name" ']'
과 동일합니다. 그러나 속성 이름에 비식별자 문자가 포함되어 있으면 후자의 구문을 사용할 수 있습니다.
누락된 속성, 누락된 배열 요소, 정의되지 않은 값 처리
컨테이너 식에서 속성이나 배열 요소에 액세스하고 해당 값이 존재하지 않으면 이 값은 무시되고 더 이상 처리되지 않습니다.
컨테이너 식 컨텍스트 범위 지정
컨테이너 식은 컨테이너 범위 또는 항목 범위일 수 있습니다.
컨테이너 식의 기본 원본이
ROOT
또는container_name
이면 식은 컨테이너 범위입니다. 이러한 식은 컨테이너에서 직접 검색되는 항목 집합을 나타내며 다른 컨테이너 식의 처리에 종속되지 않습니다.컨테이너 식의 기본 원본이 쿼리의 앞 부분에 도입된
input_alias
이면 식은 항목 범위입니다. 이러한 식은 컨테이너 식을 평가하여 얻은 항목 집합을 나타냅니다. 이 평가는 별칭이 지정된 컨테이너와 연결된 집합에 속하는 각 항목의 범위에서 수행됩니다. 결과 집합은 기본 집합에 있는 각 항목에 대해 컨테이너 식을 평가하여 얻는 집합의 합집합입니다.
예제
이 첫 번째 예제에서 FROM
절은 현재 컨테이너를 원본으로 지정하고 고유한 이름을 지정한 다음, 별칭을 지정하는 데 사용됩니다. 그런 다음, 별칭을 사용하여 쿼리 결과에 특정 필드를 투영합니다.
SELECT VALUE {
name: e.name,
location: e.workLocation
}
FROM
employees e
[
{
"name": "Tijana Stanković",
"location": {
"office": "Redmond, WA"
}
},
{
"name": "Jean Nadeau",
"location": {
"type": "Remote"
}
}
]
다음 예제에서 FROM
절은 원본을 더 작은 하위 집합으로 줄일 수도 있습니다. 각 항목에서 하위 트리만을 열거하려는 경우 하위 루트가 원본이 될 수 있습니다. 배열 또는 개체 하위루트를 원본으로 사용할 수 있습니다.
SELECT
*
FROM
employees.employment e
[
{
"hireDateTime": "2023-01-01T06:30:00.000Z",
"weeklyHours": 40,
"team": "Retail support"
},
{
"hireDateTime": "2023-01-01T09:30:00.000Z",
"team": "Retail support"
},
{
"hireDateTime": "2023-01-01T15:30:00.000Z",
"weeklyHours": 32,
"team": "Retail support"
}
]