Bagikan melalui


SELECT - Bahasa kueri di Cosmos DB (di Azure dan Fabric)

Klausa SELECT mengidentifikasi bidang untuk dikembalikan dalam hasil kueri. Klausa kemudian memproyeksikan bidang tersebut ke dalam tataan hasil JSON.

Setiap kueri terdiri dari klausul SELECT dan opsional FROM dan WHERE klausul, sesuai standar ANSI SQL. Biasanya, sumber dalam FROM klausul dijumlahkan, dan WHERE klausul menerapkan filter pada sumber untuk mengambil subset item JSON.

Syntax

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 ]

Arguments

Description
select_specification Properti atau nilai yang akan dipilih untuk kumpulan 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 bahwa duplikat properti yang diproyeksikan harus dihapus.
scalar_expression Ekspresi yang mewakili nilai yang akan dihitung.

Tipe pengembalian

Mengembalikan bidang atau nilai yang diproyeksikan seperti yang ditentukan.

Examples

Bagian ini berisi contoh cara menggunakan konstruksi bahasa kueri ini.

Pilih nilai string statis

Dalam contoh ini, 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
  "Cosmic", "Works"
[
  {
    "$1": "Cosmic",
    "$2": "Works"
  }
]

Bidang proyek

Dalam contoh ini, proyeksi JSON digunakan untuk menyempurnakan struktur dan nama bidang yang tepat untuk objek JSON yang dihasilkan. Di sini, objek JSON dibuat dengan bidang bernama identifier dan model. Objek JSON luar masih tidak disebutkan namanya, sehingga angka yang dihasilkan ($1) digunakan untuk menamai bidang ini.

SELECT {
  identifier: p.name,
  model: p.sku
}
FROM
  products p
[
  {
    "$1": {
      "identifier": "Remdriel Shoes",
      "model": "61506"
    }
  },
  {
    "$1": {
      "identifier": "Tirevy trunks",
      "model": "73402"
    }
  },
  ...
]

Untai (karakter) statis proyek

Dalam contoh ini, kata kunci VALUE digunakan dengan string statis untuk membuat array string sebagai hasilnya.

SELECT VALUE
  "Cosmic Works"
[
  "Cosmic Works"
]

Proyeksi kompleks

Dalam contoh ini, kueri menggunakan kombinasi SELECT klausa, 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: p.name,
  link: p.metadata.link,
  firstTag: p.tags[0]["value"]
}
FROM
  products p
[
  {
    "name": "Remdriel Shoes",
    "link": "https://www.adventure-works.com/remdriel-shoes/68719521615.p",
    "firstTag": "suede-leather-and-mesh"
  },
  {
    "name": "Tirevy trunks",
    "link": "https://www.adventure-works.com/tirevy-trunks/68719520573.p",
    "firstTag": "polyester"
  },
  ...
]

Komentar

  • Sintaksis SELECT * hanya valid jika FROM klausul telah mendeklarasikan tepat satu alias. SELECT * menyediakan proyeksi identitas, yang dapat berguna jika tidak ada proyeksi yang diperlukan. SELECT * hanya valid jika FROM klausul ditentukan dan hanya memperkenalkan satu sumber input.
  • Keduanya SELECT <select_list> dan SELECT * merupakan gula sintaktik dan dapat diekspresikan menggunakan pernyataan sederhana SELECT .
  • Ekspresi SELECT * FROM ... AS from_alias ... setara dengan SELECT from_alias FROM ... AS from_alias ....
  • Ekspresi SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...] setara dengan SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...].