Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pengidentifikasi digunakan dalam Entity SQL untuk mewakili alias ekspresi kueri, referensi variabel, properti objek, fungsi, dan sebagainya. Entity SQL menyediakan dua jenis pengidentifikasi: pengidentifikasi sederhana dan pengidentifikasi yang dikutip.
Pengidentifikasi Sederhana
Pengidentifikasi sederhana di Entity SQL adalah urutan karakter alfanumerik dan garis bawah. Karakter pertama pengidentifikasi harus karakter alfabet (a-z atau A-Z).
Pengidentifikasi Yang Dikutip
Pengidentifikasi yang dikutip adalah urutan karakter apa pun yang diapit kurung siku ([]). Pengidentifikasi yang dikutip memungkinkan Anda menentukan pengidentifikasi dengan karakter yang tidak valid dalam pengidentifikasi. Semua karakter di antara tanda kurung siku menjadi bagian dari pengidentifikasi, termasuk semua spasi kosong.
Pengidentifikasi yang dikutip tidak dapat menyertakan karakter berikut:
Baris baru.
Pengangkutan kembali.
Tab.
Backspace.
Kurung siku tambahan (yaitu, tanda kurung siku dalam kurung siku yang menguraikan pengidentifikasi).
Pengidentifikasi yang dikutip dapat menyertakan karakter Unicode.
Pengidentifikasi yang dikutip memungkinkan Anda membuat karakter nama properti yang tidak valid dalam pengidentifikasi, seperti yang diilustrasikan dalam contoh berikut:
SELECT c.ContactName AS [Contact Name] FROM customers AS c
Anda juga dapat menggunakan pengidentifikasi yang dikutip untuk menentukan pengidentifikasi yang merupakan kata kunci yang dipesan dari Entity SQL. Misalnya, jika jenis Email memiliki properti bernama "From", Anda dapat membedakannya dari kata kunci yang dipesan FROM dengan menggunakan tanda kurung siku, sebagai berikut:
SELECT e.[From] FROM emails AS e
Anda dapat menggunakan pengidentifikasi yang dikutip di sisi kanan operator titik (.).
SELECT t FROM ts as t WHERE t.[property] == 2
Untuk menggunakan kurung siku dalam pengidentifikasi, tambahkan tanda kurung siku ekstra. Dalam contoh berikut "abc]" adalah pengidentifikasi:
SELECT t from ts as t WHERE t.[abc]]] == 2
Untuk semantik perbandingan pengidentifikasi yang dikutip, lihat Set Karakter Input.
Aturan Aliasing
Sebaiknya tentukan alias dalam kueri SQL Entitas kapan pun diperlukan, termasuk konstruksi SQL Entitas berikut:
Bidang konstruktor baris.
Item dalam klausa FROM ekspresi kueri.
Item dalam klausa SELECT ekspresi kueri.
Item dalam klausa GROUP BY dari ekspresi kueri.
Alias yang Valid
Alias yang valid di Entity SQL adalah pengidentifikasi sederhana atau pengidentifikasi yang dikutip.
Generasi Alias
Jika tidak ada alias yang ditentukan dalam ekspresi kueri Entity SQL, Entity SQL mencoba menghasilkan alias berdasarkan aturan sederhana berikut:
Jika ekspresi kueri (yang aliasnya tidak ditentukan) adalah pengidentifikasi sederhana atau dikutip, pengidentifikasi tersebut digunakan sebagai alias. Misalnya,
ROW(a, [b])menjadiROW(a AS a, [b] AS [b]).Jika ekspresi kueri adalah ekspresi yang lebih kompleks, tetapi komponen terakhir dari ekspresi kueri tersebut adalah pengidentifikasi sederhana, pengidentifikasi tersebut digunakan sebagai alias. Misalnya,
ROW(a.a1, b.[b1])menjadiROW(a.a1 AS a1, b.[b1] AS [b1]).
Kami menyarankan agar Anda tidak menggunakan alias implisit jika Anda ingin menggunakan nama alias nanti. Alias kapan saja (implisit atau eksplisit) konflik atau diulang dalam cakupan yang sama, akan ada kesalahan kompilasi. Alias implisit akan melewati kompilasi bahkan jika ada alias eksplisit atau implisit dengan nama yang sama.
Alias implisit dibuat secara otomatis berdasarkan input pengguna. Misalnya, baris kode berikut akan menghasilkan NAME sebagai alias untuk kedua kolom dan karenanya akan bertentangan.
SELECT product.NAME, person.NAME
Baris kode berikut, yang menggunakan alias eksplisit, juga akan gagal. Namun, kegagalan akan lebih jelas dengan membaca kode.
SELECT 1 AS X, 2 AS X …
Aturan Cakupan
Entity SQL menentukan aturan cakupan yang menentukan kapan variabel tertentu terlihat dalam bahasa kueri. Beberapa ekspresi atau pernyataan memperkenalkan nama baru. Aturan cakupan menentukan di mana nama-nama tersebut dapat digunakan, dan kapan atau di mana deklarasi baru dengan nama yang sama dengan yang lain dapat menyembunyikan pendahulunya.
Saat nama didefinisikan dalam kueri SQL Entitas, nama tersebut dikatakan ditentukan dalam cakupan. Cakupan mencakup seluruh wilayah kueri. Semua referensi ekspresi atau nama dalam cakupan tertentu dapat melihat nama yang ditentukan dalam cakupan tersebut. Sebelum cakupan dimulai dan setelah berakhir, nama yang ditentukan dalam cakupan tidak dapat direferensikan.
Cakupan dapat ditumpuk. Bagian dari Entity SQL memperkenalkan cakupan baru yang mencakup seluruh wilayah, dan wilayah ini dapat berisi ekspresi SQL Entitas lainnya yang juga memperkenalkan cakupan. Saat cakupan ditumpuk, referensi dapat dibuat ke nama yang ditentukan dalam cakupan terda dalam, yang berisi referensi. Referensi juga dapat dibuat untuk nama apa pun yang ditentukan dalam cakupan luar apa pun. Setiap dua cakupan yang ditentukan dalam cakupan yang sama dianggap sebagai cakupan saudara. Referensi tidak dapat dibuat untuk nama yang ditentukan dalam cakupan saudara.
Jika nama yang dideklarasikan dalam cakupan dalam cocok dengan nama yang dideklarasikan dalam cakupan luar, referensi dalam cakupan dalam atau dalam cakupan yang dideklarasikan dalam cakupan tersebut hanya merujuk ke nama yang baru dideklarasikan. Nama dalam cakupan luar disembunyikan.
Bahkan dalam cakupan yang sama, nama tidak dapat dirujuk sebelum ditentukan.
Nama global dapat ada sebagai bagian dari lingkungan eksekusi. Ini dapat mencakup nama koleksi persisten atau variabel lingkungan. Agar nama menjadi global, nama harus dideklarasikan dalam cakupan terluar.
Parameter tidak berada dalam cakupan. Karena referensi ke parameter menyertakan sintaks khusus, nama parameter tidak akan pernah bertabrakan dengan nama lain dalam kueri.
Ekspresi Kueri
Ekspresi kueri SQL Entitas memperkenalkan cakupan baru. Nama yang didefinisikan dalam klausa FROM diperkenalkan ke dalam dari cakupan dalam urutan penampilan, kiri ke kanan. Dalam daftar gabungan, ekspresi dapat merujuk ke nama yang ditentukan sebelumnya dalam daftar. Properti publik (bidang dan sebagainya) elemen yang diidentifikasi dalam klausul FROM tidak ditambahkan ke dari cakupan. Mereka harus selalu dirujuk oleh nama yang memenuhi syarat alias. Biasanya, semua bagian ekspresi SELECT dipertimbangkan dalam dari cakupan.
Klausul GROUP BY juga memperkenalkan cakupan saudara baru. Setiap grup dapat memiliki nama grup yang mengacu pada kumpulan elemen dalam grup. Setiap ekspresi pengelompokan juga akan memperkenalkan nama baru ke dalam cakupan grup. Selain itu, agregat sarang (atau grup bernama) juga ditambahkan ke cakupan. Ekspresi pengelompokan itu sendiri berada dalam lingkup dari cakupan. Namun, ketika klausul GROUP BY digunakan, klausul select-list (projection), HAVING, dan ORDER BY dianggap berada dalam cakupan grup, dan bukan dari cakupan. Agregat menerima perlakuan khusus, seperti yang dijelaskan dalam daftar berpoin berikut.
Berikut ini adalah catatan tambahan tentang cakupan:
Daftar pilih dapat memperkenalkan nama baru ke dalam cakupan, secara berurutan. Ekspresi proyeksi di sebelah kanan mungkin merujuk ke nama yang diproyeksikan di sebelah kiri.
Klausa ORDER BY dapat merujuk ke nama (alias) yang ditentukan dalam daftar pilih.
Urutan evaluasi klausa dalam ekspresi SELECT menentukan urutan nama yang dimasukkan ke dalam cakupan. Klausa FROM dievaluasi terlebih dahulu, diikuti oleh klausa WHERE, klausa GROUP BY, klausa HAVING, klausa SELECT, dan akhirnya klausa ORDER BY.
Penanganan Agregat
Entity SQL mendukung dua bentuk agregat: agregat berbasis koleksi dan agregat berbasis grup. Agregat berbasis koleksi adalah konstruksi pilihan dalam Entity SQL, dan agregat berbasis grup didukung untuk kompatibilitas SQL.
Saat menyelesaikan agregat, Entity SQL terlebih dahulu mencoba memperlakukannya sebagai agregat berbasis koleksi. Jika gagal, Entity SQL mengubah input agregat menjadi referensi ke agregat sarang dan mencoba mengatasi ekspresi baru ini, seperti yang diilustrasikan dalam contoh berikut.
AVG(t.c) becomes AVG(group..(t.c))