다음을 통해 공유


SELECT 절(NoSQL 쿼리)

적용 대상: NoSQL

ANSI SQL 표준에 따라 모든 쿼리는 SELECT 절과 선택적 FROMWHERE 절로 구성됩니다. 일반적으로 FROM 절의 소스는 열거되고 WHERE 절은 소스에 필터를 적용하여 JSON 항목의 하위 세트를 검색합니다. 그런 다음, SELECT 절은 요청된 JSON 값을 선택 목록에 프로젝션합니다.

구문

SELECT <select_specification>  

<select_specification> ::=
      '*'
      | [DISTINCT] <object_property_list>
      | [DISTINCT] VALUE <scalar_expression> [[ AS ] value_alias]  
  
<object_property_list> ::=
{ <scalar_expression> [ [ AS ] property_alias ] } [ ,...n ]

인수

설명
<select_specification> 결과 집합에 대해 선택되는 속성 또는 값입니다.
'*' 변경하지 않고 값을 검색하도록 지정합니다. 특히 처리된 값이 개체이면 모든 속성이 검색됩니다.
<object_property_list> 검색할 속성의 목록을 지정합니다. 반환된 각 값은 지정된 속성이 있는 개체입니다.
VALUE 완전한 JSON 개체 대신 JSON 값을 검색하도록 지정합니다. 이 인수는 <property_list>와 달리 개체에 프로젝션된 값을 래핑하지 않습니다.
DISTINCT 프로젝션된 속성의 중복을 제거해야 함을 지정합니다.
<scalar_expression> 계산할 값을 나타내는 식입니다. 자세한 내용은 스칼라 식 섹션을 참조하세요.

예제

첫 번째 예제에서는 두 개의 정적 문자열 값을 선택하고 두 값을 모두 포함하는 단일 개체가 있는 배열을 반환합니다. 값의 이름이 지정되지 않았으므로 순차적으로 생성된 숫자를 사용하여 해당 json 필드의 이름을 지정합니다.

SELECT "Adventure", "Works"
[
  {
    "$1": "Adventure",
    "$2": "Works"
  }
]

다음 예제에서는 JSON 프로젝션을 사용하여 결과 JSON 개체의 정확한 구조와 필드 이름을 미세 조정합니다. 여기서는 departmentteam이라는 필드를 사용하여 JSON 개체를 만듭니다. 외부 JSON 개체는 아직 이름이 없으므로 생성된 숫자($1)를 사용하여 이 필드의 이름을 지정합니다.

SELECT {
    department: "Sales",
    team: "Field sales"
}
[
  {
    "$1": {
      "department": "Sales",
      "team": "Field sales"
    }
  }
]

이 예제에서는 이전 예제에서 결과 집합을 평면화하여 구문 분석을 간소화하는 방법을 보여줍니다. 여기서는 결과를 다른 JSON 개체로 래핑하지 못하도록 VALUE 키워드가 사용되었습니다.

SELECT VALUE {
    department: "Sales",
    team: "Field sales"
}
[
  {
    "department": "Sales",
    "team": "Field sales"
  }
]

이 예제에서는 VALUE 키워드를 정적 문자열과 함께 사용하여 문자열 배열을 결과로 만듭니다.

SELECT VALUE "Sales"
[
  "Sales"
]

이 마지막 예제에서는 서로 다른 데이터 형식의 다양한 필드가 있는 두 개의 항목이 포함된 컨테이너가 있다고 가정합니다.

[
  {
    "team": "Field sales",
    "identity": {
      "name": "Parker McLean"
    },
    "contact": [
      "206-555-0147"
    ]
  },
  {
    "team": "Field sales",
    "identity": {
      "name": "Beibit Shayakhmet"
    },
    "contact": [
      "206-555-0178"
    ]
  }
]

이 마지막 예제 쿼리는 SELECT 절, VALUE 키워드, FROM 절 및 JSON 프로젝션의 조합을 사용하여 클라이언트가 구문 분석할 수 있도록 JSON 개체로 변환된 결과로 일반 쿼리를 수행합니다.

SELECT VALUE {
    name: e.identity.name,
    team: e.team,
    phone: e.contact[0]
}
FROM
    employees e
[
  {
    "name": "Parker McLean",
    "team": "Field sales",
    "phone": "206-555-0147"
  },
  {
    "name": "Beibit Shayakhmet",
    "team": "Field sales",
    "phone": "206-555-0178"
  }
]

설명

  • SELECT * 구문은 FROM 절이 정확히 하나의 별칭을 선언한 경우에만 유효합니다. SELECT *는 ID 프로젝션을 제공하며, 이는 프로젝션이 필요하지 않은 경우 유용할 수 있습니다. SELECT *FROM 절이 지정되고 단일 입력 원본만 도입된 경우에만 유효합니다.
  • SELECT * 둘 다 SELECT <select_list> "구문 설탕"이며 간단한 SELECT 문을 사용하여 표현 할 수 있습니다.
    • SELECT * FROM ... AS from_alias ...SELECT from_alias FROM ... AS from_alias ...와 동등합니다.
    • SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...]SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...]와 동등합니다.