SELECT 절(NoSQL 쿼리)
적용 대상: NoSQL
ANSI SQL 표준에 따라 모든 쿼리는 SELECT
절과 선택적 FROM
및 WHERE
절로 구성됩니다. 일반적으로 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 개체의 정확한 구조와 필드 이름을 미세 조정합니다. 여기서는 department
및 team
이라는 필드를 사용하여 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...]
와 동등합니다.