Klausa SELECT (kueri NoSQL)
BERLAKU UNTUK: NoSQL
Setiap kueri terdiri dari klausul SELECT
dan opsional FROM
dan WHERE
klausul, sesuai standar ANSI SQL. Biasanya, sumber dalam FROM
klausul dijumlahkan, danWHERE
klausul menerapkan filter pada sumber untuk mengambil subset item JSON. Klausul SELECT
kemudian memproyeksikan nilai JSON yang diminta dalam daftar pilih.
Sintaks
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 ]
Argumen
Deskripsi | |
---|---|
<select_specification> |
Properti atau nilai yang akan dipilih untuk tataan hasil. |
'*' |
Menentukan bahwa nilai harus diambil tanpa membuat perubahan apa pun. Secara khusus jika nilai yang diproses adalah objek, semua properti diambil. |
<object_property_list> |
Menentukan daftar properti yang akan diambil. Setiap nilai yang dikembalikan adalah objek dengan properti yang ditentukan. |
VALUE |
Menentukan bahwa nilai JSON harus diambil alih-alih objek JSON lengkap. Argumen ini, tidak seperti <property_list> tidak membungkus nilai yang diproyeksikan dalam objek. |
DISTINCT |
Menentukan duplikat properti yang diproyeksikan harus dihapus. |
<scalar_expression> |
Ekspresi yang mewakili nilai yang akan dikomputasi. Untuk informasi selengkapnya, lihat bagian ekspresi skalar untuk detailnya. |
Contoh
Contoh pertama ini memilih dua nilai string statis dan mengembalikan array dengan satu objek yang berisi kedua nilai. Karena nilai tidak disebutkan namanya, angka berurutan yang dihasilkan digunakan untuk memberi nama bidang json yang setara.
SELECT "Adventure", "Works"
[
{
"$1": "Adventure",
"$2": "Works"
}
]
Dalam contoh berikutnya, proyeksi JSON digunakan untuk menyempurnakan struktur dan nama bidang yang tepat untuk objek JSON yang dihasilkan. Di sini, objek JSON dibuat dengan bidang bernama department
dan team
. Objek JSON luar masih tidak disebutkan namanya, sehingga angka yang dihasilkan ($1
) digunakan untuk menamai bidang ini.
SELECT {
department: "Sales",
team: "Field sales"
}
[
{
"$1": {
"department": "Sales",
"team": "Field sales"
}
}
]
Contoh ini menggambarkan meratakan tataan hasil dari contoh sebelumnya untuk menyederhanakan penguraian. Kata VALUE
kunci digunakan di sini untuk mencegah pembungkusan hasil ke objek JSON lain.
SELECT VALUE {
department: "Sales",
team: "Field sales"
}
[
{
"department": "Sales",
"team": "Field sales"
}
]
Dalam contoh ini, VALUE
kata kunci digunakan dengan string statis untuk membuat array string sebagai hasilnya.
SELECT VALUE "Sales"
[
"Sales"
]
Dalam contoh akhir ini, asumsikan bahwa ada kontainer dengan dua item dengan berbagai bidang dari jenis data yang berbeda.
[
{
"team": "Field sales",
"identity": {
"name": "Parker McLean"
},
"contact": [
"206-555-0147"
]
},
{
"team": "Field sales",
"identity": {
"name": "Beibit Shayakhmet"
},
"contact": [
"206-555-0178"
]
}
]
Kueri contoh akhir ini menggunakan kombinasi SELECT
klausul, VALUE
kata kunci, FROM
klausa, dan proyeksi JSON untuk melakukan kueri umum dengan hasil yang diubah menjadi objek JSON agar klien dapat mengurai.
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"
}
]
Keterangan
- Sintaksis
SELECT *
hanya valid jikaFROM
klausul telah mendeklarasikan tepat satu alias.SELECT *
memberikan proyeksi identitas yang dapat berguna jika tidak ada proyeksi yang diperlukan.SELECT *
hanya valid jikaFROM
klausul ditentukan dan hanya memperkenalkan satu sumber input. - Keduanya
SELECT <select_list>
danSELECT *
merupakan "gula sintaktik" dan dapat diekspresikan secara alternatif dengan menggunakan pernyataan sederhanaSELECT
:SELECT * FROM ... AS from_alias ...
setara dengan:SELECT from_alias FROM ... AS from_alias ...
.SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...]
setara dengan:SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...]
.