다음을 통해 공유


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 pproducts 식별자는 별칭으로 지정되었고 더 이상 확인할 수 없으므로 잘못된 구문입니다.
  • 엄격한 스키마 준수가 없는 경우 모호한 바인딩을 방지하려면 참조된 모든 속성이 정규화되어야 합니다. 예를 들어, 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"
  }
]