Klausa SELECT (kueri NoSQL)

BERLAKU UNTUK: NoSQL

Setiap kueri terdiri dari SELECT klausul dan secara FROM opsional dan WHERE klausul, sesuai standar SQL ANSI. 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 memberi nama bidang ini.

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

Contoh ini mengilustrasikan meratakan kumpulan 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 klausul, 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 jika FROM klausul telah mendeklarasikan tepat satu alias. SELECT * memberikan proyeksi identitas yang dapat berguna jika tidak ada proyeksi yang diperlukan. SELECT * hanya valid jika FROM klausul ditentukan dan hanya memperkenalkan satu sumber input.
  • Baik SELECT <select_list> dan SELECT * adalah "gula sintaktik" dan dapat diekspresikan secara alternatif dengan menggunakan pernyataan sederhana SELECT :
    • 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...].